我有一些较旧的代码,可以很好地发送电子邮件,但是visual告诉我,代码已经过时了,我应该将它从Net.Mail改为Web.Mail。我已经重写了大部分,但我有几个问题。
这是原始的工作代码:
public void Send(string from, string to, string subject, string body, bool isHtml, string[] attachments)
{
var mailMessage = new MailMessage
{
From = from,
To = to,
Subject = subject,
Body = body,
BodyFormat = isHtml ? MailFormat.Html : MailFormat.Text
};
// Add attachments
if (attachments != null)
{
foreach (var t in attachments)
{
mailMessage.Attachments.Add(new Attachment(t));
}
}
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", _accountName);
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", _password);
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", _port.ToString(CultureInfo.InvariantCulture));
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true);
SmtpMail.SmtpServer = _smtp;
SmtpMail.Send(mailMessage);
}这是重写的部分(嗯,差不多):
public void Send2(string from, string to, string subject, string body, bool isHtml, string[] attachments)
{
var fromObj = new MailAddress(from);
var toObj = new MailAddress(to);
var mailMessage = new System.Net.Mail.MailMessage
{
From = fromObj,
Subject = subject,
Body = body,
IsBodyHtml = isHtml,
};
mailMessage.To.Add(toObj);
if (attachments != null)
{
foreach(var t in attachments)
{
mailMessage.Attachments.Add(new Attachment(t));
}
}
var smtp = new SmtpClient(_smtp) {Credentials = new NetworkCredential(_accountName, _password), Port = _port, EnableSsl = true};
smtp.Send(mailMessage);
}如果您想知道,我在代码中设置了更高的_port和_smtp,分别是465和smtp.gmail.com。
所以它看起来很有效,但是接下来又开始到发送部分,然后吐出其中的一个:
System.Net.Mail.SmtpException: The operation has timed out.是否有什么东西是我遗漏的,比如原始代码中的Fields,导致了超时?
谢谢!
解决方案
由于DavidH的正确方向,需要将端口从465更改为587 (或25;我使用前者没有问题)。
发布于 2013-07-22 17:15:49
一个小小的谷歌能帮上很大的忙。检查这个答案,看看你的解药--你用错了端口:
https://stackoverflow.com/questions/17793116
复制相似问题