通过SendGrid发送电子邮件附件c#失败

问题描述:

我正在使用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

我查了响应的内容,并意识到是有人失败,因为定时发送正在用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对我来说不是必要的。

我能够成功接收附件邮件。