使用SendGrid发送纯文本电子邮件

7
我将尝试从C#函数发送纯文本电子邮件;但是,结果的邮件带有HTML标记。我已将其简化为以下控制台应用程序:
static async Task Main(string[] args)
{
    SendGridMessage msg = new SendGridMessage()
    {
        From = new SendGrid.Helpers.Mail.EmailAddress("noreply@test.com"),
        Subject = "test",
        PlainTextContent = "Hello"
    };
    msg.AddTo(new SendGrid.Helpers.Mail.EmailAddress("my@address.com", "test recipient"));            

    SendGridClient client = new SendGridClient("mykey");
    Response response = await client.SendEmailAsync(msg);

    Console.WriteLine(response.StatusCode);
    Console.ReadLine();

}

它可以成功发送电子邮件,但在查看电子邮件的源代码时,发现它是HTML格式的:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<p>Hello</p>

<img src="https:// ... />
</body></html>

我尝试了各种组合,包括将HtmlContent设置为纯文本(这会导致非常不同的电子邮件,但仍不是纯文本),以及以下语法:

var emailContent = new Content
{
    Type = "text/plain",
    Value = emailMessage
};
message.Content.Add(emailContent);

我知道没有中介重新格式化消息,因为我可以从Outlook向自己发送纯文本电子邮件。
我正在使用SendGrid 9.9.0,但我已经尝试了9.8.0,以防最近发生了什么变化。
我是否漏掉了什么,或者我期望SendGrid能够做一些它无法做到的事情?

在发送之前,SendGridMessageContents属性的值是什么?我的猜测是它包含HTML,你只需要从列表中删除该条目。这只是一个猜测,基于源代码。我自己没有使用过SendGrid。 - mason
如何执行“查看源代码”操作是非常重要的问题。 - astaykov
内容为空。就像我之前说的,如果我手动填充内容,那么它可以是任何我设置的值(例如"text/plain","msg"),但对最终的电子邮件没有影响。 - Paul Michaels
@astaykov 在 Outlook 中右键单击消息,然后选择查看源代码。 - Paul Michaels
你尝试设置MIME类型了吗?例如:msg.AddContent(MimeType.Text, "hello") (在构造对象时显然不需要设置PlainTextContent)。 - Lennart Stoop
那不起作用。我之前尝试过设置“text/plain”,但是设置MimeType.Text只会导致完全相同的内容。 - Paul Michaels
1个回答

9
SendGrid在线文档中获取:
首先,登录您的SendGrid帐户,单击“设置”,然后点击“邮件设置”,展开“纯文本内容”设置,然后在“不要将纯文本转换为HTML”选项中打勾。一定要保存此设置。
标准似乎是电子邮件同时发送HTML和纯文本版本,因此纯文本版本会自动转换为HTML版本。

谢谢 - 我看到了,但我把它当作全局覆盖(当然,当你看到它的措辞方式时,它有点讲得通)。 - Paul Michaels
7
看起来Sendgrid在1月份取消了这个设置。不确定替代方案是什么:https://sendgrid.com/docs/ui/account-and-settings/retired-mail-settings/ - Lennart Stoop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接