2011-07-19 217 views
1

看來很多解決方案涉及使用服務器:smtp.gmail.com和System.Net.Mail.SmtpClient發送電子郵件沒有gmail

其他的建議使用System.Web.Mail(其中許多說已棄用): here for example.

在任何情況下,我試了一下,我是不是能夠得到上述任何一個例子的工作。我不認爲這是一個防火牆問題。我可以使用outlook express通過Gmail發送電子郵件。我給出的C#中的錯誤是目標機器正在主動拒絕連接。

我應該嘗試從代碼中使用Outlook嗎?最好的辦法是通過AutoIt或通過一些DLL/COM?爲什麼我首先需要一臺服務器?在C#中,我可以從網上下載東西,爲什麼我不能直接從C#發送特定格式的網絡包(電子郵件),而無需使用某種服務器?

+1

實際上u需要託管'SMTP'服務器或已經建立 – Sudantha

+0

服務能解釋一下你的意思那呢?爲什麼這是必要的? – user420667

+1

是否嚴格需要因語言/庫而異,但源自任何地方的電子郵件通常都會被某些過濾器和大型電子郵件主機阻止。 – ssube

回答

0

你需要smtp中繼或網關。我使用http://sendgrid.com/從雲端發送電子郵件,他們有一個免費的選項。

還有如何發送電子郵件的示例代碼,我重新考慮了他們的代碼,所以我可以從其他地方調用它。

public partial class Email 
{ 
/// <summary> 
/// Generic Email method used to send email through SendGrid 
/// </summary> 
/// <param name="ToAddressName">ToAddress, DisplayName</param> 
/// <param name="FromAddress">Email address of sender</param> 
/// <param name="FromName">Display Name of sender</param> 
/// <param name="SendCopy">Send BCC to FromAddress</param> 
public void SendEmail(Dictionary<string, string> toAddressName, 
         String fromAddress, String fromName, 
         String subject, String message, 
         bool sendCopy) 
{ 
    try 
    { 
    MailMessage mailMsg = new MailMessage(); 

    // To 
    foreach (KeyValuePair<string, string> kvp in toAddressName) 
    { 
     string toAddress = kvp.Key; 
     string displayName = kvp.Value; 
     mailMsg.To.Add(new MailAddress(toAddress, displayName)); 
    } 

    // From 
    mailMsg.From = new MailAddress(fromAddress, fromName); 

    if (sendCopy) 
    { 
     mailMsg.Bcc.Add(new MailAddress(fromAddress, fromName)); 
    } 

    // Subject and multipart/alternative Body 
    mailMsg.Subject = subject; 

    string html = message; 
    mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html)); 

    // Init SmtpClient and send 
    SmtpClient smtpClient = new SmtpClient("smtp.sendgrid.net", Convert.ToInt32(587)); 

    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("sendgridusername", "sendgridpassword"); 
    smtpClient.Credentials = credentials; 

    smtpClient.Send(mailMsg); 
    } 
    catch (Exception ex) 
    { 
    Error error = new Error(); 
    error.ReportError(ex); 
    } 
} 

(PS,如果你對我的代碼,我很想聽到它的任何評論,謝謝)

+0

如果你想對你的代碼發表評論,我會推薦在stackexchange上使用codereview。你的代碼看起來好像會起作用。對不起,但這會導致基本上和我以前一樣的問題。我認爲這是一個計算機問題,而不是代碼問題,儘管我並不完全知道爲什麼。所以我最終可能會嘗試wireshark或者甚至是全新安裝的操作系統。 – user420667