如何使用C#通过Gmail发送电子邮件
尝试通过我的Web服务发送电子邮件时出现错误。我曾尝试启用对安全性较低的应用的访问权限,禁用两步验证并通过网络浏览器登录帐户。 SO上的解决方案都没有为我工作。我仍然得到:如何使用C#通过Gmail发送电子邮件
Error: System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.
我能做些什么来解决这个问题?
namespace EmailService
{
public class Service1 : IService1
{
public string SendEmail(string inputEmail, string subject, string body)
{
string returnString = "";
try
{
MailMessage email = new MailMessage();
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
// set up the Gmail server
smtp.EnableSsl = true;
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassword");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
// draft the email
MailAddress fromAddress = new MailAddress("[email protected]");
email.From = fromAddress;
email.To.Add(inputEmail);
email.Subject = body;
email.Body = body;
smtp.Send(email);
returnString = "Success! Please check your e-mail.";
}
catch(Exception ex)
{
returnString = "Error: " + ex.ToString();
}
return returnString;
}
}
}
只是去这里:Less secure apps,请使用您的电子邮件和使用在C#代码发送邮件密码,并选择Turn On
。
也请去这个链接,并点击继续Allow access to your Google account
也是我编辑点点:
public string sendit(string ReciverMail)
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress("[email protected]");
msg.To.Add(ReciverMail);
msg.Subject = "Hello world! " + DateTime.Now.ToString();
msg.Body = "hi to you ... :)";
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = true;
client.Host = "smtp.gmail.com";
client.Port = 587;
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential("[email protected]", "YourPassword");
client.Timeout = 20000;
try
{
client.Send(msg);
return "Mail has been successfully sent!";
}
catch (Exception ex)
{
return "Fail Has error" + ex.Message;
}
finally
{
msg.Dispose();
}
}
如果上面的代码不工作,试图改变它像以下代码:
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Port = 587;
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "YourPassword");
我已经尝试了这两种方法,但仍然无效。 – Johnny 2015-04-06 22:24:26
事实证明'smtp.UseDefaultCredentials = false;'必须放在'smtp.Credentials = new System.Net.NetworkCredential(“[email protected]”,“mypassword”)之前;''我只是交换了这些行并且一切正常精细。 – Johnny 2015-04-06 22:50:51
您的意思是将'smtp.UseDefaultCredentials = true;'改为'smtp.UseDefaultCredentials = false;'并将其放在'smtp.Credentials = new System.Net.NetworkCredential(“[email protected]”,“mypassword”) ;如果是,请告诉我编辑我的答案。 – 2015-04-07 04:28:05
看看是否有帮助:http://stackoverflow.com/questions/18503333/the-smtp-server-requires-a-secure-connection-o r-the-client-was-not-authenticated – 2015-04-06 04:03:41
你是否尝试过ping服务器,如果是,那么Eghbal Sohrabi提到的解决方案就OK – Shubhojit 2015-04-06 06:55:50
@Shubhojit ping Google服务器? – Johnny 2015-04-06 22:28:35