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 和其他服务。恕我直言,更加清洁和支持。
我不知道为什么,当我 运行 在按钮 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 和其他服务。恕我直言,更加清洁和支持。