通过http代理发送邮件

8

我想要从一个通过http代理连接到互联网的系统中发送电子邮件,这个代理设置在Internet选项中。

我正在使用SmtpClient。

是否有办法通过这个代理设置使用SmtpClient发送邮件。谢谢。


@Anthony,我相信他指的是SmtpClient类。 - Chuck Conway
4个回答

7

HTTP代理控制HTTP流量,它们很少与SMTP有任何关系。毕竟,我从未听说过代理SMTP,因为SMTP本身固有地支持到目标SMTP服务器的“代理”链。


您可以将 SMTP 代理到垃圾邮件过滤器上。垃圾邮件过滤器将评估电子邮件并将其转发到 SMTP 服务器。 - Chuck Conway
@Charles:就像我在答案中所说的,STMP本质上是一系列到达目的地的“代理”。垃圾邮件过滤器只是链中的另一个SMTP服务器。 - AnthonyWJones
我相信这是可能的。 Clever Components 实现了一个: http://www.clevercomponents.com/products/inetsuitenet/smtpclientnet.asp 但似乎不值得购买。 - Salar

4
我知道您想要使用浏览器的默认设置,但我也想为此提供一个答案。与此同时,您可以手动完成这个操作。
    MailAddress from = new MailAddress("from@mailserver.com");
    MailAddress to = new MailAddress("to@mailserver.com");

    MailMessage mm = new MailMessage(from, to);
    mm.Subject = "Subject"
    mm.Body = "Body";

    SmtpClient client = new SmtpClient("proxy.mailserver.com", 8080);
    client.Credentials = new System.Net.NetworkCredential("from@mailserver.com", "password");

    client.Send(mm);

3

使用 MailKit

来自 Microsoft:

重要提示

我们不建议您在新开发中使用 SmtpClient 类,因为 SmtpClient 不支持许多现代协议。请使用 MailKit 或其他库。有关更多信息,请参见 GitHub 上的不应使用 SmtpClient

创建一个控制台应用程序并添加 MailKit。

dotnet new console --framework net6.0
dotnet add package MailKit

发送代理代码

using MailKit.Net.Proxy;
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;

var emailFromAddress = "myemail@gmail.com";
var token = "mytoken";
var to = "Someone.Else@gmail.com";

var message = new MimeMessage();
message.From.Add(new MailboxAddress("Me", emailFromAddress));
message.To.Add(MailboxAddress.Parse(to));
message.Subject = "test";

message.Body = new TextPart("plain")
{
    Text = @"This is a test."
};

using (var client = new SmtpClient())
{
    client.ProxyClient = new HttpProxyClient("my-proxy.mydomain.com", 80);   // <-- set proxy
    client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
    client.Authenticate(emailFromAddress, token);

    client.Send(message);
    client.Disconnect(true);
}

在这个例子中,我使用了Gmail来发送邮件。为了这样做,您需要生成一个令牌。 前往您的Gmail > 单击页面右上方的个人图标 > 管理您的Google帐户 > 在左侧菜单中选择安全性 > 向下滚动到一半,选择应用程序密码 > 选择邮箱并选择您的设备 > 点击生成 > 复制令牌并将mytoken替换为该令牌。

0
如果您只能通过HTTP访问互联网,那么您唯一的方法就是设置一个带有SSH的VPS(或等效物),并使用corkscrew(或putty)通过端口443进行SSH隧道。从那里,将SMTP流量转发到您的SSH隧道上就是一件简单的事情。
请注意,如果您这样做,可能会违反公司的计算政策。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接