2013-05-30 130 views
1

我是Asp.net的新手,我需要使用我的Outlook發送來自Asp.net的電子郵件。 我有一個按鈕在asp中,當我點擊按鈕(發送)我想發送電子郵件。 我試圖使用Hotmail和Gmail但遠程服務器處於阻塞狀態。 如果你不明白我的問題,請告訴我。 我嘗試這樣做:如何發送電子郵件

  var smtpClient = new SmtpClient 
     { 
      Host = "outlook.mycompany.local", 
      UseDefaultCredentials = false, 
      Credentials = new NetworkCredential("[email protected]", "myPassword") 
     }; 

     var message = new System.Net.Mail.MailMessage 
     { 
      Subject = "Test Subject", 
      Body = "FOLLOW THE WHITE RABBIT", 
      IsBodyHtml = true, 
      From = new MailAddress("[email protected]") 
     }; 
     // you can add multiple email addresses here 
     message.To.Add(new MailAddress("[email protected]")); 

     // and here you're actually sending the message 
     smtpClient.Send(message); 
} 

Exeption顯示:The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated 請我該怎麼辦呢?

+3

世界觀,你實際上意味着交易?如果Outlook沒有連接到電子郵件服務器,它就不能發送電子郵件,它只是一個客戶端。 –

+0

你必須使用EmailFrom,EmailTo等的實際值。同時確保EmailFrom是SMTP服務器識別和允許的地址,否則它將被阻止爲垃圾郵件嘗試 –

+0

@DimitarDimitrov是它連接到電子郵件服務器。我們是公司,我們使用outlook來溝通。我需要從asp發送電子郵件給所有人。這是我的任務:S –

回答

0

您可以使用此功能。你有一兩件事來存儲電子郵件的SMTP用戶名和密碼在網絡配置文件

/// <summary> 
/// Send Email 
/// </summary> 
/// <param name="strFrom"></param> 
/// <param name="strTo"></param> 
/// <param name="strSubject"></param> 
/// <param name="strBody"></param> 
/// <param name="strAttachmentPath"></param> 
/// <param name="IsBodyHTML"></param> 
/// <returns></returns> 
public Boolean sendemail(String strFrom, string strTo, string strSubject, string strBody, string strAttachmentPath, bool IsBodyHTML) 
{ 
    Array arrToArray; 
    char[] splitter = { ';' }; 
    arrToArray = strTo.Split(splitter); 
    MailMessage mm = new MailMessage(); 
    mm.From = new MailAddress(strFrom); 
    mm.Subject = strSubject; 
    mm.Body = strBody; 
    mm.IsBodyHtml = IsBodyHTML; 
    //mm.ReplyTo = new MailAddress("[email protected]"); 
    foreach (string s in arrToArray) 
    { 
     mm.To.Add(new MailAddress(s)); 
    } 
    if (strAttachmentPath != "") 
    { 
     try 
     { 
      //Add Attachment 
      Attachment attachFile = new Attachment(strAttachmentPath); 
      mm.Attachments.Add(attachFile); 
     } 
     catch { } 
    } 
    SmtpClient smtp = new SmtpClient(); 
    try 
    { 
     smtp.Host = ConfigurationManager.AppSettings["MailServer"].ToString(); 
     smtp.EnableSsl = true; //Depending on server SSL Settings true/false 
     System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(); 
     NetworkCred.UserName = ConfigurationManager.AppSettings["MailUserName"].ToString(); 
     NetworkCred.Password = ConfigurationManager.AppSettings["MailPassword"].ToString(); 
     smtp.UseDefaultCredentials = true; 
     smtp.Credentials = NetworkCred; 
     smtp.Port = 587;//Specify your port No; 
     smtp.Send(mm); 
     return true; 
    } 
    catch 
    { 
     mm.Dispose(); 
     smtp = null; 
     return false; 
    } 

} 
+0

我需要使用WEB.Mail或NET.Mail? –

+0

他們是一樣的。您可以在您的asp.net應用程序中使用它 – 2013-05-30 13:35:17

1

從ASP.net網站發送出站電子郵件可能會出現問題。即使你的SMTP信息的權利,你仍然必須處理:

  • 發件人策略框架(SPF)
  • 白名單/黑名單
  • 驗證
  • 郵件退回

這是非常你自己很難做到這一點,這就是爲什麼你可能想考慮使用服務提供者。你只需使用他們的API(通常是REST調用),然後他們完成剩下的工作。這裏有三個這樣的供應商:

山魈有低端的免費計劃,如果你正在使用Windows Azure使用它也是如此SendGrid。即使對於更大的計劃,它們都是合理可承受的。

我強烈建議您自己使用這些API中的一個,而不是自己使用System.Net.Mail。但是,如果你願意,他們也可以充當你的SMTP中繼,這樣你就可以使用他們的SMTP服務器並保持你的代碼不變。

+0

Okej Matt謝謝您答覆 –

2

首先獲得該公司SMTP服務器設置(從你的系統管理者我猜的),那麼你可以做這樣的事情:

// setting up the server 
var smtpClient = new SmtpClient 
{ 
    Host = "your.company.smtp.server", 
    UseDefaultCredentials = false, 
    EnableSsl = true, // <-- see if you need this 
    Credentials = new NetworkCredential("account_to_use", "password") 
}; 

var message = new MailMessage 
{ 
    Subject = "Test Subject", 
    Body = "FOLLOW THE WHITE RABBIT", 
    IsBodyHtml = true, 
    From = new MailAddress("[email protected]") 
}; 
// you can add multiple email addresses here 
message.To.Add(new MailAddress("[email protected]")); 

// and here you're actually sending the message 
smtpClient.Send(message); 
+0

SMTP服務器需要安全連接或客戶端未通過身份驗證。服務器響應是:5.7.1客戶端未通過驗證。 @Dimitar –

+0

檢查用戶名和密碼。並確保你可以到達服務器。我無法從我的工作網絡中找到我的SMTP服務器。 – jackncoke

+0

我編輯我的問題請參閱 –

0

嘗試亞馬遜簡單電子郵件服務(http://aws.amazon.com/ses/)。如果您是亞馬遜網絡服務(AWS)的新手,可能會有一條學習曲線。然而,一旦你熟悉可以在Nuget(AWSSDK)上找到的SDK,這個過程非常直接(亞馬遜確實有很多小的包裝類,它們可能很古怪)。

因此,要回答這個問題:「如何發送電子郵件?」,它看起來是這樣的:

 var fromAddress = "[email protected]"; 

     var toAddresses = new Amazon.SimpleEmail.Model.Destination("[email protected]"); 

     var subject = new Amazon.SimpleEmail.Model.Content("Message"); 

     var body= new Body(new Amazon.SimpleEmail.Model.Content("Body")); 

     var message = new Message(subject , body); 

     var client = ConfigUtility.AmazonSimpleEmailServiceClient; 

     var request= new Amazon.SimpleEmail.Model.SendEmailRequest(); 

     request.WithSource(fromAddress) 
          .WithDestination(toAddresses) 
          .WithMessage(message); 
     try 
     { 
      client.SendEmail(request); 
     } 
     catch (Amazon.SimpleEmail.AmazonSimpleEmailServiceException sesError) 
     { 
      throw new SupplyitException("There was a problem sending your email", sesError); 
     }