`
yefriendly
  • 浏览: 38322 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring发送邮件(二)

阅读更多

五、发送带附件的邮件

    发送带附件的邮件和发送内嵌的邮件相似,都是multipart类型的邮件。在src下存放两个文件:"2.jpg"和"文档.doc"。注意当附件名为中文时,会出现乱码,此时需用MimeUtility.encodeWord()方法对文件名进行编码:

 

public void sendAttachmentEmail(JavaMailSender sender) throws MessagingException{
		MimeMessage msg=sender.createMimeMessage();
		//创建MimeMessageHelper实例,第2个参数表示是否为multipart邮件,第3个参数表示MimeMessage的编码
		MimeMessageHelper helper=new MimeMessageHelper(msg,true,"utf8");//true表示为multipart邮件
		helper.setFrom("dongkk@sina.com");
		helper.setTo("dongkk@sina.com");
		helper.setSubject("注册成功-带附件");
		helper.setText("欢迎访问www.sina.com.cn");
		
		try {
			ClassPathResource file1=new ClassPathResource("2.jpg");
			
			helper.addAttachment("2.jpg",file1.getFile());
			ClassPathResource file2=new ClassPathResource("文档.doc");
			helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile());
			//当附件的文件名带有中文时,会出现乱码。所以需对文件名进行编码转换,可使用
			//javax.mail.internet.MimeUtility.encodeWord(String filename)
			//如果主题出现乱码,可以使用该函数,也可以使用下面的函数
			//helper.setSubject(MimeUtility.encodeText(String text,String charset,String encoding))
			//第2个参数表示字符集,第三个为目标编码格式。
			//MimeUtility.encodeWord(String word,String charset,String encoding)
		} catch (IOException e) {
			e.printStackTrace();
		}
		sender.send(msg);
		System.out.println("成功发送带附件邮件!");
	}

 

此时,附件能正常显示中文名。关于Spring中发送邮件的乱码问题可参考http://blog.csdn.net/matrixjava/archive/2008/11/06/3237772.aspx。其介绍了3种常遇到的问题:

 

 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了!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics