Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaMailSenderImpl发送UTF-8编码的电子邮件正文?_Java_Email_Encoding_Utf 8 - Fatal编程技术网

如何使用JavaMailSenderImpl发送UTF-8编码的电子邮件正文?

如何使用JavaMailSenderImpl发送UTF-8编码的电子邮件正文?,java,email,encoding,utf-8,Java,Email,Encoding,Utf 8,我以这种方式发送电子邮件: @Test public void testEmailCharacterSet() throws MessagingException, UnsupportedEncodingException { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setDefaultEncoding("utf-8"); mailSender.setHost("*****"

我以这种方式发送电子邮件:

@Test
public void testEmailCharacterSet() throws MessagingException, UnsupportedEncodingException {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setDefaultEncoding("utf-8");
    mailSender.setHost("*****");
    mailSender.setUsername("*****");
    mailSender.setPassword("*****");

    Properties properties = new Properties();
    properties.setProperty("mail.mime.charset", "utf-8");

    mailSender.setJavaMailProperties(properties);

    MimeMessage mimeMessage = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, false, "utf-8");
    mimeMessage.setContent("Árvíztűrő tükörfúrógép 3", "text/html"); 
    helper.setFrom("noreply@foobar.com");
    helper.setTo("foobar@gmail.com");

    mailSender.send(mimeMessage);
}
正如你所看到的,我在任何地方都可以设置utf-8。我的问题是输出的原始字节仍然是拉丁文1,至少我在Wireshark中看到了这一点:

Date: Sun, 17 May 2015 18:16:21 +0200 (CEST)
From: noreply@foobar.com
To: foobar@gmail.com
Message-ID: <13648335.0.1431879381653.JavaMail.foo@foo-dell>
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=C1rv=EDzt?r? t=FCk=F6rf=FAr=F3g=E9p 3
.
因此,很明显,它只针对
JavaMailSenderImpl

如果您添加以下行:

properties.setProperty("mail.smtp.allow8bitmime", "true");
properties.setProperty("mail.smtps.allow8bitmime", "true");
对于您的代码,邮件将具有内容传输编码:标题设置为8位,邮件将可读。

这对我很有用-

mailssender.send(新的mimessagepreparator(){
public void prepare(MimeMessage MimeMessage)抛出消息异常{
mimessagehelper message=新的mimessagehelper(mimessage,true,“UTF-8”);
message.setFrom(“me@mail.com");
message.setTo(“you@mail.com");
message.setSubject(“我的主题”);
message.setText(“我的文本”,true);
message.addInline(“myLogo”,新类路径资源(“img/myLogo.gif”);
message.addAttachment(“myDocument.pdf”,新类路径资源(“doc/myDocument.pdf”);
}
});

如果在java源代码中用
\u0171
替换
呢?那么结果会是什么呢?在电线上也显示为“?”。我认为这是关于
引用的可打印的
传输编码不太可能,引用的可打印的只关心输入中的字节。该错误显然是由于
String->byte[]
转换引起的,并且在转换过程中无法识别
char
。如果您执行
mimeMessage.setContent(String.getBytes(“UTF-8”)
操作,抛出异常,关于byte[]不是有效输入。这对我有帮助,谢谢!我已经按照@andrzej skierski的建议将MimeMessageHelper设置为UTF-8
properties.setProperty("mail.smtp.allow8bitmime", "true");
properties.setProperty("mail.smtps.allow8bitmime", "true");
mailSender.send(new MimeMessagePreparator() {
   public void prepare(MimeMessage mimeMessage) throws MessagingException {
     MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
     message.setFrom("me@mail.com");
     message.setTo("you@mail.com");
     message.setSubject("my subject");
     message.setText("my text <img src='cid:myLogo'>", true);
     message.addInline("myLogo", new ClassPathResource("img/mylogo.gif"));
     message.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf"));
   }
 });