我创建了一种发送Email
的方法,例如:
public async Task SendEmailCC(string body, string subject, List<string> mainRecievers, List<string> receivers)
{
SmtpClient client = new SmtpClient("smtp-mail.outlook.com")
{
UseDefaultCredentials = true,
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("Test@gmail.com", "MyMailPassword")
};
MailMessage mailMessage = new MailMessage { From = new MailAddress("job@test.org") };
foreach (var reciever in mainRecievers)
{
mailMessage.To.Add(reciever);
}
foreach (var item in receivers)
{
mailMessage.CC.Add(item);
}
mailMessage.Body = body;
mailMessage.IsBodyHtml = true;
mailMessage.Subject = subject;
await client.SendMailAsync(mailMessage);
}
为了进行测试,我向自己发送了一封电子邮件,但没有收到Email
。我怎么找到我的问题?
答案 0 :(得分:0)
的确,我不喜欢回答我的问题,但我发现了。
我的邮件服务器是google,我用过OutLookSmtp
,对于我的代码的这一部分,我已经有了,并进行了更改。喜欢:
SmtpClient client = new SmtpClient("smtp-mail.outlook.com")
更改为:
SmtpClient client = new SmtpClient("smtp.gmail.com")
此后,我得到此异常:
SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:“ 5.5.1需要身份验证”,则由于以下情况,可能会发生错误。
对于此问题,我可以尝试以下方法:
情况1:密码错误时
情况2:当您尝试从某个应用登录时
情况3:当您尝试从时区/域/计算机以外的域登录时(在大多数情况下,从代码发送邮件时就是这种情况)
每个解决方案都有
第一种情况的解决方案:输入正确的密码。
情况2的解决方案1:转到followig链接https://www.google.com/settings/security/lesssecureapps上的安全设置,然后启用安全性较低的应用。这样您就可以从所有应用程序登录。
情况2的解决方案2(请参阅https://stackoverflow.com/a/9572958/52277)启用两因素身份验证(又称为两步验证),然后生成特定于应用程序的密码。使用该新生成的密码通过SMTP进行身份验证。
情况3的解决方案1(这可能会有所帮助),您需要查看活动。但是由于最新的安全标准,对该活动进行回顾将无济于事,该链接将无用。因此,请尝试以下情况。
情况3的解决方案2:如果您将代码托管在生产服务器上的某个位置并且可以访问生产服务器,则将远程桌面连接到生产服务器,然后尝试从生产服务器的浏览器登录一次。这将为您添加登录Google的特权,并且将允许您从代码登录。
但是如果您无权访问生产服务器怎么办。尝试解决方案3
情况3的解决方案3:您必须为您的Google帐户启用其他时区/ ip的登录。
要执行此操作,请点击链接https://g.co/allowaccess,然后单击继续按钮以允许访问。
就是这样。干得好。现在,您将可以从任何一台计算机,通过任何应用程序登录到您的Google帐户