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

Javamail 发送附件中文名乱码问题解决

 
阅读更多

利用Javamail 发送带附件的邮件的时候,发现附件如果是中文名的情况下,即使发送成功,接收方也会出现乱码。这个网上很多相关的处理方法,不过有一些地方不应适合,比如用字符转型或者BASE64Encoder加密,都未必适合本人的实际情况

后来发现用javax.mail.internet.MimeUtility.encodeText()解决了这个附件乱码的问题,部分代码如下

DataSource source = new FileDataSource(filePath);
                    
bodyPart = new MimeBodyPart();

bodyPart.setDataHandler(new DataHandler(source));
//logger.info(MimeUtility.encodeText(fileName));
bodyPart.setFileName(MimeUtility.encodeText(fileName));

multiPart.addBodyPart(bodyPart);
 

 

 

分享到:
评论
6 楼 grantbb 2011-12-30  
受用,支持!
5 楼 kensunhu 2011-10-28  
for(File attach:attachments){
				//add the attachment to the message helper
				helper.addAttachment( MimeUtility.encodeText( attach.getName() ), 
						attach );
			}

我测试过了,依楼主说的就不会有乱码问题。多谢楼主!
4 楼 lg_asus 2011-03-06  
多謝樓主提供的方法

不過標題亂碼不用這么麻煩吧

剛寫了個測試程序,結果竟然沒有亂碼。
3 楼 Ben.Sin 2010-03-04  
后来找了一段解决标题乱码

/**
	 * Get subject
	 * 
	 * @param message
	 * @return
	 * @throws MailException,
	 *             Exception
	 */
	public String getSubject(Message message) throws MailException, Exception{
		String subject = "";
		String prefix = "";
		int pos = 0;
		
		String[] strMailSubject = message.getHeader("subject");
		
		if (null == strMailSubject){
			logger.info("No suject could be found!");
			subject = "(无标题)";
		}
		else {
			if (strMailSubject[0].indexOf("=?GB_2312-80?") != -1){
				strMailSubject[0].replace("=?GB_2312-80?", "=?GBK?");
			}
			
			try{
                if(strMailSubject[0].toUpperCase().indexOf("=?ISO-8859-1?") != -1){
                	strMailSubject[0] = new String(strMailSubject[0].getBytes("ISO-8859-1"), "UTF-8");  
                }
                else if(strMailSubject[0].toUpperCase().indexOf("=?GB2312?") != -1){ 
                	pos = strMailSubject[0].toUpperCase().indexOf("=?GB2312?");
                	prefix = strMailSubject[0].substring(0, pos);
                	prefix = new String(prefix.getBytes("ISO-8859-1"), "gb2312");
                	
                	strMailSubject[0] = strMailSubject[0].substring(pos);
                	strMailSubject[0] = new String(strMailSubject[0].getBytes("gb2312"), "UTF-8");
                }
                else if(strMailSubject[0].toUpperCase().indexOf("=?GBK?") != -1){
                	pos = strMailSubject[0].toUpperCase().indexOf("=?GBK?");
                	prefix = strMailSubject[0].substring(0, pos);
                	prefix = new String(prefix.getBytes("ISO-8859-1"), "GBK");
                	
                	strMailSubject[0] = strMailSubject[0].substring(pos);
                	strMailSubject[0] = new String(strMailSubject[0].getBytes("GBK"), "UTF-8");  
                }
                else if(strMailSubject[0].toUpperCase().indexOf("=?BIG5?") != -1){
                	pos = strMailSubject[0].toUpperCase().indexOf("=?BIG5?");
                	prefix = strMailSubject[0].substring(0, pos);
                	prefix = new String(prefix.getBytes("ISO-8859-1"), "BIG5");
                	
                	strMailSubject[0] = strMailSubject[0].substring(pos);
                	strMailSubject[0] = new String(strMailSubject[0].getBytes("BIG5"), "UTF-8");
                }
                else{
                	// Normal character:ISO8859_1-->gb2312; subject ISO-8859-1-->gb2312;ISO-8859-1-->GBK;
                	strMailSubject[0] = new String(strMailSubject[0].getBytes("ISO-8859-1"), "UTF-8");  
                }  
                strMailSubject[0] = MimeUtility.decodeText(strMailSubject[0]);
            	strMailSubject[0] = prefix + strMailSubject[0];
			}
			catch(UnsupportedEncodingException unsupportedencodingexception){
                logger.error("UnsupportedEncoding", unsupportedencodingexception);
			}
			
            subject = strMailSubject[0];  
		}
		
        if(null == subject){
        	subject = "";
        }
        
		return subject;
	}
