我有一些代码,我试图用来从我的ASP.NET MVC 5网站发送电子邮件。从我所读到的,我正在以正确的方式做到这一点,代码是正确的
public static Task SendEmailAsync(IEnumerable<string> to,
IEnumerable<string> cc, string body)
{
if (to == null || to.Count() == 0)
return null;
if (String.IsNullOrEmpty(body))
throw new ArgumentNullException("body of the email is empty");
// Send email.
return Task.Factory.StartNew(() =>
{
// Client setup.
using (SmtpClient smtpClient = new SmtpClient("smtp.servername.com", 25)) // Tried 587 too.
{
smtpClient.Credentials = new System.Net.NetworkCredential()
{
UserName = Constants.AdminEmailAddress,
Password = Constants.AdminPwd
};
smtpClient.UseDefaultCredentials = true;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.EnableSsl = true;
// Mail message.
using (MailMessage mail = new MailMessage())
{
mail.Body = body;
mail.From = new MailAddress(Constants.AdminEmailAddress, "Business Name Here");
foreach (var a in to)
mail.To.Add(new MailAddress(a));
if (cc != null)
foreach (var a in cc)
mail.CC.Add(new MailAddress(a));
smtpClient.Send(mail); // Here I get exception.
}
}
});
}
但是在上面标明的那条线上我得到了
System.Net.Mail.SmtpException:无法连接到远程服务器连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应NNN.NNN .NNN.NNN:MMM
我知道这显然是说客户端无法连接,但这些是我用来从Microsoft Outlook发送电子邮件的完全相同的细节。
为什么我无法使用这些凭据连接到邮件服务器,我缺少什么?
我知道我可能需要联系邮件服务提供商并要求获得许可,但这是我第一次尝试这一点,并希望得到一些有关如何做的澄清。我看过提供邮件服务的mandrillapp.com,这是一个不错的选择,有人可以提供建议吗?
感谢您的时间。
注意,我已阅读
更新
根据@Dave Zych提供的非常有用的建议,我删除了SmtpException
但我现在System.Security.Authentication.AuthenticationException
说“根据验证程序,远程证书无效。”所以我在同一条船上仍然无法发送电子邮件。
答案 0 :(得分:2)
请勿指定UseDefaultCredentials
(或将其设为false
)。这导致它使用当前登录用户的凭据,而不是您在Credentials
属性中设置的凭据。
来自MSDN:
某些SMTP服务器要求在服务器代表客户端发送电子邮件之前对客户端进行身份验证。如果服务器请求此SmtpClient对象应使用当前登录用户的默认凭据进行身份验证,请将此属性设置为true。对于客户端应用程序,这是大多数情况下的期望行为。
...
如果UseDefaultCredentials属性设置为false,则在连接到服务器时,Credentials属性中设置的值将用于凭据。如果UseDefaultCredentials属性设置为false并且尚未设置Credentials属性,则会以匿名方式将邮件发送到服务器。