HTML电子邮件的SMTP内容传输编码

时间:2018-06-29 08:10:19

标签: email smtp smtpclient

从SMTP服务器发送时,Content-Transfer-Encoding中的quoted-printable为何会弄乱链接?

示例:

设置mail fromrcpt to并进入data模式后,发送此邮件(已删除电子邮件):

From: Me <me@me.com>
To: You <you@you.com>
Subject: Email Test
Mime-Version: 1.0;
Content-Type: text/html; charset="UTF-8";
Content-Transfer-Encoding: quoted-printable;

<html>
<body>
<a href="https://www.google.com/">Google</a>
</body>
</html>

然后,电子邮件源就以某种方式被弄乱了,并且标签被更改为<a href=3D"ttps://www.google.com/&quot;">Google</a>(缺少h的{​​{1}})。

如果我将编码更改为https,则一切正常。

1 个答案:

答案 0 :(得分:0)

对于碰巧碰到这篇文章的任何人-这个问题很简单,但从一开始就不是一个显而易见的问题。

使用quoted-printable时,必须确保传递正确编码的数据。我不是。我正在通过普通的HTML,认为还可以。

因此,在我的示例中,<a>标签必须被编码为<a href=3D"https://www.google.com/">Google</a>,然后它才能起作用。

我正尝试使用Go来实现此功能,因此下面是一个将实现此功能的函数...

// Returns a properly quoted-printable string
func toQuotedPrintable(s *string) error {
    var b bytes.Buffer
    w := quotedprintable.NewWriter(&b)

    _, err := w.Write([]byte(*s))
    if err != nil {
        log.Println("Error while decoding to quoted-printable", err)
        return err
    }

    err = w.Close()
    if err != nil {
        log.Println("Error while decoding to quoted-printable", err)
        return err
    }

    *s = b.String()
    return nil
}