JavaMail是Sun发布的用来处理E-mail的API,它能够方便地执行一些经常使用的邮件传输。虽然JavaMail是Sun的API之一,但它没有被加在标准的Java开发工具包(JDK)中,这就意味着使用以前必须另外下载JavaMail文件(http://www.sun.com),除此以外,要使用JavaMail,还须要有Sun的JavaBeans Activation Framework(JAF)支持,所以须要下载一个叫activation.jar的文件,将他们同时放在应用的lib目录下或其余Classpath包含的目录。 html
发送邮件过程当中主要使用到的几个类: java
1. Javax.mail.Session类 服务器
Session定义了一个基本的邮件会话,任何工做都是基于这个Session的。Session对象须要一个java.util.Properties对象获得相似邮件服务器、用户名、密码这样的信息。Session的构造函数是私有的,能够经过getDefaultInstance()方法取得一个单一的能够被共享的默认Session,如: session
Properties props = new Properties() ; ide …… 函数 Session session = Session.getDefaultInstance(props, null) ; 工具 |
或者,能够经过getInstance()方法来建立一个唯一的Session,如: 开发工具
Properties props = new Properties() ; spa …… code Session session = Session.getInstance(props, null) ; |
2. Javax.mail.Message类
建立了Session对象后,就要建立Message来发送Session。Message是一个抽象类,在大部分应用中可使用它的子类Javax.mail.internet.MimeMessage。
建立Message的方法以下:
MimeMessage message = new MimeMessage(session) ; |
设置内容(content)的基本机制是使用setContent()方法:message.setContent(“Email Content.” , “text/plain”)。
若是可以明确地使用MimeMessage来建立Message,而且只是使用普通的文本(plain text),那么也可使用setText(“Email Content.”)。
若是要建立其余类型的Message,如HTML类型的Message,那么仍是使用前者message.setContent(“Email Content.” , “text/html”)。
设置主题(subject),使用setSubject()方法:message.setSubject(“Subject”)。
3. Javax.mail.Address类
Address是一个抽象类,可使用它的子类javax.mail.internet.InternetAddress。
建立一个Address语句以下:
Address address = new InternetAddress(“test@company.com”); |
若是但愿在出现邮件地址的地方显示一个名称,那么只须要再多传递一个参数。
Address address = new InternetAddress(“test@company.com”, “Kylen”); |
除此,须要为Message的from以及to字段建立address对象。为了识别发送者,使用setFrom()和setReplyTo()方法。
message.setFrom(address) ; |
若是须要显示多个from地址,可使用addFrom()方法:
Address address[] = {……}; message.addFrom(address) ; |
为了辨识Message的收件人,须要使用setRecipient()方法。
message.addRecipient(type, address) ; Message.RecipientType 有几个预先定义好的类型: Message.RecipientType.To 收件人 Message.RecipientType.CC 抄送 Message.RecipientType.BCC 暗送 |
同时发给多我的:
Address toAddress = new InternetAddress(“manager@company.com”); Address[] ccAddress = {new InternetAddress(“colleague1@company.com”), new InternetAddress(“colleague2@company.com”)} ; message.addRecipient(Message.RecipientType.To , toAddress) ; message.addRecipient(Message.RecipientType.CC , ccAddress) ; |
4. Javax.mail.Transport类
最后,须要使用一个Transport类来完成邮件发送,能够经过两种方法发送邮件。Transport是一个抽象类,能够调用它的静态的send()方法来发送:
Transport.send(message) ; |
或者,能够从Session中为所使用的协议取得一个指定的实例:
Transport transport = session.getTransport(“smtp”) ; transport.sendMessage(message , message.getAllRecipients()) ; transport.close() ; |
通过以上的介绍,要用JavaMail发送一封普通的邮件就变得至关容易了。本实例编写了一个专门用于邮件处理的类MailUtil.java,其源代码以下:
package common.util.mail; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailUtil { static int port = 25; //smtp端口 static String server = "smtp.163.com"; //smtp服务器地址 static String from = "Webmaster<kylen@163.com>"; //发送者 static String user = "kylen@163.com"; //发送者地址 static String password = "1141940938"; //密码 public static void sendEmail(String email, String subject, String body) { try { Properties props = new Properties(); props.put("mail.smtp.host", server); props.put("mail.smtp.port", String.valueOf(port)); props.put("mail.smtp.auth", "true"); Transport transport = null; Session session = Session.getDefaultInstance(props, null); transport = session.getTransport("smtp"); transport.connect(server, user, password); MimeMessage msg = new MimeMessage(session); msg.setSentDate(new Date()); InternetAddress fromAddress = new InternetAddress(from); msg.setFrom(fromAddress); InternetAddress[] toAddress = new InternetAddress[1]; toAddress[0] = new InternetAddress(email); msg.setRecipients(Message.RecipientType.TO, toAddress); msg.setSubject(subject, "UTF-8"); msg.setText(body, "UTF-8"); msg.saveChanges(); transport.sendMessage(msg, msg.getAllRecipients()); } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }