抽空找资料,做了一个发送邮件的demo,具体的说明都在注释里了。防止后面又忘了!
package sendEmail;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
*
* SendEmail
* 类作用描述
* @author yangchuang
* @since 2014-9-20 下午6:36:18
* @version 1.0.0
* 修改记录
* 修改日期 修改人 修改后版本 修改内容
*/
public class SendEmail {
/**
* Session对象,Session定义了全局的和每个用户的与邮件相关的属性,这些属性详细说明了客户机和服务器如何交流信息。
*/
private Session session;
/**
* Message表示单个邮件消息,其属性包括消息类型、地址信息和所定义的目录结构。但是Message类是一个抽象类,必须实现它的一个子类。
* Message类的主要方法有两部分,第一部分主要在发送邮件的时候使用,用于设置邮件的相关信息,包括邮件的发送者、接收者、主题和发送时间等。
* 通常使用MimeMessage,它是Message类的一个派生类。
*/
private Message message;
/**
* 是一个抽象类,用于邮件的发送。
*/
private Transport transport;
/**
* 发送邮件服务器的主机名(smtp.163.com)
*/
private String host;
/**
* 发送邮件的用户名 ([email protected])
*/
private String userName;
/**
* 与用户名对应的密码(xxxxxx)
*/
private String pwd;
/**
* 创建一个新的实例 SendEmail.
*
* @param host 发送邮件服务器的主机名(smtp.163.com)
* @param userName 发送邮件的用户名([email protected])
* @param pwd 与用户名对应的密码(xxxxxx)
* @throws MessagingException
*/
public SendEmail(String host, String userName, String pwd) throws MessagingException {
Properties proTemp = new Properties();
// 设置发送邮件的邮件服务器的属性
proTemp.put("mail.smtp.host", host);
// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证
proTemp.put("mail.smtp.auth", "true");
// 通过proTemp属性对象获取Session实例
session = Session.getDefaultInstance(proTemp);
// 通过session对象获取Message实例
message = new MimeMessage(session);
// 通过session对象获取Message实例
transport = session.getTransport("smtp");
this.host = host;
this.userName = userName;
this.pwd = pwd;
}
public void send(String from, String address, String subject, String txt) throws AddressException {
this.send(from, new String[]{address}, subject, txt);
}
public void send(String from, String[] addressesStr, String subject, String txt) throws AddressException{
Address[] addresses = new Address[addressesStr.length];
for(int i = 0; i < addressesStr.length;i++){
addresses[i] = new InternetAddress(addressesStr[i]);
}
this.send(new InternetAddress(from), addresses, subject, txt);
}
public void send(Address from, Address[] addresses, String subject, String txt) {
try {
message.setFrom(from);
// 用于设置邮件的接收者。有两个参数,第一个参数是接收者的类型,第二个参数是接收者。
// 接收者类型可以是Message.RecipientType.TO,Message.RecipientType.CC和Message.RecipientType.BCC。
// TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人。接收者与发送者一样,通常使用InternetAddress的对象。
message.addRecipients(Message.RecipientType.TO, addresses);
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(txt);
multipart.addBodyPart(contentPart);
message.setContent(multipart);
message.saveChanges();
// 链接
transport.connect(host, userName, pwd);
// 发送
transport.sendMessage(message, message.getAllRecipients());
// 关闭
transport.close();
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
}
public void modifyUser(String userName, String pwd){
this.userName = userName;
this.pwd = pwd;
}
public Transport getTransport() {
return transport;
}
public String getUserName() {
return userName;
}
public String getPwd() {
return pwd;
}
}
测试代码
package sendEmail;
import javax.mail.MessagingException;
public class SendEmailTest {
public static void main(String[] args) throws MessagingException {
SendEmail sendEmail = new SendEmail("smtp.163.com", "[email protected]", "xxxxxx");
sendEmail.send("[email protected]", new String[]{"[email protected]","[email protected]"}, "还没有收到了么!", "这才是测试邮件!");
sendEmail.modifyUser("[email protected]", "xxxxxxxxx");
sendEmail.send("[email protected]", new String[]{"[email protected]","[email protected]"}, "还没有收到了么!", "这才是测试邮件!");
}
}