在上一篇文章Java郵件開發(二):使用JMail發送一封圖文並茂且包含附件的郵件(上) 中,我們大概瞭解了一封郵件的組成。
下面我們完成發送有以下要求的郵件:
1.正文是一段html代碼
2.這段html代碼中內嵌一張圖片
3.這封郵件包含兩個附件
首先根據上篇文章最後的“郵件組織結構API”,分析以下有哪些MimeMultipart對象,有哪些MimeBodyPart對象。
1.有一個MimeMultipart對象msgPart,表示整封郵件的消息體,且消息體的multipart類型爲mixed(有附件)。
2.msgPart應該有三個MimeBodyPart對象,分別爲body(表示正文),attach1(表示附件1),attach2(表示附件2)
3.有一個MimeMultipart對象contentPart,表示正文的消息體且消息體的multipart類型爲related(有圖片內嵌資源)。而contentPart對象和body對象有關聯
4..contentPart應該有兩個MimeBodyPart對象,分別爲content(表示正文的html代碼),img(表示內嵌資源圖片)
分析清楚MimeMultipart對象和MimeBodyPart對象以及他們之間的關係,代碼寫起來就很輕鬆了。
代碼如下:
- 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.FileDataSource;
- import javax.mail.Message;
- import javax.mail.Message.RecipientType;
- 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.util.ByteArrayDataSource;
- /**
- * 創建一個複雜的郵件,這個郵件包括一段正文和兩個附件
- * 其中正文要包含一張圖片
- * @author Administrator
- *
- */
- public class Demo3 {
- 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("[email protected]"));
- msg.setRecipients(RecipientType.TO, InternetAddress.parse("[email protected],[email protected],[email protected],[email protected]"));
- msg.setSubject("From sohu 這是一封複雜郵件");
- /*郵件消息內容設置,包括兩個附件和一段正文*/
- 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);
- ByteArrayDataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"application/octet-stream");
- DataHandler imgDataHandler = new DataHandler(fileds);
- // DataSource imgds = new FileDataSource("D:\\picture\\jpg\\touxiang.jpg");
- // DataHandler imgDataHandler = new DataHandler(imgds);
- img.setDataHandler(imgDataHandler);
- //注意:Content-ID的屬性值一定要加上<>,不能是touxiang.jpg
- img.setHeader("Content-ID", "<touxiang.jpg>");
- //爲圖片設置文件名,有的郵箱會把html內嵌的圖片也當成附件
- img.setFileName("touxianga.jpg");
- //設置文字內容
- /**
- * 注意:在html代碼中要想顯示剛纔的touxiang.jpg
- * src裏不能直接寫Content-ID的值,要用cid:這種方式
- */
- content.setContent("<div style='color:red;font-size:18px;'>從sohu發來的郵件</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("file1.txt");
- attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\java.txt")));
- attach2.setFileName("file2.txt");
- msg.saveChanges();
- //把郵件以文件的形式寫入到磁盤
- OutputStream os = new FileOutputStream("E:\\others\\demo.eml");
- msg.writeTo(os);
- os.close();
- Transport trans = session.getTransport();
- trans.connect("smtp.sohu.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