我想要从一个通过http代理连接到互联网的系统中发送电子邮件,这个代理设置在Internet选项中。
我正在使用SmtpClient。
是否有办法通过这个代理设置使用SmtpClient发送邮件。谢谢。
我想要从一个通过http代理连接到互联网的系统中发送电子邮件,这个代理设置在Internet选项中。
我正在使用SmtpClient。
是否有办法通过这个代理设置使用SmtpClient发送邮件。谢谢。
HTTP代理控制HTTP流量,它们很少与SMTP有任何关系。毕竟,我从未听说过代理SMTP,因为SMTP本身固有地支持到目标SMTP服务器的“代理”链。
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);
重要提示
我们不建议您在新开发中使用 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);
}