MONO / .NET 4 - ASP.NET 使用 Google SMTP 从页面发送电子邮件

MONO / .NET 4 - ASP.NET sending email from page using Google SMTP

我不知道为什么,当我 运行 在按钮 onlick 事件处理程序中调用这段代码时,页面冻结并且再也无法交互。

当然我没有收到电子邮件。

public virtual void button1Clicked (object sender, EventArgs args)
    {

        SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 465);

        smtpClient.Credentials = new System.Net.NetworkCredential("my correct gmail adress", "my correct gmail account password");

        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtpClient.EnableSsl = true;
        smtpClient.Timeout = 5;
        MailMessage mail = new MailMessage();           

        mail.From = new MailAddress("my correct gmail adress", "My Site");
        mail.To.Add(new MailAddress("other correct email adress"));

        mail.Body = "Hello";

        smtpClient.Send(mail);
    }

我找不到答案 - 所以我开始了这个问题。

可能我说得不够具体,也可能有人遇到过这样的问题并解决了。

谢谢 JS

如果您使用的是 System.Net.Mail.SmtpClient:

1) 您正在使用 "smtp.gmail.com",端口应该是 587,而不是 465

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587);

2) 如果没有导入根证书和 gmail ssl 证书:

sudo mozroots --import --ask-remove
sudo certmgr -ssl smtps://smtp.gmail.com:465

3) 放弃一些安全措施 window 以允许旧的 TLS 连接

    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587 );
    smtpClient.UseDefaultCredentials = false;

3) 运行 程序再次运行,它可能会失败,除非 Google/Gmail 被设置为接受 'less secure apps'

Unhandled Exception:
System.Net.Mail.SmtpException: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvKF
534-5.7.14 m8ujrQCJbYSBmupvILyro-ffZjZHJHDm8Jy6SXO3OJpnw5Nx4lZlLG5aKPC9N8SvdFuOeZ
534-5.7.14 A4u5qmZkkLiWbTNjE99QrFM5WEz7yK8rcATt2eg35G77W7Z8lVvlwqbRBzVMftUl_Iq9tP
534-5.7.14 vwAs_TsNaViXxiSiPFf36j5SiyaN_ZigDciAgv9VWcASrr1BAJ0qRXtEI9blHl5iFuAwjz
534-5.7.14 mI9FPcb9kCjIuX1wxsZcDYGr2i7I> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14  Learn more at
534 5.7.14  https://support.google.com/mail/answer/78754 w9sm5345037pbs.82 - gsmtp
  at System.Net.Mail.SmtpClient.CheckStatus (SmtpResponse status, Int32 i) [0x00000] in <filename unknown>:0 
  at System.Net.Mail.SmtpClient.Authenticate (System.String user, System.String password) [0x00000] in <filename unknown>:0 
  at System.Net.Mail.SmtpClient.Authenticate () [0x00000] in <filename unknown>:0 
  at System.Net.Mail.SmtpClient.SendCore (System.Net.Mail.MailMessage message) [0x00000] in <filename unknown>:0 
  at System.Net.Mail.SmtpClient.SendInternal (System.Net.Mail.MailMessage message) [0x00000] in <filename unknown>:0 
  at System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMessage message) [0x00000] in <filename unknown>:0 

4) 登录 Gmail,查找他们发送给您的有关外部帐户访问的电子邮件。按照 link 启用安全性较低的应用程序。

5) 再次尝试您的应用。

注意:我通过 source 使用 MailKit 或 Nuget 用于 gmail 和其他服务。恕我直言,更加清洁和支持。