注重:本文只打算討論JavaMail收發帶附件郵件的一些技巧,所以只是給出部分代碼。
1.發送帶附件的郵件
我們平時發送的郵件主要可以分解成2大部分,一個是發信人,接信人,主題等郵件標頭,另外一部分是郵件內容,它包括了郵件的附件。我們在發送普通郵件的時候content設置的類型是"text/Html",帶上附件後,我們需要把content的類型設置成Multipart,這時content包括了附件和"text/html"類型的正文。下面的這個告訴大家如何把附件放置到郵件中。
private Multipart getMultipart() throws MessagingException,UnsupportedEncodingException
{
MimeMultipart mp = new MimeMultipart();
try
{
//設置content裡的內容
MimeBodyPart contentMbp = new MimeBodyPart();
//請指定字符集,否則會是亂碼
contentMbp.setContent(_mailContent.getContent(), "text/html; charset=GB2312");
mp.addBodyPart(contentMbp); //添加附件
for (int i=0;i<_mailAttachment.getAttachPath().size();i++)
{
MimeBodyPart mbp = new MimeBodyPart();
FileDataSource fds = new FileDataSource((String) _mailAttachment.getAttachPath().get(i));
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312",null));
mp.addBodyPart(mbp);
}
}
catch(MessagingException ie)
{
System.out.println("Set Content Message error..."+ie.getMessage());
throw ie;
}
catch(UnsupportedEncodingException ie)
{
System.out.println("Encode the fileName error..."+ie.getMessage());
throw ie;
}
return mp;
}
放置附件的注重事項如下:
在發mail時需要注重字符集的問題。不但content裡要設置,而且文件名也需要設置。假如我們去掉mbp.setFileName(MimeUtility.encodeWord(fds.getName(),"GB2312",null));這句話,那麼你選中的附件還是會帶到郵件裡,但是在附件裡看不到。我們可以通過查看郵件大小知道。我們利用這個特點來實現發送content中寫的是html語言,而且包含圖片信息的郵件。