踢足球的草稿本 · uninstall pgadmin ...· 1 年前 · |
另类的人字拖 · react 使用 useEffect ...· 1 年前 · |
求醉的酸菜鱼 · typescript ts ...· 1 年前 · |
捣蛋的铁链 · StackExchange.Redis.Re ...· 1 年前 · |
正直的凉茶 · Python实现自适应中值滤波法去除椒盐噪声 ...· 1 年前 · |
我正在使用
SmtpClient
库通过以下方式发送电子邮件:
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");
代码在我的测试环境中运行良好,但是当我使用生产SMTP服务器时,代码失败,并显示
SmtpException
“发送邮件失败”。并显示内部
IOException
"Unable to read data from the transport connection: net_io_connectionclosed“。
我已经确认防火墙不是问题。客户端和服务器之间的端口打开得很好。我不确定还有什么可以抛出这个错误。
您的SMTP库是否支持加密连接?邮件服务器可能期望安全的TLS连接,因此在没有TLS握手的情况下关闭连接
试试这个:这是我用来向多个用户发送电子邮件的代码。
public string gmail_send()
using (MailMessage mailMessage =
new MailMessage(new MailAddress(toemail),
new MailAddress(toemail)))
mailMessage.Body = body;
mailMessage.Subject = subject;
SmtpClient SmtpServer = new SmtpClient();
SmtpServer.Credentials =
new System.Net.NetworkCredential(email, password);
SmtpServer.Port = 587;
SmtpServer.Host = "smtp.gmail.com";
SmtpServer.EnableSsl = true;
mail = new MailMessage();
String[] addr = toemail.Split(','); // toemail is a string which contains many email address separated by comma
mail.From = new MailAddress(email);
Byte i;
for (i = 0; i < addr.Length; i++)
mail.To.Add(addr[i]);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
mail.DeliveryNotificationOptions =
DeliveryNotificationOptions.OnFailure;
// mail.ReplyTo = new MailAddress(toemail);
mail.ReplyToList.Add(toemail);
SmtpServer.Send(mail);
return "Mail Sent";
catch (Exception ex)
string exp = ex.ToString();
return "Mail Not Sent ... and ther error is " + exp;
}
将端口从465更改为587,即可正常工作。
您可能还必须更改您的Gmail帐户上的“不太安全的应用程序”设置。EnableSsl,使用端口587并启用“安全性较低的应用程序”。如果你在谷歌上搜索不太安全的应用程序部分,会有谷歌帮助页面将你链接到你的账户的页面。这就是我的问题,但多亏了上面所有的答案,现在一切都正常了。
如果您在同一机器上使用SMTP服务器,并且您的SMTP绑定到一个IP地址,而不是"Any Assigned“,则可能会失败,因为它正在尝试使用SMTP当前未使用的IP地址(如127.0.0.1)。
如果以上所有解决方案都不适用于您,请尝试将以下文件更新到您的服务器(通过发布,我的意思是,在此之前的构建会很有帮助)。
bin-> projectname.dll
更新后,您将看到此错误。就像我用这个解决方案解决的那样。
为了提升jocull在评论中提到的内容,我正在做这篇文章中提到的所有事情,并删除...因为我的是在一个循环中一遍又一遍地运行;在第一次通过循环之后,它有时会失败。总是在第一次循环中起作用。
需要说明的是:该循环包括创建SmtpClient,然后使用正确的数据执行.Send。SmtpClient是在一个try/catch块中创建的,目的是捕获错误并确保对象在循环结束前被销毁。
在我的例子中,解决方案是确保在循环中的每一次之后都释放SmtpClient (通过using()语句或手动dispose)。即使SmtpClient对象在循环中被隐式销毁,.NET似乎也会留下一些东西,以便与下一次尝试发生冲突。
对于outlook的使用,以下设置不会给我错误
SMTP服务器名称smtp-mail.outlook.com
SMTP端口587
我已经尝试了上面的所有答案,但Office 365帐户仍然出现此错误。当允许不太安全的应用程序时,代码似乎在谷歌账户和smtp.gmail.com上运行得很好。
还有什么其他的建议我可以尝试一下吗?
下面是我使用的代码
int port = 587;
string host = "smtp.office365.com";
string username = "smtp.out@mail.com";
string password = "password";
string mailFrom = "noreply@mail.com";
string mailTo = "to@mail.com";
string mailTitle = "Testtitle";
string mailMessage = "Testmessage";
using (SmtpClient client = new SmtpClient())
MailAddress from = new MailAddress(mailFrom);
MailMessage message = new MailMessage
From = from
message.To.Add(mailTo);
message.Subject = mailTitle;
message.Body = mailMessage;
message.IsBodyHtml = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = host;
client.Port = port;
client.EnableSsl = true;
client.Credentials = new NetworkCredential
UserName = username,
Password = password
client.Send(message);
}
更新以及我是如何解决它的:
通过将Smtp客户端更改为Mailkit解决了此问题。由于安全问题,微软现在不建议使用System.Net.Mail Smtp客户端,而应使用MailKit。使用Mailkit给了我更清晰的错误消息,我可以理解寻找问题的根本原因(许可证问题)。你可以通过下载一个 Nuget 包来获取邮件包。
有关更多信息,请阅读有关Smtp客户端的文档: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
下面是我如何使用MailKit实现SmtpClient
int port = 587;
string host = "smtp.office365.com";
string username = "smtp.out@mail.com";
string password = "password";
string mailFrom = "noreply@mail.com";
string mailTo = "mailto@mail.com";
string mailTitle = "Testtitle";
string mailMessage = "Testmessage";
var message = new MimeMessage();
message.From.Add(new MailboxAddress(mailFrom));
message.To.Add(new MailboxAddress(mailTo));
message.Subject = mailTitle;
message.Body = new TextPart("plain") { Text = mailMessage };
using (var client = new SmtpClient())
client.Connect(host , port, SecureSocketOptions.StartTls);
client.Authenticate(username, password);
client.Send(message);
client.Disconnect(true);
}
这个错误是非常普遍的.It可能是由于许多原因,如邮件服务器不正确。有些托管公司使用mail.domainname格式。如果您只使用域名,它将无法工作。检查凭证、主机名、用户名、密码,如果需要,请与托管公司联系。
<smtp from="info@india.uu.com">
<!-- Uncomment to specify SMTP settings -->
<network host="domain.com" port="25" password="Jin@" userName="info@india.xx.com"/>
</smtp>
正直的凉茶 · Python实现自适应中值滤波法去除椒盐噪声 - 知乎 1 年前 |