用JavaMail写发送邮件程序
参加开发过各种各样的Web应用,经常会遇到Web应用需要嵌入邮件功能。例如,如果是EC应用的话,顾客下单后会收到下单确认邮件,而商品提供者会收到有新订单需要处理的邮件,这样商品提供者就不必定期的访问自己的网站或数据库也能够处理订单,而顾客也不必记下下单时填写的内容。或者还有,有新品上市时,通过邮件给希望收到最新信息的老顾客发送商品介绍和各种促销活动等。
一般来说,通过Pull型浏览器(能自动收集信息)和Push型邮件系统(信息提供者积极提供信息)的协同,可以给用户带来更好的用户体验,对网站经营者也可以提供非常有利的解决方案。
在本文中,就是要介绍能够简单实现这种邮件系统的Java类库--JavaMail。利用JavaMail,不用考虑SMTP这种底层的通信实现,只要设定相关参数就可实现发送邮件。
在这里,只是先用固定文本信息来尝试,当然你可以编辑必要的参数,从数据库获取数据等,来实现动态的发送邮件功能。
下面通过具体代码来了解。
1. 安装JavaMail类库
要利用JavaMail类库,除了JavaMail自身,还需要JAF(Java Activation Framework),Java6以后的版本不需要JAF。可以从下面的地址获取这些。
http://www.oracle.com/technetwork/java/javamail/index-138643.html
下载后解压,将lib下的类库添加到你的Classpath。
2. Java程序
MailTransfer.java
1 import java.io.UnsupportedEncodingException; 2 import java.util.Properties; 3 4 import javax.mail.Message; 5 import javax.mail.MessagingException; 6 import javax.mail.Session; 7 import javax.mail.Transport; 8 import javax.mail.internet.InternetAddress; 9 import javax.mail.internet.MimeMessage; 10 11 12 public class MailTransfer { 13 public static void main(String[] args) { 14 Properties objPrp=new Properties(); 15 objPrp.put("mail.smtp.host","smtp.xxxxx.ne.jp"); // SMTP Server 16 objPrp.put("mail.host","smtp.xxxxx.ne.jp"); // Host 17 // Mail Session 18 Session session=Session.getDefaultInstance(objPrp,null); 19 // Sending Message 20 MimeMessage objMsg=new MimeMessage(session); 21 try { 22 // To (还可以设定其他CC或BCC) 23 objMsg.setRecipients(Message.RecipientType.TO,"xxxxxx@hotmail.com"); 24 // From 25 InternetAddress objFrm=new InternetAddress("xxxxxx@gmail.com","E.Kou"); 26 27 objMsg.setFrom(objFrm); 28 // 标题 29 objMsg.setSubject("Mail Test","utf-8"); 30 31 // 邮件内容 32 objMsg.setText("Hello","utf-8"); 33 34 // 发送邮件 35 Transport.send(objMsg); 36 } catch (UnsupportedEncodingException e) { 37 e.printStackTrace(); 38 } catch (MessagingException e) { 39 e.printStackTrace(); 40 } 41 } 42 }
这个例子是从gmail向hotmail发送一封名为Mail Test的邮件。
3. 需要注意的地方
①发送中文邮件时要注意编码
这里用的是utf-8
②mail.host和mail.smtp.host都要指定
因为Java会先识别mail.smtp.host,所以只指定mail.smtp.host也可以。但是Message-ID是利用mail.host生成的,所以如果不指定mail.host,可能会影响Message-ID的生成。