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

naf*_*fie 4 c# sendgrid

我正在使用 Azure 移动服务后端,并且可以通过 SendGrid 成功发送电子邮件。但是,每次我尝试添加附件时,都会失败。我从来没有收到过电子邮件。经过一番研究,我发现我所需要的只是一条虚拟路径。我修改了路径名,但还是不行。

我似乎无法弄清楚为什么会失败。

下面是我的代码:

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);
Run Code Online (Sandbox Code Playgroud)

naf*_*fie 5

我检查了响应的内容,并意识到失败是因为计划的发送因错误而被取消400 BAD REQUEST

经过一番研究,我在 SendGrid 网站上发现了此链接邮件错误。在附件错误部分下,他们解释说

附件内容必须采用 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);
Run Code Online (Sandbox Code Playgroud)

事实证明这毕竟不是一个重复的问题,因为我在通过 SendGrid 发送电子邮件时遇到了不同类型的问题。文件名也按原样工作。打电话给Server.MapPath我对我来说没有必要。

我能够成功接收带有附件的电子邮件。