1

在 Web 应用程序中,我们将电子邮件存储在数据库表中。我们从数据库中提取这些,替换占位符并发送电子邮件。

我正在尝试使用 Sendgrid 的 web api /v3,但遇到了问题。

这是我准备发送电子邮件的示例:

var sent = false;
try
{
    var apiAddress = "https://api.sendgrid.com/v3/mail/send";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiAddress);
    request.Headers.Add("Authorization", "Bearer SG.snip");
    request.ContentType = "application/json";
    request.Proxy = null;
    request.Method = "POST";
    request.ProtocolVersion = HttpVersion.Version11;
    var content = "<p>simple html comment with nothing complex</p>";
    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    {
        string json = "{ \"categories\" :[\"cat1\"],\"personalizations\": [{\"to\": [{\"email\":\"me@domain.com\"}],\"subject\": \"test email\"}],\"from\": {\"email\": \"email@domain.com\"},\"content\": [{\"type\": \"text/html\",\"value\": \"<html>" + content + "</html>\"}]}";
        streamWriter.Write(json);
    }

    WebResponse response = request.GetResponse();
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);

    string responseFromServer = reader.ReadToEnd();
    sent = true;
}
catch (Exception ex)
{
    sent = false;
}

这个发送很好,但是当我的内容很复杂时,API 返回 400 BAD REQUEST 并且电子邮件没有发送。

我遇到问题的电子邮件里面有引号,例如这里是电子邮件的精简版本:

<!DOCTYPE html><html lang="en"><body>hi</body></html>

如果我用反斜杠转义引号,它可以正常工作。我是否必须通过整个 HTML 来转义每个引用?

4

0 回答 0