帶有附件的郵件開發
其實,附件就是增加一個Bodypart與Multipart并合:

是以,我們隻需要在代碼中增加一部分BodyPart,然後與前面那個Multipart重新組合成新的Multipart——》message
完整代碼如下:
import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
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;
public class MailDemo2 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();//key value:配置參數。真正發送郵件時再配送
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.debug", "true");
Session session = Session.getInstance(props);//發送郵件時使用的換件配置
MimeMessage message = new MimeMessage(session);
//設定郵件的頭部
InternetAddress address = new InternetAddress("*********@163.com");
message.setFrom(address);
message.setRecipients(Message.RecipientType.TO,"***********@qq.com");
message.setSubject("第二封郵件");
//設定正文
//message.setContent("<h1>Hello<h1>", "text/html");
//設定文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("這是中文aaa<img src='cid:im'/>aaa","text/html;charset=UTF-8");
//設定圖檔部分
MimeBodyPart imagePart = new MimeBodyPart();
imagePart.setContentID("im");
//把磁盤上的圖檔加到part中:這裡使用到了JAF架構
DataHandler dHandler = new DataHandler(new FileDataSource("src/1.jpg"));
imagePart.setDataHandler(dHandler);
//将每個part部分結合起來,組合成MultiPart->Message
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(textPart);
mimeMultipart.addBodyPart(imagePart);
mimeMultipart.setSubType("related");//有關系的
MimeBodyPart textImageParts = new MimeBodyPart();
textImageParts.setContent(mimeMultipart);
//建立附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
dHandler=new DataHandler(new FileDataSource("src/1.rar"));
attachmentPart.setDataHandler(dHandler);
/***********需要解決的問題之一:收件收到的檔案名是亂碼************/
/***********需要解決的問題之二:中文問題:正文中的中文問題,以及附件文檔中的中文問題************/
//郵箱中收到的檔案的檔案名是亂碼,是以,需要手工設定一下
String fileName = dHandler.getName();
attachmentPart.setFileName(MimeUtility.encodeText(fileName));
MimeMultipart finalPart = new MimeMultipart();
finalPart.addBodyPart(textImageParts);
finalPart.addBodyPart(attachmentPart);
message.setContent(finalPart);
message.saveChanges();
//發送郵件
Transport transport = session.getTransport();
transport.connect("s******username", "*******password");
transport.sendMessage(message, message.getAllRecipients());
//儲存郵件
//message.writeTo(new FileOutputStream("d:/2.eml"));
}
}
而且,其中解決了三個郵件開發中的問題:
問題一: 附件名。在收件箱中接收到的附件名字是亂碼。
解決方案:代碼中擷取附件的名字,然後手動設定
問題二:正文文本中文亂碼:
解決方案:在正文代碼中設定編碼形式Charset=UTF-8
問題三: 附件中的文檔亂碼問題。
解決方案:使用MimeUtility手動設定。