`

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"));
呵呵~~我测试过了是这样才不会有乱码问题~~

相关推荐

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    ### JavaMail发送邮件时遇到的问题及解决方法 在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未...同时,利用调试工具深入理解邮件发送的具体流程也有助于快速定位和解决问题。

    Gmail邮件通过JavaMail发送(不带附件与带一个附件)

    注意,Gmail有时会阻止非标准应用程序的登录,为了解决这个问题,你可能需要在Gmail账户的安全设置中开启“不够安全的应用的访问”。 以上就是使用JavaMail API通过Gmail发送邮件的基本过程,无论是无附件还是有...

    JavaMail发送给多人,添加多个附件

    javaMail

    javaMail 用三种方式实现发送附件

    javaMail 用附件路径,文件流 byte[] 或 base64 字符串 实现发送附件功能

    JavaMail发送邮件(文本、html、附件)

    JavaMail是一种广泛使用的Java库,用于在应用程序中发送电子邮件。这个标题"JavaMail发送邮件(文本、html、附件)"涵盖了使用JavaMail API发送不同格式邮件的核心功能。下面将详细介绍如何利用JavaMail发送文本、...

    JavaMail(3)——发送带附件的邮件.docx

    在JavaMail中,发送带有附件的邮件涉及到对MIME(Multipurpose Internet Mail Extensions)标准的理解和使用。MIME扩展了邮件协议,允许在邮件中包含多媒体内容,如图片、文档、音频或视频文件等。 在JavaMail中,`...

    javamail发送邮件 主题乱码解决

    第90行,setSubject("")

    JavaMail发送带附件的邮件

    在JavaMail中发送带附件的邮件是一个常见的需求,尤其对于企业级应用或者自动化任务来说。下面将详细介绍如何使用JavaMail来实现这一功能,以及所需依赖和示例代码。 首先,要使用JavaMail,你需要在项目中添加相应...

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

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

    javamail发送邮件.zip

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个“javamail发送邮件.zip”压缩包显然包含了一个示例项目,演示如何使用JavaMail API发送包含正文文本、图片以及附件的邮件。以下是对这...

    JAVAMAIL集合发送图片,附件,内容,HTML等得JAVAMAIL代码

    本资源是一个集合发送图片,附件,内容,HTML等得JAVAMAIL代码,并且可以同时发送多个附件多个图片,只需填充VO类,即可直接调用并发送邮件,例子已经写好,只要填充上必要值即可,经163,qq,sina测试没有问题,有...

    06 使用JavaMail发送带附件的邮件.exe

    06 使用JavaMail发送带附件的邮件.exe06 使用JavaMail发送带附件的邮件.exe

    jsp/servlet javamail 发送邮件 可发送多个附件

    在Java Web开发中,JSP(JavaServer ...总的来说,这个JSP/Servlet邮件系统利用JavaMail API实现了发送多附件邮件的功能,但也需要注意编码问题和安全性。通过不断优化和调试,可以构建出稳定且功能丰富的邮件服务。

    用javaMail发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个功能通常涉及到SMTP(简单邮件传输协议)和其他相关的互联网邮件协议。在JavaMail中,`mail.jar` 和 `activation.jar` 是两个关键的库...

    JavaMail发送邮件的例子

    JavaMail是一种在Java环境中发送和接收电子邮件的标准API,它提供了丰富的功能来处理复杂的邮件操作。在Struts2框架中集成JavaMail服务,可以方便地在Web应用中实现邮件的发送功能。下面我们将深入探讨JavaMail的...

    javamail发送邮件(带附件)

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个资源提供了一个具体的示例,展示了如何使用JavaMail API 来发送带有附件的邮件。以下是对这个主题的详细解释: 首先,你需要理解...

    javamail发送邮件实例

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个库提供了一组API,使得开发者能够轻松地处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件服务。在...

    JavaMail邮箱发送,activation.jar包

    在Java编程环境中,发送电子邮件是一项常见的任务,JavaMail API提供了这样的功能。然而,要实现完整的邮件发送功能,单纯依赖`javamail.jar`是不够的,还需要`activation.jar`包。这两个库一起工作,使Java应用程序...

    JavaMail实现邮件发送功能,可发送、抄送、密送多人,支持多附件的发送

    本篇将详细介绍如何利用 JavaMail 实现邮件发送,包括发送、抄送、密送多人以及添加多附件。 首先,你需要在项目中引入 JavaMail 的依赖。如果是 Maven 项目,可以在 `pom.xml` 文件中添加如下依赖: ```xml ...

    利用JavaMail发送邮件的实例,可以直接运行

    这个实例将向我们展示如何使用JavaMail API在Java中实现邮件发送功能。以下是详细的步骤和相关知识点: 1. **JavaMail API简介**:JavaMail API是Java平台上的标准邮件服务接口,它提供了一系列类和接口,允许开发...

Global site tag (gtag.js) - Google Analytics