Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(下)

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

遗留的问题有以下两个:

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

2.友好名称的显示。

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

下面解决这两个问题

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

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

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

如:张益达sohu <[email protected]>,张益达qq <[email protected]>,张益达163 <[email protected]>

示例代码如下

[java]  view plain  copy
  1. package com.zyh.demo;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.OutputStream;  
  6. import java.util.Properties;  
  7.   
  8. import javax.activation.DataHandler;  
  9. import javax.activation.DataSource;  
  10. import javax.activation.FileDataSource;  
  11. import javax.mail.Message;  
  12. import javax.mail.Message.RecipientType;  
  13. import javax.mail.Address;  
  14. import javax.mail.Multipart;  
  15. import javax.mail.Session;  
  16. import javax.mail.Transport;  
  17. import javax.mail.internet.InternetAddress;  
  18. import javax.mail.internet.MimeBodyPart;  
  19. import javax.mail.internet.MimeMessage;  
  20. import javax.mail.internet.MimeMultipart;  
  21. import javax.mail.internet.MimeUtility;  
  22. import javax.mail.util.ByteArrayDataSource;  
  23.   
  24. /** 
  25.  * 创建一个复杂的邮件,这个邮件包括一段正文和两个附件 
  26.  * 其中正文要包含一张图片 
  27.  * @author Administrator 
  28.  * 
  29.  */  
  30. public class Demo4 {  
  31.       
  32.     public static void main(String[] args) throws Exception {  
  33.         Properties props = new Properties();  
  34.         props.setProperty("mail.smtp.auth""true");  
  35.         props.setProperty("mail.transport.protocol""smtp");  
  36.           
  37.         Session session = Session.getInstance(props);  
  38.         session.setDebug(true);  
  39.           
  40.         Message msg = new MimeMessage(session);  
  41.         /*邮件消息头设置*/  
  42.         //使用MimeUtility.encodeText()方法对中文进行编码(base64或QP)  
  43.         msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("张益达sss") + "\" <[email protected]>"));  
  44.         msg.setReplyTo(new Address[]{new InternetAddress("[email protected]")});  
  45.         //友好名称和邮箱地址之间不要忘了有一空格,邮箱地址之间用逗号分隔  
  46.         //如:张益达sohu <[email protected]>,张益达qq <[email protected]>,张益达163 <[email protected]>  
  47.         msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("张益达sohu") + " <[email protected]>,"   
  48.                 + MimeUtility.encodeText("张益达qq") + " <[email protected]>,"  
  49.                 + MimeUtility.encodeText("张益达sina") + " <[email protected]>,"  
  50.                 + MimeUtility.encodeText("张益达163") + " <[email protected]>"));  
  51.         msg.setSubject("From 163 这是一封复杂邮件");  
  52.           
  53.         /*邮件消息内容设置,包括两个附件和一段正文*/  
  54.         Multipart msgPart = new MimeMultipart("mixed");  
  55.         msg.setContent(msgPart);          
  56.           
  57.         MimeBodyPart body = new MimeBodyPart();     //表示正文  
  58.         MimeBodyPart attach1 = new MimeBodyPart();  //表示附件1  
  59.         MimeBodyPart attach2 = new MimeBodyPart();  //表示附件2  
  60.         msgPart.addBodyPart(body);  
  61.         msgPart.addBodyPart(attach1);  
  62.         msgPart.addBodyPart(attach2);  
  63.           
  64.         /*以下为设置正文*/  
  65.         /*正文是文字和图片混合的*/  
  66.         Multipart contentPart = new MimeMultipart("related");  
  67.         body.setContent(contentPart);  
  68.         MimeBodyPart content = new MimeBodyPart(); //文字  
  69.         MimeBodyPart img = new MimeBodyPart();     //图片  
  70.         contentPart.addBodyPart(content);  
  71.         contentPart.addBodyPart(img);  
  72.           
  73.         DataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"image/jpeg");    
  74.         DataHandler imgDataHandler = new DataHandler(fileds);  
  75.         img.setDataHandler(imgDataHandler);  
  76.         img.setHeader("Content-ID""<touxiang.jpg>");  
  77.         img.setFileName(MimeUtility.encodeText("头像.jpg"));  
  78.         //设置文字内容  
  79.         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");  
  80.         /*正文内容设置结束*/  
  81.           
  82.         /*下面为设置附件*/  
  83.         attach1.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\firefox.txt")));  
  84.         attach1.setFileName(MimeUtility.encodeText("文件1.txt"));  
  85.         attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\java.txt")));  
  86.         attach2.setFileName(MimeUtility.encodeText("file文件2.txt"));  
  87.           
  88.         msg.saveChanges();  
  89.           
  90.         OutputStream os = new FileOutputStream("E:\\demo4.eml");  
  91.         msg.writeTo(os);  
  92.         os.close();  
  93.           
  94.         Transport trans = session.getTransport();  
  95.         trans.connect("smtp.163.com"25"zyh5540""test");  
  96.         trans.sendMessage(msg,msg.getAllRecipients());  
  97.     }  
  98. }  

附:

1.JavaMail开发jar包下载地址:http://download.csdn.net/download/zyh5540/6900667

2.参考代码下载地址:http://download.csdn.net/download/zyh5540/6907731

猜你喜欢

转载自blog.csdn.net/angel_g/article/details/76685738