【问题标题】:How to make characters displayed correctly when sending email with chilkat?使用 chilkat 发送电子邮件时如何正确显示字符?
【发布时间】:2020-07-21 17:55:56
【问题描述】:

我使用 chilkat 9.5.0.80。

问题是电子邮件中的某些字符出现错误。例如,此è 在收件箱邮箱中显示为è。我希望它在我设置时显示 - è

这是最小的可重现代码:

email := chilkat.NewEmail()
email.SetCharset("utf-8")
email.AddTo("", toEmail)
email.SetSubject("test")
email.SetHtmlBody("è")
mailMan := chilkat.NewMailMan()
mailMan.SetSmtpHost(host)
mailMan.SetSmtpPort(25)
mailMan.SetSmtpUsername(username)
mailMan.SetSmtpPassword(password)
mailMan.SendEmail(email)

我还注意到不同 smtp 服务器 mime 中的 html 正文部分的标头看起来不同。 首先显示正确,看起来像:

--------------050209010604000502060206
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=iso-8859-1

第二个是错误的,看起来像:

--------------030709010607010008060507
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=utf-8

字符集不同..

我想如果我将 html 正文设置为 base64,它将显示正确。但是我在chilkat中没有发现这种可能性......

还尝试了有效的 html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
è
</body>
</html>

【问题讨论】:

  • 这是一个明确的XY Problem。不要问如何发送 base64 编码的电子邮件。询问如何解决您的实际问题字符损坏。使用minimal, reproducible example 的实际代码更新您的问题,并显示您收到的实际输出以及您的期望。
  • @Flimzy,几分钟就搞定了
  • 您是否尝试将字符集设置为支持您的字符的字符集,例如 UTF-8? example-code.com/golang/email_charset.asp
  • @Flimzy 是的,我尝试email.SetCharset("utf-8")
  • 没有改善?

标签: go chilkat chilkat-email


【解决方案1】:

当我问到我的问题时,我是对的,如何使用 chilkat 将 html body 设置为 base64?因为下面的代码在某些smtp服务器上可以正确显示特殊字符,但是在某些服务器上却显示错误:

email := chilkat.NewEmail()
email.SetCharset("utf-8")
email.AddTo("", toEmail)
email.SetSubject("test")
email.SetHtmlBody("è")
mailMan := chilkat.NewMailMan()
mailMan.SetSmtpHost(host)
mailMan.SetSmtpPort(25)
mailMan.SetSmtpUsername(username)
mailMan.SetSmtpPassword(password)
mailMan.SendEmail(email)

下一个解决方案允许将html body mime部分设置为base64并发送,它可以在不同的smtp服务器上正确显示:

email := chilkat.NewEmail()
part := chilkat.NewMime()
part.SetBodyFromEncoded("base64", 
base64.StdEncoding.EncodeToString([]byte(bodyContent)))
part.SetContentType("text/html")
part.SetCharset("UTF-8")
email.SetFromMimeText(*part.GetMime())

然后您可以将其他字段设置为email对象,例如主题等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2015-10-22
    • 2018-06-06
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多