首页 > 代码库 > 带有附件及图片正文的JavaMail邮件发送

带有附件及图片正文的JavaMail邮件发送

  1 package javamail;  2   3 import java.io.UnsupportedEncodingException;  4 import java.util.Properties;  5   6 import javax.activation.DataHandler;  7 import javax.activation.FileDataSource;  8 import javax.mail.Message;  9 import javax.mail.Message.RecipientType; 10 import javax.mail.Authenticator; 11 import javax.mail.MessagingException; 12 import javax.mail.Multipart; 13 import javax.mail.PasswordAuthentication; 14 import javax.mail.Session; 15 import javax.mail.Transport; 16 import javax.mail.internet.AddressException; 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  23 public class TestMail03 { 24     public static void main(String[] args) { 25         try { 26             Properties props = new Properties(); 27             props.setProperty("mail.transport.protocol", "smtp"); 28             /** 29              * 设置发送邮件的服务器,不同的邮箱服务器不一致,可以在邮箱的帮助中查询 30              */ 31             props.setProperty("mail.host", "smtp.126.com"); 32             /** 33              * 设置发送服务器验证,一些邮箱需要增加这个验证才能发送邮件 34              */ 35             props.setProperty("mail.smtp.auth", "true"); 36             /** 37              * 当需要使用Transport.send发送时,需要将用户名和密码设置到Session中 38              */ 39             Session session = Session.getDefaultInstance(props,new Authenticator() { 40                 /** 41                  * 通过Authenticator中 的getPasswordAuthentication的方法来设置邮箱的用户名和密码 42                  */ 43                 @Override 44                 protected PasswordAuthentication getPasswordAuthentication() { 45                     return new PasswordAuthentication("xiaohui390", "soul-390"); 46                 } 47             }); 48              49             session.setDebug(true); 50              51             Message msg = new MimeMessage(session); 52             /** 53              * 使用MimeUtility.encodeText可以将中文编码 54              */ 55             msg.setFrom(new InternetAddress(MimeUtility.encodeText("王辉")+"<xiaohui390@126.com>")); 56             msg.setRecipient(RecipientType.TO,new InternetAddress(MimeUtility.encodeText("阿飞")+"<415519522@qq.com>")); 57             msg.setSubject("一封邮件"); 58              59             /** 60              * 创建整个邮件的Multipart,因为邮件的内容已经不仅仅只是纯文本或者纯html文本,而需要添加 61              * 相应的附件,此时就得通过Multipart来创建 62              */ 63             Multipart emailPart = new MimeMultipart(); 64             /** 65              * Multipart不能直接加入内容,需要通过BodyPart来加入内容,假设有两个附件就需要三个BodyPart 66              * 两个用来存储附件,一个用来存储邮件的正文 67              */ 68             MimeBodyPart att1 = new MimeBodyPart(); 69             /** 70              * 为第一个附件设置文件,DataHandler是在JAF包中,如果使用的是jdk1.4的版本需要手动下载这个包 71              */ 72             att1.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt"))); 73             att1.setFileName("1.txt"); 74             /** 75              * 创建了第二个附件 76              */ 77             MimeBodyPart att2 = new MimeBodyPart(); 78             att2.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt"))); 79             //要解决中文的问题需要通过一个MimeUtility这个类来编码中文 80             att2.setFileName(MimeUtility.encodeText("你好.txt")); 81              82             MimeBodyPart content = new MimeBodyPart(); 83             /** 84              * 由于文件的正文还有图片和内容,所以也需要通过Multipart来创建 85              */ 86             MimeMultipart contentMultipart = new MimeMultipart(); 87             /** 88              * 然后再创建相应的BodyPart来设置内容 89              */ 90             MimeBodyPart imgBody = new MimeBodyPart(); 91             /** 92              * 创建了正文中的图片内容 93              */ 94             imgBody.setDataHandler(new DataHandler(new FileDataSource("d:/02.jpg"))); 95             /** 96              * 为这个图片设置一个id,在正文中可以通过cid:xxx来访问 97              */ 98             imgBody.setContentID("smile"); 99             100             MimeBodyPart htmlBody = new MimeBodyPart();101             htmlBody.setContent("<h1>这个是一个带有附件的图片</h1><img src=http://www.mamicode.com/‘cid:smile‘/>", "text/html;charset=utf-8");102             103             104             contentMultipart.addBodyPart(imgBody);105             contentMultipart.addBodyPart(htmlBody);106             //完成了邮件正文的设置107             content.setContent(contentMultipart);108             109             /**110              * 设置邮件的信息111              */112             //添加第一个附件113             emailPart.addBodyPart(att1);114             //添加第二个附件115             emailPart.addBodyPart(att2);116             //添加邮件正文117             emailPart.addBodyPart(content);118             //设置邮件的信息119             msg.setContent(emailPart);120             121             Transport.send(msg);122         } catch (AddressException e) {123             e.printStackTrace();124         } catch (MessagingException e) {125             e.printStackTrace();126         } catch (UnsupportedEncodingException e) {127             e.printStackTrace();128         }129         130     }131 }

 

带有附件及图片正文的JavaMail邮件发送