C#使用SMTP腾讯企业邮箱发送邮件465端口总是提示超时(号外!号外!587、587、587)


现象

C# SmtpClient发送邮件主要代码

C# 全选
using (SmtpClient mSmtpClient = new SmtpClient())
{
	mSmtpClient.Host = mailinfo.ServerHost;
	mSmtpClient.Port = mailinfo.ServerPort;
	mSmtpClient.UseDefaultCredentials = false;
	mSmtpClient.EnableSsl = mailinfo.mEnableSsl;
	if (mailinfo.mEnablePwdAuthentication)
	{
		System.Net.NetworkCredential nc = new System.Net.NetworkCredential(mailinfo.UserName, mailinfo.Password);
		//mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);
		//NTLM: Secure Password Authentication in Microsoft Outlook Express
		mSmtpClient.Credentials = nc;
		//mSmtpClient.Credentials = nc.GetCredfEnableSslential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");
	}
	else
	{
		
		mSmtpClient.Credentials = new System.Net.NetworkCredential(mailinfo.UserName, mailinfo.Password);
	}
	mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
	mSmtpClient.Send(mMailMessage);
}

邮箱参数:

Serversmtp.exmail.qq.com
Port465
Is_sslY
userName***
Password***

mSmtpClient.Send总是提示超时。

相同的参数在其他项目中(JAVA),就可以正常发送邮件

原因:

email - What is the difference between ports 465 and 587? - Stack Overflow

解决方案

不要用465端口,改用587端口587端口587端口.。什么IPV6啦,加大超时时间啦,统统不好使

Serversmtp.exmail.qq.com
Port587
Is_sslY
userName***
Password***

那为什么java项目中用465就可以发送邮件?

C# 和 Java 对 SMTP 端口/SSL 的处理方式不同,我给你详细分析一下原理:

1️⃣ SMTP 端口和加密模式

SMTP 常用端口:

端口加密方式说明
25明文 / STARTTLS标准 SMTP,一般用于服务器间转发,客户端可能被封
465SSL/TLSSMTPS,连接时就加密(隐式 SSL)
587STARTTLSSMTP 提交端口,客户端先明文连接,然后升级到 TLS(显式 TLS)

2️⃣ Java 与 C# 默认行为差异

Java (javax.mail):

  • Java 邮件库在连接 465/587 时会自动检测和升级:

    • mail.smtp.ssl.enable=true → 使用 SSL/TLS(465)

    • mail.smtp.starttls.enable=true → 使用 STARTTLS(587)

  • 如果你用 465 但没启用 ssl.enable,Java 可能依然能自动切换或容错。

  • Java 的 SMTP 库在失败时会自动尝试 STARTTLS 升级,所以你用原来的端口也能成功。

C# (SmtpClient):

 

  • C# 的 SmtpClient 不会自动升级

    • EnableSsl = true → 表示整个连接必须 SSL,适合 465 端口

    • 如果你用 465 并且 EnableSsl=false → 会超时

    • 如果你用 587 并且 EnableSsl=true → C# 会正确使用 STARTTLS

  • 也就是说,C# 不像 Java 会自动“试探”加密模式,你必须明确指定端口 + EnableSsl 配置。

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:C#使用SMTP腾讯企业邮箱发送邮件465端口总是提示超时(号外!号外!587、587、587)
下一篇:Python多版本管理
评论列表

发表评论

评论内容
昵称:

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码