2015-04-06 150 views
11

尝试通过我的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; 
     } 
    } 
} 
+0

看看是否有帮助: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

+1

你是否尝试过ping服务器,如果是,那么Eghbal Sohrabi提到的解决方案就OK – Shubhojit 2015-04-06 06:55:50

+0

@Shubhojit ping Google服务器? – Johnny 2015-04-06 22:28:35

回答

29

只是去这里: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"); 
+0

我已经尝试了这两种方法,但仍然无效。 – Johnny 2015-04-06 22:24:26

+5

事实证明'smtp.UseDefaultCredentials = false;'必须放在'smtp.Credentials = new System.Net.NetworkCredential(“[email protected]”,“mypassword”)之前;''我只是交换了这些行并且一切正常精细。 – Johnny 2015-04-06 22:50:51

+0

您的意思是将'smtp.UseDefaultCredentials = true;'改为'smtp.UseDefaultCredentials = false;'并将其放在'smtp.Credentials = new System.Net.NetworkCredential(“[email protected]”,“mypassword”) ;如果是,请告诉我编辑我的答案。 – 2015-04-07 04:28:05

相关问题