2 楼 imshare 2010-01-05  
轩风之逸 写道
你那样设置还有乱码~~需要这样才不会
mbpFile.setFileName(MimeUtility.encodeText(new String(fds.getName().getBytes(), "GB2312"), "GB2312", "B"));
呵呵~~我测试过了是这样才不会有乱码问题~~

你这样我也测试了,还是乱码
1 楼 轩风之逸 2009-12-11  
你那样设置还有乱码~~需要这样才不会
mbpFile.setFileName(MimeUtility.encodeText(new String(fds.getName().getBytes(), "GB2312"), "GB2312", "B"));
呵呵~~我测试过了是这样才不会有乱码问题~~

相关推荐

    james和javamail实现邮件收发(带发送附件)

    在这个例子中,我们将深入探讨如何利用James服务器和JavaMail API来实现这一目标,同时处理中文内容和附件。 首先,James(Apache James)是一个开源的邮件服务器,它支持SMTP、POP3和IMAP协议,可以作为企业级的...

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

    邮件附件中文乱码问题 在使用 SpringBoot 发送邮件时,经常会遇到附件名称中文乱码的问题。本文将详细介绍解决此问题的方法。 问题分析 在发送邮件时,我们需要将附件名称编码,以便正确地传输中文名称。然而,在...

    javamail 邮件系统

    JavaMail邮件系统是一种基于Java平台的邮件发送和接收解决方案,它允许开发者通过编程方式与SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)等邮件服务器进行交互。在JavaMail中,...

    JavaMail开发原理简介PPT

    邮件开发过程中会遇到一些常见问题,比如中文附件的乱码问题、Tomcat中JavaMail的支持与冲突,以及如何实现有效的邮件群发。这些问题需要开发者深入理解邮件协议和JavaMail的使用方式来解决。 邮件服务的核心是邮件...

    spring整合freemarker发送邮件例子

    本文将详细介绍如何使用Spring整合Freemarker和JavaMail API来实现发送带有HTML内容、内嵌图片和附件的邮件,并解决可能出现的乱码问题。 首先,我们需要在Spring的配置文件中配置邮件服务。这通常涉及到以下几步:...

    传智播客张孝祥Java邮件开发学习笔记

    邮件在不同的环境下,比如跨域、跨平台时,可能会遇到中文乱码的问题,因此需要掌握相应的编码技巧以确保邮件内容在不同系统中正确显示。同时,了解如何处理邮件的回信地址、友好名称等,也是提高邮件系统用户体验的...

    Java邮件开发详解-张孝祥 ppt

    此外,还涵盖了处理中文名附件乱码、Tomcat中JavaMail支持及可能的冲突问题,以及如何开发SMTP邮件服务器等高级应用。 学习邮件开发主要包括两个核心部分:一是发送与接收邮件,二是创建与解析邮件内容。邮件的发送...

    邮件的收发.pptx

    - **中文名的邮件附近乱码问题**:确保使用正确的字符集编码(如UTF-8)来避免乱码问题。 - **Tomcat中JavaMail支持与冲突问题**:配置合适的库版本,解决兼容性问题。 - **SMTP邮件服务器程序的开发**:涉及邮件...

Global site tag (gtag.js) - Google Analytics