随着网络应用的不断推广,电子邮件越来越多的被大家使用。虽然我们往往将电子邮件与 Foxmail、Outlook 这样的电子邮件客户端联系起来,但是往往我们也需要自己编程实现发送接收邮件,例如在一个网站注册用户后网站发出的回执 mail,或者在网络购物的时候,在完成订单后的几分钟之内发送确认电子邮件。对于这样的需求,我们不能通过已有的邮件客户端而需要自己编写邮件发送或者处理程序。在这里向大家讲解一下如何利用 JavaMail 来实现邮件的收发。
注意:本文只打算讨论 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=gbk”);
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 语言,而且包含图片信息的邮件。