我使用以下代码通过 Windows 服务发送电子邮件没有问题:
public bool Send()
{
bool RetSt = false;
try
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(_from);
for (int i = 0; i < _to.Count; i++)
mail.To.Add(_to[i]);
mail.Subject = _subject;
mail.Body = _body;
for (int i = 0; i < _attachmentList.Count; i++)
mail.Attachments.Add(_attachmentList[i]);
SmtpClient smtp = new SmtpClient();
smtp.Host = _smtpHost;
smtp.Port = _smtpPort;
smtp.Credentials = new NetworkCredential(_userName, _password);
smtp.EnableSsl = true;
smtp.Send(mail);
for (int i = 0; i < _attachmentList.Count; i++)
_ms[i].Dispose();
RetSt = true;
}
catch (Exception ex)
{
Service.WriteEventLog(ex.ToString(), EventLogEntryType.Error);
}
return RetSt;
}
服务开始后约 2-3 天,由于 Gmail 的身份验证问题,服务停止发送电子邮件。这是该问题的例外:
“System.Net.Mail.SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息,请访问 System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode , String response) 在 System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, MailAddress from, Boolean allowUnicode) 在 System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection 收件人, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception) at System.Net.Mail.SmtpClient.Send(MailMessage message) at MaintenanceService.Email.Send() in c:\Users\aydogan.ersoz\Desktop\maintenanceservice\trunk\MaintenanceServiceTest\Email.cs:line 75"
当我控制 Gmail 帐户时,Gmail 会要求验证码。我正确输入了验证码,我的 Windows 服务再次开始正常工作。
我尝试了谷歌的解决方案,但没有奏效。
我应该怎么做才能禁用验证码保护,或者是否可以在不从网络输入验证码字符串的情况下以编程方式发送电子邮件?