开发者社区 问答 正文

電郵推送加密端口 465,587 無法連接 C# .net core 2.1

下面的代碼如果使用80 端口沒問題,但是 端口 用 465 跟587 就出問題。
Inner Exception 1:
IOException: Unable to read data from the transport connection: The connection was closed.  


public void SendEmail(string email, string subject, string content)
        {
            if (!SmtpServerEnabled) {
                return;
            }
            SmtpClient client = new SmtpClient(this.SmtpServer,587)
            {
                //UseDefaultCredentials = false,
                Credentials = new NetworkCredential(this.SmtpUserName,this.SmtpPassword)
            };

            client.EnableSsl = true;
            
            MailMessage mailMessage = new MailMessage
            {
                From = new MailAddress(this.SmtpSender)
            };

            
            mailMessage.From = new MailAddress(this.SmtpUserName);
            mailMessage.To.Add(email);
            mailMessage.IsBodyHtml = true;
            mailMessage.Body = content;
            mailMessage.Subject = subject;

            try
            {
                client.Send(mailMessage);
            }
            catch (System.Exception e) {
                System.Console.WriteLine(e.InnerException?.Message);
            }



        }

展开
收起
ags 2019-02-26 16:00:01 853 分享 版权
阿里云 AI 助理回答

根据您提供的代码片段和遇到的问题,看起来您在尝试使用SMTP端口465和587发送邮件时遇到了连接问题,而使用80端口则没有问题。结合知识库中的参考资料,以下是一些可能的解决方案和检查步骤:

  1. 确认端口与SSL/TLS配置匹配

    • 端口465是为SMTPS(SMTP over SSL)设计的,它要求从连接一开始就进行SSL加密。确保您的代码中正确设置了EnableSsl = true,这在您的代码中已经设置。
    • 端口587通常用于STARTTLS,即先建立未加密的连接,然后通过STARTTLS命令升级为加密连接。您的代码中也启用了SSL (EnableSsl = true),理论上应适用于587端口,但需要确认服务器是否支持从非加密到加密的转换。
  2. 执行连通性分析

    • 使用命令行工具如openssl s_client测试端口465的TLS连接情况:
      openssl s_client -connect smtp.example.com:465
      
    • 对于端口587,虽然不能直接用openssl s_client测试STARTTLS,但可以尝试在代码中更明确地处理STARTTLS流程,或确认服务器是否确实支持此模式。
  3. 检查网络环境和安全设置

    • 确保服务器的安全组规则和防火墙设置允许出站访问465和587端口。
    • 检查是否有企业级防火墙或ISP阻止了这些端口的流量。
  4. 抓包分析

    • 如果上述步骤未能解决问题,考虑对端口465或587的通信进行抓包分析,以确定连接为何被关闭。可以使用tcpdumpWireshark来捕获网络包,查看连接建立过程中是否存在异常。
  5. 服务端配置验证

    • 确认您的SMTP服务器确实支持465端口的SMTPS连接以及587端口上的STARTTLS。有时问题可能出在服务器配置不支持所选的连接方式上。
  6. 尝试其他示例代码或工具

    • 尝试使用不同的编程语言或外部工具发送邮件,以排除代码实现上的特定问题。例如,参考资料中有PHP和C#的示例代码,您可以参考这些示例调整您的实现逻辑。

如果以上所有步骤都已尝试且问题依旧存在,建议直接联系您的邮件服务提供商获取进一步的技术支持,可能存在特定于服务提供商的配置或限制。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答