2017-05-03 283 views
0

我正在使用Azure移動服務後端,我可以通過SendGrid成功發送電子郵件。但是,每次嘗試添加附件時,都會失敗。我從來沒有收到電子郵件。經過一番研究,我發現我所需要的只是一條虛擬路徑。我修改了路徑名稱,但它仍然不起作用。通過SendGrid發送電子郵件附件c#失敗

我似乎無法弄清楚爲什麼會失敗。

下面是我的代碼:

var client = new SendGridClient("apiKey"); 

var msg = new SendGridMessage() 
     { 
      From = new EmailAddress(sender), 
      Subject = "Adherence Report", 
      PlainTextContent = "Sample Content ", 
      HtmlContent = "<strong>Hello, Email!</strong>" 
     }; 
      msg.AddTo(new EmailAddress(receipient, null)); 
      msg.AddAttachment(@"~\sample\adherence.csv", "Testing", null, null, null); 

     var response = await client.SendEmailAsync(msg); 
+2

_「失敗」_和_「不起作用」_不會讓我們繼續前進 - 您是否收到任何異常? SendGrid管理界面中是否存在問題?你檢查過「響應」的內容嗎? –

+0

可能的重複。嘗試Server.MapPath獲取完整路徑http://stackoverflow.com/questions/37945281/sending-an-email-with-attachment-using-sendgrid –

+0

@JamesThorpe,迄今爲止沒有例外,我看到內部沒有問題SendGrid接口。我打印出了響應的主體,這就是我的「響應」:「System.Net.Http.StreamContent」,「file」:「〜\\ sample \\ adherence.txt」}}。 – naffie

回答

1

我查了響應的內容,並意識到是有人失敗,因爲定時發送正在用400 BAD REQUEST錯誤而被取消。

經過一番研究,我發現SendGrid網站上的這個鏈接mail errors。下安裝誤差的部分,它們解釋

附件含量必須base64編碼。

這就是我的依戀失敗的原因。因此,最終得到它的工作,我編輯我的代碼如下:

string sampleContent = Base64Encode("Testing"); // base64 encoded string 
var client = new SendGridClient("apiKey"); 

var msg = new SendGridMessage() 
    { 
     From = new EmailAddress(sender), 
     Subject = "Adherence Report", 
     PlainTextContent = "Sample Content ", 
     HtmlContent = "<strong>Hello, Email!</strong>" 
    }; 
     msg.AddTo(new EmailAddress(recipient, null)); 
     msg.AddAttachment("myfile.csv", sampleContent, "text/csv", "attachment", "banner"); 

    var response = await client.SendEmailAsync(msg); 

事實證明這不是一個重複的問題,畢竟,因爲我正面臨着不同種類的問題通過SendGrid發送電子郵件。文件名也按原樣工作。撥打Server.MapPath對我來說不是必要的。

我能夠成功接收附件郵件。