在上一篇文章(Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(下) )中,我们学会了使用JavaMail发送一封复杂的邮件。
遗留的问题有以下两个:
1.附件的名称只能为英文,中文乱码
2.友好名称的显示。
我们使用163等邮箱发送邮件时,我们经常可以看到收件人一栏中会是:张益达 <zyh5540@163.com>这种方式。在上一版本的代码中并没有使用这样的方式。
下面解决这两个问题
1. 对于中文乱码,是因为邮件要求所有的字符必须是ascII字符,中文字符当然不可以。因此我们只需要把我们的中文全部转码就可以了。
而JavaMail提供了这样一个类:MimeUtility。使用这个类的encodeText方法就可以对中文进行编码。
2. 对于显示友好名称,我们首先要了解收件人填写时的格式。格式一般为:友好名称 <邮箱地址>,如果有多个收件人要以逗号分割
如:张益达sohu <zyh5540@sohu.com>,张益达qq <554077931@qq.com>,张益达163 <zyh5540@163.com>
示例代码如下
- 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;
-
-
-
-
-
-
-
- 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);
-
-
- msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("张益达sss") + "\" <zyh5540@163.com>"));
- msg.setReplyTo(new Address[]{new InternetAddress("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();
- MimeBodyPart attach2 = new MimeBodyPart();
- 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 src='cid:touxiang.jpg' alt='touxiang' width=\"100px\" height='100px' />,好看吗?", "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());
- }
- }
附:
1.JavaMail开发jar包下载地址:http://download.csdn.net/download/zyh5540/6900667
2.参考代码下载地址:http://download.csdn.net/download/zyh5540/6907731