使用Spring的javamail注意的中文有关问题

使用Spring的javamail注意的中文问题
使用Spring 的封装的MailSender,确实省事多了!
但在使用中,还是得注意些问题

1.增加验证,否则会报:553 authentication is required 的错误信息
Properties prop = new Properties();
prop.setProperty("mail.smtp.auth", "true");
JavaMailSenderImpl.setJavaMailProperties(prop);

2.当邮件内容是HTML语言时的中文问题:
初始化MimeMessageHelper辅助类时,设置"GBK" encoding!
如:
MimeMessageHelper messageHelp = new MimeMessageHelper(message,true,"GBK");
同时在设置:<META http-equiv=Content-Type content='text/html; charset=GBK'>
如果都设置为"UTF-8",在某些邮件客户端标题是冷僻字时,不能正常显示!

3.邮件附件的中文问题!
spring的文档里面说MimeMessageHelper设置了encoding,同时对title,text,attach产生作用,但还是会出问题:
解决方法:MimeUtility.encodeWord(file.getName());就OK了!

以下是可以运行的代码
SendMailDemo.java

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

public class SendMailDemo {
	public  void send163ByMutil() throws MessagingException {
		JavaMailSenderImpl javaMail = new JavaMailSenderImpl();
		javaMail.setHost("smtp.163.com");
		javaMail.setPassword("passowrd");
		javaMail.setUsername("username");
		Properties prop = new Properties();
		prop.setProperty("mail.smtp.auth", "true");		
		javaMail.setJavaMailProperties(prop);
		MimeMessage message = javaMail.createMimeMessage();
		MimeMessageHelper messageHelp = new MimeMessageHelper(message,true,"GBK");
		messageHelp.setFrom("likun35@163.com");
		messageHelp.setTo("likun35@163.com");
		messageHelp.setSubject("邮件测试");
		// messageHelp
		String body = "<html><head><META http-equiv=Content-Type content='text/html; charset=GBK'></HEAD><title>test</title></head><body>dear 小燕子 \n ";
		body+="<red>This is Text!</red> pic <img src='cid:a'></img><br>hello<img src='cid:b'></img></body></html>";
		messageHelp.setText(body, true);
		messageHelp.addInline("a", new File("E:/xiezi.jpg"));
		messageHelp.addInline("b", new File("E:/logo.png"));		
		File file=new File("E:/Favorites中文文件.rar");		
		try {
			messageHelp.addAttachment(MimeUtility.encodeWord(file.getName()), file);
		} catch (UnsupportedEncodingException e) {			
			e.printStackTrace();
		}
		javaMail.send(message);
	}
	public static void main(String[] args) throws MessagingException {		
		SendMail send=new SendMail();
		send.send163ByMutil();

	}
}
1 楼 tikii 2006-12-26  
呵呵,帮了我的忙哦.谢谢啊,缘分哦.使用Spring的javamail注意的中文有关问题
2 楼 cavenaghi 2007-03-13  
不知道楼主有没有这样用过:为了让邮件的接受者,可以在邮件的客户端,或者直接登陆网上邮局时,可以看到你邮件发送者的姓名,需要进行下面的调用:
messageHelp.setFrom("李昆 <likun35@163.com>");

可这样,发到用户那里的话就会有乱码,我想了半天也想不到怎么解决,大家一起探讨一下吧
3 楼 cavenaghi 2007-03-13  
不知道楼主有没有这样用过:为了让邮件的接受者,可以在邮件的客户端,或者直接登陆网上邮局时,可以看到你邮件发送者的姓名,需要进行下面的调用:
messageHelp.setFrom("李昆 <likun35@163.com>");

可这样,发到用户那里的话就会有乱码,我想了半天也想不到怎么解决,大家一起探讨一下吧
4 楼 wcjmaomao 2007-03-16  
对好象是设置编码为gbk的,我用spring发邮件的时候那个乱码问题害了我两天,后面把编码改为gbk就行拉,真的是郁闷的问题!
5 楼 scut_xiaqi 2007-04-24  
谢谢楼主,这个问题困扰了我好久,现在终于解决了
6 楼 cskysnew 2007-04-24  
谢谢lz的文章,又可以少走弯路了。
7 楼 sskhnje 2007-06-22  
你的这个代码还是有点问题
我完全复制下来, 然后发送.
只有126的邮箱能正常显示, 其他如hotmail, qq邮箱等都显示如下.

急切盼望能得到您的指导, 谢谢!

Y@microsof-059302>
Date: Fri, 22 Jun 2007 20:48:59 +0800 (CST)
From: sskhnje@163.com
To: sskhnje@mail.ynu.edu.cn
Subject: =?GBK?B?08q8/rLiytQ=?=
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_16259139.1182516532869"
X-Coremail-Antispam: 1U3Yxn0WfASr-VFAUDIcSsGvfJTRUUUj28FxVCF77xC6IxKo4
kEV4ylw4CEc2x0rVAKj4xxM4xvF2IEb7IF0Fy264kE64k0F24lx4CE17CEb7AF67AKxVWU
JVWUXwCjxxvEw4WlFcxC0VAqx4xG64AKrs4lc2IjII80xcxEwVWUZVWUtwASzI0EjI02j7
AqF2xKxwASY2vE4c8EcI0ErcxK0VAFwI0_JcC_GcWl4x8a6c8ajcxJMcIj6I8E87Iv67AK
xVWUJVW8JwAFxVCaYxvI4VCIwcAKzIAtMxkIecxEwVAFwVW5JwAFF20E14v26r1j6r4UMc
Ij6xIIjxv20xvE14v26r106r15M7kC6x804xWl1IIY67AEw4v_Jr0_Jr4l5I8CrVAvF7xS
0VAEw40v6r17Mc02F40EY4x0e2IEc7I2Y4C_Jrylc7Ca8VAvwVCqb41lb7Iv0xC_CrUanT
9S1TB71UUUUUUa7-sFnT9fn5n5KrsFqrs0vFZ2ywnF9Fs7X393tF9ayF93uF4DKa4xWjIF
yTuYvjxUX0PfDUUUUUAaLaJ3U

------=_Part_0_16259139.1182516532869
Content-Type: multipart/related;
boundary="----=_Part_1_17829242.1182516532899"

------=_Part_1_17829242.1182516532899
Content-Type: text/html;charset=GBK
Content-Transfer-Encoding: quoted-printable

<html><head><META http-equiv=3DContent-Type content=3D'text/html; charset =
=3DGBK'><title>test</title></head><body> dear =D0=A1=D1=E0=D7=D3<br> <font =
color=3D'red'>This is Text!</font> pic <img src=3D'cid:a'></img><br>hello<i=
mg src=3D'cid:b'></img></body></html>
------=_Part_1_17829242.1182516532899
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Disposition: inline
Content-ID: <a>

R0lGODlhKQAlAPcAAABSAABjMQDOYwgICGOcY3tjOc7OnPfv3v9jAP+cMf/GQv//Y///pf//////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
8 楼 sskhnje 2007-06-29  
贴了这么多天了, 敬请博客主人帮忙.
在些拜谢! 使用Spring的javamail注意的中文有关问题