`
fireflyjava
  • 浏览: 189662 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用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();

	}
}
分享到:
评论
8 楼 sskhnje 2007-06-29  
贴了这么多天了, 敬请博客主人帮忙.
在些拜谢! 
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//////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
6 楼 cskysnew 2007-04-24  
谢谢lz的文章,又可以少走弯路了。
5 楼 scut_xiaqi 2007-04-24  
谢谢楼主,这个问题困扰了我好久,现在终于解决了
4 楼 wcjmaomao 2007-03-16  
对好象是设置编码为gbk的,我用spring发邮件的时候那个乱码问题害了我两天,后面把编码改为gbk就行拉,真的是郁闷的问题!
3 楼 cavenaghi 2007-03-13  
不知道楼主有没有这样用过:为了让邮件的接受者,可以在邮件的客户端,或者直接登陆网上邮局时,可以看到你邮件发送者的姓名,需要进行下面的调用:
messageHelp.setFrom("李昆 <likun35@163.com>");

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

可这样,发到用户那里的话就会有乱码,我想了半天也想不到怎么解决,大家一起探讨一下吧
1 楼 tikii 2006-12-26  
呵呵,帮了我的忙哦.谢谢啊,缘分哦.

相关推荐

    Spring-Reference_zh_CN(Spring中文参考手册)

    在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect 12.4. ...

    Spring 2.0 开发参考手册

    在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect 12.4...

    spring chm文档

    在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect 12.4...

    SpringBoot mail中文附件乱码的解决方法

    SpringBoot mail中文附件乱码的解决方法 ...在使用 SpringBoot 发送邮件时,需要注意附件名称中文乱码的问题。通过初始化 splitLongParameters 为 false,我们可以解决这个问题,并确保附件名称正确地传输。

    邮件程序

    对于非ASCII字符,如中文字符,需要进行正确的编码,通常使用`UTF-8`。 7. **安全性和认证**:现代邮件系统经常使用SSL/TLS加密连接,以确保数据安全。JavaMail API支持这些安全协议,可以通过配置`Properties`启用...

Global site tag (gtag.js) - Google Analytics