我正在尝试使用Mailkit和本地(windows(发送电子邮件,它运行良好,但在服务器(ubuntu 20.04(上则不然。
我使用ufw(防火墙(打开了端口465,但它仍然无法工作。我打电话给时收到一个Timout*
smtp.Connect(Options.HostAddress, Options.HostPort, Options.HostSecureSocketOptions);
SecureSocket处于自动状态。
这是我的代码:
private bool Execute(Message message)
{
// create message
var builder = new BodyBuilder { HtmlBody = message.GetMessageAsString() };
message.Attachments.ToList().ForEach(x => builder.Attachments.Add(x.Filename, x.Data, x.ContentType));
var email = new MimeMessage
{
Sender = MailboxAddress.Parse(Options.SenderEmail),
Subject = message.Subject,
Body = builder.ToMessageBody()
};
if (!string.IsNullOrEmpty(Options.SenderName))
{
email.Sender.Name = Options.SenderName;
}
email.From.Add(email.Sender);
email.To.Add(MailboxAddress.Parse(message.EmailAddress));
// send email
using (var smtp = new SmtpClient())
{
smtp.Connect(Options.HostAddress, Options.HostPort, Options.HostSecureSocketOptions);
smtp.Authenticate(Options.HostUsername, Options.HostPassword);
smtp.Send(email);
smtp.Disconnect(true);
}
return true;
}
你知道该试试什么吗。
Ps如果我使用Netcat,我可以用Telnet从我的windows机器调用端口465。
谢谢你抽出时间。Severin
*System.TimeoutException: The operation has timed out.
at MailKit.Net.SocketUtils.ConnectAsync(String host, Int32 port, IPEndPoint localEndPoint, Int32 timeout, Boolean doAsync, CancellationToken cancellationToken)
at MailKit.MailService.ConnectSocket(String host, Int32 port, Boolean doAsync, CancellationToken cancellationToken)
at MailKit.Net.Smtp.SmtpClient.ConnectAsync(String host, Int32 port, SecureSocketOptions options, Boolean doAsync, CancellationToken cancellationToken)
at MailKit.Net.Smtp.SmtpClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken)
at
Test.Smtp.Services.TestService.Execute(Message message) in ...
at Test.Smtp.Services.TestService.SendEmail(Message message) in ...
这不是防火墙的问题。IP 6配置不正确。
我当时的解决方案只是禁用IP 6,然后它就工作了。
我使用了这两个命令:
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
干杯,Severin
Netcat在您的Windows机器上运行的原因与MailKit在Windows机器上工作的原因相同。
您的Windows计算机具有到邮件服务器的取消阻止路由。
另一方面,您的Ubuntu服务器没有到邮件服务器的未阻塞路由,因此无法连接到那里。
你需要弄清楚你的Ubuntu服务器上的防火墙和/或路由表,并修复它以允许连接到邮件服务器。