使用 Mailkit 发送电子邮件无法在 ubuntu 服务器获取 TimeoutException

Sending Email with Mailkit is not working on ubuntu server getting TimeoutException

我正在尝试使用 Mailkit 发送电子邮件,在本地(windows)它工作正常但在服务器上(ubuntu 20.04)它不是。

我使用 ufw(防火墙)打开了端口 465,但它仍然无法正常工作。调用

时出现超时*
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。

感谢您的宝贵时间。 塞韦林

*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 ...

Netcat 在您的 Windows 机器上工作的原因与 MailKit 在您的 Windows 机器上工作的原因相同。

您的 Windows 机器有通往邮件服务器的解锁路由。

另一方面,您的Ubuntu服务器没有到邮件服务器的畅通路由,因此无法连接到那里。

您需要弄清楚 Ubuntu 服务器上的防火墙 and/or 路由表并修复它以允许连接到邮件服务器。

这不是防火墙的问题。 IP 6 没有正确配置。

我目前的解决方案只是禁用 IP 6,然后就可以了。

我使用了这两个命令:

sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1

干杯, 塞韦林