2014-06-08 54 views
2

我按照SendGrid's site的示例進行操作,並將其作爲憑據粘貼到Azure門戶中。不過,我收到了這個錯誤信息。無法通過SendGrid發送電子郵件

消息= { 「發送郵件失敗。」}
的InnerException = { 「無法連接到遠程服務器」}

我不是在這裏做什麼明確的,甚至沒有如何調試它。我在桌面上運行代碼(在我將它放到網站上之前),這樣我就可以通過它來突破自己。然而,沒有快樂......

對此有何建議?

下面的完整代碼。

MailMessage mailMsg = new MailMessage(); 
mailMsg.To.Add(new MailAddress("[email protected]", "To Name")); 
mailMsg.From = new MailAddress("[email protected]", "From Name"); 
mailMsg.Subject = "subject"; 
string text = "text body"; 
string html = @"<p>html body</p>"; 
mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(
    text, null, MediaTypeNames.Text.Plain)); 
mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(
    html, null, MediaTypeNames.Text.Html)); 
SmtpClient client = new SmtpClient("smtp.sendgrid.net", Convert.ToInt32(587)); 
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(
    "[email protected]", 
    "LubX........pQc"); 
client.Credentials = credentials; 
client.Send(mailMsg); 
+1

您是否嘗試發送到有效的電子郵件地址?也許郵件服務試圖連接到「example.com」 - 顯然沒有這樣的地址。 –

+1

是的,看看你是否有任何日誌條目在https://sendgrid.com/logs/index – bwest

+0

@chuex我有一個有效的地址,是的。 –

回答

3

這是碰巧是一個控制檯應用程序嗎?我一直在測試SendGrid,並發現當我嘗試從控制檯應用程序發送電子郵件時,電子郵件從不發送。但是,當我從一個Web應用程序(使用相同的確切發送代碼)嘗試它時,會發送電子郵件。我沒有解釋爲什麼控制檯應用程序不起作用。

+1

嗯,我想,我想。當應用程序從控制檯運行時,它不會被視爲雲驅動,因此不包含在安全性模式中。有一些防火牆或類似的東西只是阻止它。需要從雲端執行或支付更高金額以從控制檯傳送郵件。我猜這是某種欺詐保護。 +1爲檢查舊問題而努力。 –

+1

它在控制檯應用程序中工作,但出於某種原因,您需要像這樣調用它:transportWeb.DeliverAsync(msg).Wait()。更多在這裏:https://github.com/sendgrid/sendgrid-csharp/issues/154 – user1843640

+0

如果像我一樣,現在想知道世界上的「transportWeb」是什麼,它似乎引用了這個例子:https://sendgrid。com/docs/Integrate/Code_Examples/v2_Mail/csharp.html#但是,我無法讓這個例子工作;在安裝SendGrid C#NuGet包(「Install-Package SendGrid」)後,它似乎沒有包含對象示例中使用的對象SendGrid.SendGridMessage的定義。 –

2

我能夠使用SendGrid v3 C# API從控制檯應用程序中成功發送SendGrid電子郵件。

我首先需要使用Visual Studio中的包管理器控制檯通過的NuGet導入SendGrid C#庫:

PM> Install-Package SendGrid 

然後,我的代碼:

using SendGrid; 
using SendGrid.Helpers.Mail; 
using System.Threading.Tasks; 

// ... 

public static async Task SendEmailViaSendGrid(string to, string from, string subject, string body) 
{ 
    // Generated from https://app.sendgrid.com/settings/api_keys 
    // TODO: Store this somewhere secure -- not in version control. 
    string apiKey = "YOUR_PRIVATE_SENDGRID_API_KEY_GOES_HERE"; 

    dynamic sendGridClient = new SendGridAPIClient(apiKey); 

    Email fromEmail = new Email(from); 
    Email toEmail = new Email(to); 
    Content content = new Content("text/plain", body); 
    Mail mail = new Mail(fromEmail, subject, toEmail, content); 

    dynamic response = await sendGridClient.client.mail.send.post(requestBody: mail.Get()); 
} 
2
public static bool SendMailBySendGrid(string offMail, string mailFormatDetails,string subject,string ccMail=null,string bccMail=null) 
{ 
    string mailFromId = System.Configuration.ConfigurationManager.AppSettings["Sender"]; 
    SendGridMessage sndmsg = new SendGridMessage(); 
    sndmsg.From = new MailAddress(mailFromId); 
    sndmsg.To = new MailAddress[] { new MailAddress(offMail) }; 
    if (!string.IsNullOrEmpty(ccMail)) 
    sndmsg.Cc = new MailAddress[] { new MailAddress(ccMail) }; 
    if(!string.IsNullOrEmpty(bccMail)) 
    sndmsg.Bcc = new MailAddress[] { new MailAddress(bccMail) }; 
    sndmsg.Subject = subject;   
    sndmsg.Html = "<div>" + mailFormatDetails + "</div>"; 
    bool result= SendEmail(sndmsg); 
    return result; 
} 

使用SendGrid包括;在您的項目中。

+0

您可以確認您是否從控制檯應用程序或網站執行上述代碼(如果後者能請您指定它的託管方式)?我問的原因是,我從Azure網站執行時立即開始工作,但不是其他方式。但是,事情可能會隨着時間而改變。 –

1

我知道這是一箇舊帖子,但我發現爲什麼電子郵件不是從控制檯應用程序發送的。當我添加Console.Read();在program.cs類的最後,它發送電子郵件,但是如果我刪除了Console.Read();從代碼中,電子郵件不會發送。所以我的假設是,如果我讓程序在關閉之前稍等一會,就會發送電子郵件。

+0

如果** this **是這種情況,我會判斷它是錯誤的......所以錯了......我的程序執行,建立了與雲API的連接,推出了一些郵件,然後可能死亡。讓雲中的軟件爲了上帝的緣故做好自己的工作!爲什麼它需要保持與我的控制檯程序的連接?無論如何,+1一個有趣的建議。我會試一試。 –

+0

它爲我工作,如果它有幫助,你可以嘗試在你的代碼的末尾使用Thread.Sleep(60000),這是我使用和它的工作。沒有這些,我的電子郵件根本不會發送。 –

相關問題