2013-03-05 46 views
2

我使用这个脚本xSnippet通过SSJS http://openntf.org/XSnippets.nsf/snippet.xsp?id=create-html-mails-in-ssjs-using-mime 它的工作马丽娟发送电子邮件,但是当我有一种特殊字符的电子邮件地址,这是行不通的。UTF-8 NotesMIMEHeader SENDTO场

是否有任何解决方案为“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(",")); 
} 

回答

3

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

有关更多信息,请参阅doc for the NotesMIMEHeader class

+0

,看起来不错。谢谢 – Pudelduscher 2013-03-08 12:53:33

1

据我知道邮件标题只能包含US-ASCII字符(这个信息可以在MIME规范中找到)。其他字符的标题必须进行编码。它看起来像多米诺骨牌不默认编码。

您可以尝试使用javax.mail.internet.MimeUtility.encodeText,但这可能需要将其他jar添加到项目(JavaMail)中。

+0

问题是,您可以在notes-client中为邮件地址使用UTF-8字符。我会尝试MimeUtility。谢谢 – Pudelduscher 2013-03-05 09:05:47

0

我刚刚测试过,由于类似的问题和@W_K是正确的,MIME标头不能是UTF-8。我结束了这样做,这适用于我以前遇到问题的情况:

确保您的MIME编码电子邮件地址,您稍后要添加到TO/CC/BCC MIME标头。我将此添加到例如的the emailBean by Tony McGuckin的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 I只是使用默认的编码(其中getSendTo()刚刚返回已经是MIME编码的字符串):

emailHeader = emailRoot.createHeader("To"); 
emailHeader.addValText(getSendTo());