2

我使用 xSnippet 中的这个脚本通过 SSJS http://openntf.org/XSnippets.nsf/snippet.xsp?id=create-html-mails-in-ssjs-using-mime发送电子邮件 它工作得很好,但是当我有带有特殊字符的电子邮件地址,它不起作用。

有没有为“to”mimeHeader 设置字符集的解决方案?

var mimeRoot:NotesMIMEEntity = doc.createMIMEEntity("Body");
var mimeHeader:NotesMIMEHeader;

//set to
if (this._to.length>0) {
  mimeHeader = mimeRoot.createHeader("To");
  mimeHeader.setHeaderVal( this._to.join(","));
}
4

3 回答 3

3

尝试使用 addValText() 文本方法代替 setHeaderVal,该方法接受两个参数。第一个是字符串值,可以是UTF-8,第二个是字符集——即“UTF-8”。当然,您需要确保您的字符串确实是 UTF-8。(我对 SSJS 不熟悉,所以我不知道它是否在内部将您的this._to.join(",")价值表示为 UTF-8。)

有关此内容的更多信息,请参阅NotesMIMEHeader 类的文档。

于 2013-03-05T20:10:51.393 回答
1

据我所知,邮件标头必须仅包含 US-ASCII 字符(此信息可在 MIME 规范中找到)。必须对带有其他字符的标头进行编码。看起来多米诺骨牌默认情况下不对其进行编码。

您可以尝试使用 javax.mail.internet.MimeUtility.encodeText 但这可能需要将额外的 jar 放入项目(JavaMail)中。

于 2013-03-05T08:23:38.310 回答
0

由于类似的问题,我刚刚对此进行了测试,@W_K 正确的是 MIME 标头不能是 UTF-8。我最终这样做了,这适用于我以前遇到问题的情况:

确保您对稍后要添加到 TO/CC/BCC MIME 标头的电子邮件地址进行 MIME 编码。我将此添加到例如Tony McGuckin 的 emailBean的 setSendTo() 方法中:

import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;

....

public void setSendTo(final String sendTo) {
    try {
        this.sendTo.add(MimeUtility.encodeText(sendTo.replace("[", "").replace("]", ""), "utf-8", null));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

然后,我使用 setHeaderVal() 方法添加所需的 MIME 标头,但我不使用 UTF-8 编码,而是使用默认编码(其中 getSendTo() 只返回已经 MIME 编码的字符串):

emailHeader = emailRoot.createHeader("To");
emailHeader.addValText(getSendTo());
于 2014-09-07T06:11:03.760 回答