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

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") + "\" "));

msg.setReplyTo(new Address[]{new InternetAddress("zyh5540@163.com")});

//友好名称和邮箱地址之间不要忘了有一空格,邮箱地址之间用逗号分隔

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

msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("张益达sohu") + " ,"

+ MimeUtility.encodeText("张益达qq") + " <554077931@qq.com>,"

+ MimeUtility.encodeText("张益达sina") + " ,"

+ MimeUtility.encodeText("张益达163") + " "));

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", "");

img.setFileName(MimeUtility.encodeText("头像.jpg"));

//设置文字内容

content.setContent("

从163发来的邮件
:我这里有一张图片,好看吗?", "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());

}

}

https://blog.csdn.net/zyh5540/article/details/19019397

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值