2016-03-29 70 views
2

我有一個控制檯應用程序,我試圖從它發送郵件。如何從Smtp客戶端發送郵件?

我的代碼。

MailMessage message = new MailMessage(MailSender, "[email protected]"); 

    message.Subject = "Using the new SMTP client."; 
    message.Body = @"Using this new feature, you can send an e-mail message from an application very easily."; 
    SmtpClient client = new SmtpClient(); 
    client.Port = 25; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network; 
    client.UseDefaultCredentials = false; 
    client.Host = "smtp.google.com"; 

    try 
    { 
     client.Send(message); 
    } 
    catch (Exception ex) 
    { 
     string t = ex.Message; 
    } 

here

得到這個我必須失去了一些東西,因爲我得到:

發送郵件失敗。

我在這做錯了什麼?編輯: 內部執行。

的InnerException = { 「遠程名稱無法解析: 'smtp.google.com'」}

+0

的異常包含不僅僅是'.Message'屬性的更多信息。檢查該信息以瞭解其失敗原因的詳細信息。 – David

+0

你會得到什麼樣的實際錯誤? – BugFinder

+0

檢查編輯plz – ThunD3eR

回答

2

你可以嘗試使用

smtp.gmail.com 

,而不是

smtp.google.com 

還嘗試確保您提供正確的憑據以及正確的端口。一個服務器參數信息:

enter image description here

Source

所以,你可以嘗試這樣的事情

MailMessage message = new System.Net.Mail.MailMessage(); 
string fromEmail = "[email protected]"; 
string password = "yourPassword"; 
string toEmail = "[email protected]"; 
message.From = new MailAddress(fromEmail); 
message.To.Add(toEmail); 
message.Subject = "Using the new SMTP client."; 
message.Body = "Using this new feature, you can send an e-mail message from an application very easily."; 
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 

using(SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587)) 
{ 
    smtpClient.EnableSsl = true; 
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
    smtpClient.UseDefaultCredentials = false; 
    smtpClient.Credentials = new NetworkCredential(fromEmail, password); 

    smtpClient.Send(message.From.ToString(), message.To.ToString(), message.Subject, message.Body); 
} 
+0

也我很確定它需要用戶名認證,所以需要在另一個端口..並提供憑據。 – BugFinder

+0

好吧,這似乎是我想要去的方式。不過,我正在通過本地應用程序進行此操作,而我正在坐在安全公司的互聯網連接上。 我假設有這種情況下需要其他憑據,因爲我得到這個:「ex = {」SMTP服務器需要一個安全的連接或客戶端未驗證。「}」 – ThunD3eR

+0

@ Ra3IDeN: - 的確,你需要證書! :) –

1

@ Ra3IDeN ......哎哥試試這個...

SmtpClient smtpClient = new SmtpClient("mail.yourwebsitename.com", 25); 

smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "yourIdPassword"); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 
MailMessage mail = new MailMessage(); 

//code for: From ,CC & To 
mail.From = new MailAddress("[email protected]", "yourwebsite"); 
mail.To.Add(new MailAddress("[email protected]bsitename.com")); 
mail.CC.Add(new MailAddress("[email protected]")); 

smtpClient.Send(mail); 
+0

沒有與這個一起去,但感謝你啓發我關於cc財產 – ThunD3eR

0
MailMessage msg = new MailMessage("[email protected]", "[email protected]"); 


     msg.Subject = message.Subject; 

     msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("Message Content here as HTML", null, MediaTypeNames.Text.Html)); 

     SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", Convert.ToInt32(587)); 
     System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("[email protected]", "YourPassword"); 
     smtpClient.EnableSsl = true; 
     System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object s, 
        System.Security.Cryptography.X509Certificates.X509Certificate certificate, 
        System.Security.Cryptography.X509Certificates.X509Chain chain, 
        System.Net.Security.SslPolicyErrors sslPolicyErrors) 
     { 
      return true; 
     }; 


     smtpClient.Credentials = credentials; 
smtpClient.Send(msg); 
1

如果您嘗試從控制檯應用程序發送電子郵件(您的高級問題),我建議使用PostMark。爲什麼:

  • 的NuGet - 你可以得到郵戳NuGet包和一個漂亮的API發送電子郵件。方便簡單。
  • 未標記爲垃圾郵件 - 您可以使用驗證(包括spf和簽名)配置您的「服務器」。因此,您的電子郵件將更有可能到達收件箱中的目的地,而不是其垃圾郵件框。
  • 免費 - 一個點。我認爲這是免費的1000封電子郵件,然後每1000美元1美元。所以這非常好。將它與任何其他香草SMTP服務器進行比較。 PostMark便宜
  • 一致 - 從工作站DEV到服務器LIVE,PostMark API始終可訪問。我不能說這有多好。通常,服務器主機將提供SMTP服務器端點,但它只能在其網絡內部工作,這意味着當您在工作站上進行DEV工作時(或者它無法工作),您必須配置另一個SMTP服務器。
  • 異步接口 - 我不知道,如果自帶的SMTP客戶端.NET是異步...
  • 跟蹤 - 嘿,看看那個,他們有一個跟蹤功能內置。這很時髦。用於發送

實施例的代碼(source):

var message = new PostmarkMessage() 
{ 
    To = "[email protected]", 
    From = "[email protected]", 
    TrackOpens = true, 
    Subject = "A complex email", 
    TextBody = "Plain Text Body", 
    HtmlBody = "<html><body><img src=\"cid:embed_name.jpg\"/></body></html>", 
    Tag = "business-message", 
    Headers = new HeaderCollection{ 
     {"X-CUSTOM-HEADER", "Header content"} 
    } 
}; 

var imageContent = File.ReadAllBytes("test.jpg"); 
message.AddAttachment(imageContent, "test.jpg", "image/jpg", "cid:embed_name.jpg"); 

var client = new PostmarkClient("server token"); 
var sendResult = await client.SendMessageAsync(message); 
+0

這可能是值得considiration。現在將使用上面的soloution,但這是我將在未來定義的嘗試。 +1 – ThunD3eR

+0

@ Ra3IDeN我怎麼樣包括示例代碼來慶祝:) – Todd

+0

如果我可以投票更高,我會,謝謝你:)慶祝活動! – ThunD3eR

相關問題