`

java邮件开发(三):解决附件名为乱码及显示友好名称

    博客分类:
  • java
 
阅读更多

在上一篇文章(Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(下) )中,我们学会了使用JavaMail发送一封复杂的邮件。

遗留的问题有以下两个:

1.附件的名称只能为英文,中文乱码

2.友好名称的显示。

我们使用163等邮箱发送邮件时,我们经常可以看到收件人一栏中会是:张益达 这种方式。在上一版本的代码中并没有使用这样的方式。

下面解决这两个问题

1. 对于中文乱码,是因为邮件要求所有的字符必须是ascII字符,中文字符当然不可以。因此我们只需要把我们的中文全部转码就可以了。

而JavaMail提供了这样一个类:MimeUtility。使用这个类的encodeText方法就可以对中文进行编码。

2. 对于显示友好名称,我们首先要了解收件人填写时的格式。格式一般为:友好名称 <邮箱地址>,如果有多个收件人要以逗号分割

如:张益达sohu ,张益达qq <554077931@qq.com>,张益达163

示例代码如下

 

package com.zyh.demo;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Address;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;
 
/**
 * 创建一个复杂的邮件,这个邮件包括一段正文和两个附件
 * 其中正文要包含一张图片
 * @author Administrator
 *
 */
public class Demo4 {
     
    public static void main(String[] args) throws Exception {
        Properties props = new Properties();
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.transport.protocol", "smtp");
         
        Session session = Session.getInstance(props);
        session.setDebug(true);
         
        Message msg = new MimeMessage(session);
        /*邮件消息头设置*/
        //使用MimeUtility.encodeText()方法对中文进行编码(base64或QP)
        msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("张益达sss") + "\" <zyh5540@163.com>"));
        msg.setReplyTo(new Address[]{new InternetAddress("zyh5540@163.com")});
        //友好名称和邮箱地址之间不要忘了有一空格,邮箱地址之间用逗号分隔
        //如:张益达sohu <zyh5540@sohu.com>,张益达qq <554077931@qq.com>,张益达163 <zyh5540@163.com>
        msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("张益达sohu") + " <zyh5540@sohu.com>,"
                + MimeUtility.encodeText("张益达qq") + " <554077931@qq.com>,"
                + MimeUtility.encodeText("张益达sina") + " <zyh5540@sina.com>,"
                + MimeUtility.encodeText("张益达163") + " <zyh5540@163.com>"));
        msg.setSubject("From 163 这是一封复杂邮件");
         
        /*邮件消息内容设置,包括两个附件和一段正文*/
        Multipart msgPart = new MimeMultipart("mixed");
        msg.setContent(msgPart);       
         
        MimeBodyPart body = new MimeBodyPart();     //表示正文
        MimeBodyPart attach1 = new MimeBodyPart();  //表示附件1
        MimeBodyPart attach2 = new MimeBodyPart();  //表示附件2
        msgPart.addBodyPart(body);
        msgPart.addBodyPart(attach1);
        msgPart.addBodyPart(attach2);
         
        /*以下为设置正文*/
        /*正文是文字和图片混合的*/
        Multipart contentPart = new MimeMultipart("related");
        body.setContent(contentPart);
        MimeBodyPart content = new MimeBodyPart(); //文字
        MimeBodyPart img = new MimeBodyPart();     //图片
        contentPart.addBodyPart(content);
        contentPart.addBodyPart(img);
         
        DataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"image/jpeg"); 
        DataHandler imgDataHandler = new DataHandler(fileds);
        img.setDataHandler(imgDataHandler);
        img.setHeader("Content-ID", "<touxiang.jpg>");
        img.setFileName(MimeUtility.encodeText("头像.jpg"));
        //设置文字内容
        content.setContent("<div style="color:red;font-size:18px;">从163发来的邮件</div>:我这里有一张图片<img style="display: none;" src="" alt="touxiang" height="100px" width="\"100px\""><img alt="加载中..." title="图片加载中..." src="http://www.2cto.com/statics/images/s_nopic.gif">,好看吗?", "text/html;charset=utf-8");
        /*正文内容设置结束*/
         
        /*下面为设置附件*/
        attach1.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\firefox.txt")));
        attach1.setFileName(MimeUtility.encodeText("文件1.txt"));
        attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\java.txt")));
        attach2.setFileName(MimeUtility.encodeText("file文件2.txt"));
         
        msg.saveChanges();
         
        OutputStream os = new FileOutputStream("E:\\demo4.eml");
        msg.writeTo(os);
        os.close();
         
        Transport trans = session.getTransport();
        trans.connect("smtp.163.com", 25, "zyh5540", "test");
        trans.sendMessage(msg,msg.getAllRecipients());
分享到:
评论

相关推荐

    fckeditor(java版-解决中文附件名称乱码问题)

    通过以上知识点的深入理解和应用,可以有效地解决“fckeditor(java版-解决中文附件名称乱码问题)”这个问题,确保用户能够正常上传并保存带有中文名称的附件,从而提高产品在中文环境下的可用性和用户体验。

    Java实现文件下载并解决中文文件名乱码

    ### Java实现文件下载并解决中文文件名乱码 在日常的Web开发中,经常会遇到需要让用户下载文件的需求,尤其是在企业级应用中。然而,在实际操作过程中可能会遇到一个常见问题:当文件名包含中文字符时,下载后的...

    java下载附件中文乱码.xls

    java下载附件中文乱码

    java中文乱码解决问题

    有时候,我们在中文系统平台下开发的 Web 应用程序移植到英文系统平台下,在 Servlet 和 JSP 中直接书写的中文字符串在输出时,将显示为乱码。这是因为在编译 Servlet 类或者 JSP 文件时,如果没有使用 -encoding ...

    Java中文乱码浅析及解决方案

    Java 中文乱码问题是一个常见的编程困扰,尤其对于处理中文字符的Java程序而言。这个问题通常源于字符编码的不一致,即不同环节采用的字符编码标准不统一。本文将深入探讨这一问题,并提供相应的解决方案。 首先,...

    Java开发乱码问题解决方法汇总

    Java开发乱码问题解决方法汇总 Java开发中乱码问题是非常常见的问题之一,而解决这些问题需要具备一定的技术知识和经验。在本文中,我们将总结一些常见的Java开发乱码问题解决方法,希望能够为读者提供帮助。 1. ...

    java中文乱码问题解决

    Java中文乱码问题是Java开发中常见的问题,尤其是在Web开发中,乱码问题会导致页面显示混乱,影响用户体验。解决乱码问题需要了解编码的基本原理和各种编码格式的区别。 编码的原因可以总结为两点:计算机中存储...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    java web开发解决乱码问题

    ### Java Web 开发中解决乱码问题的全面指南 #### 一、乱码问题概述 在Java Web开发过程中,乱码问题是开发者经常会遇到的问题之一。它通常发生在处理含有中文或其他非ASCII字符的数据时。本篇文章将详细介绍在...

    Java开发中文乱码问题解决

    2. **控制台输出**:Java默认使用平台的默认编码,如Windows可能是GBK,而在Linux或Mac上可能是UTF-8,这可能导致在不同平台上显示乱码。 3. **网络通信**:HTTP请求或响应中的文本信息如果编码不一致,也可能导致...

    KETTLE 发送邮件乱码修正

    我当前调试的是kettle 5.4.0.1版本,修复job中发送邮件时候中文乱码问题: 替换 data-integration\lib\kettle-engine-5.4.0.1-130.jar 这个jar包下 data-integration\lib\kettle-engine-5.4.0.1-130.jar\org\...

    java读取txt文件乱码解决方案

    java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt...

    乱码解决 乱码解决 乱码解决 乱码解决 乱码解决

    乱码通常指的是字符显示不正确或无法识别,这可能由于编码格式不匹配、文件损坏、程序设置不当等原因引起。下面将详细讨论乱码产生的原因、解决方案以及如何预防。 一、乱码产生的原因 1. **编码格式不一致**:...

    linux下Java字体乱码(解决图像中中文乱码)

    本篇文章将详细探讨这个问题及其解决方案,帮助开发者解决Java在Linux下的中文显示问题。 首先,我们需要了解Java在渲染文本时依赖的操作系统环境。在Windows上,由于内置了丰富的中文字体,Java应用通常可以正常...

    JAVA反编译文件解决中文乱码

    首先,理解问题的根源:Java源代码默认采用UTF-8编码,但某些情况下,源代码可能使用了其他编码方式,如GBK。当这些源代码被编译成字节码后,再用不支持原始编码的反编译工具打开,就会出现乱码。 1. **设置JD-GUI...

    java乱码问题解决方法

    Java 开发中常见的问题之一,解决这个问题需要了解 Java 的编码方式、JSP 中文乱码问题、Tomcat 5.5 中文乱码问题、JDBC ODBC Bridge 的 Bug 及其解决方法、Solaris 下 Servlet 编程的中文问题及解决办法等。...

    java解决解决get中文乱码问题

    ### Java解决GET请求中文乱码问题详解 在Java Web开发中,经常遇到的一个问题是处理GET请求中的中文参数时出现乱码。这个问题主要是因为浏览器发送GET请求时,参数默认使用ISO-8859-1编码格式,而服务器端通常采用...

    java Web开发乱码解决方案

    ### Java Web 开发中的中文乱码问题及其解决方案 在Java Web开发过程中,中文乱码问题是一种常见的技术难题,尤其在处理客户端与服务器间的数据交互时更为突出。本文将详细介绍Java Web开发中出现乱码的原因,并...

    java中文乱码之解决URL中文乱码问题的方法

    在Java开发中,遇到中文乱码问题是一种常见的挑战,特别是在处理URL时。URL中文乱码问题主要是由于URL编码和解码过程中的不一致导致的。下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics