使用javamail发邮件。

javamail是java发邮件的常用工具。方便实用。

1、首先使用maven工程,需要引入对javamail的依赖,取个最新稳定版本:


	javax.mail
	mail
	1.4.5

2、构造一个Session。所谓Session,可以理解为对SMTP服务器的配置。如果发邮件的全部都是一个配置,这个是可以单例的。

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.163.com");//smtp服务器
props.put("mail.smtp.auth", "true");//是否需要用户名密码鉴权
props.put("mail.transport.protocol", "smtp");//协议名称
props.put("mail.smtp.socketFactory.port", 25); //服务器端口
props.put("mail.smtp.starttls.enable", "true"); //如果是ssl端口,需要加这个属性。

//创建Session。这个取一次就好了,
Session session = Session.getInstance(props, new Authenticator() //如果你只有一个发送邮箱,在这里指定就好了,如果你有多个用户名密码,也可以在正式发邮件的时候指定。
{

	@Override
	protected PasswordAuthentication getPasswordAuthentication()
	{
		return new PasswordAuthentication("zhaoyan", "zhaoyanblog.com");//用户名和密码,
	}

});

3、获取一个连接发送邮件:

Transport transport = null;
try
{
	transport = session.getTransport("smtp");
	//这里是不能单例使用的,可以看Transport的实现类SMTPTransport,
	//有几个成员是:private MimeMessage message; private Address[] addresses; private SMTPOutputStream dataStream; 说明每次发邮件都会存这些东西的,这个类是线程不安全的。
	
	transport.connect();
	//如果session里没有指定用户名密码,这里可以使用transport.connect("username","password");
	
	MimeMessage message = createMessage();//构造邮件内容
	transport.sendMessage(message, new InternetAddress[]{new InternetAddress("zhaoyan@zhaoyanblog.com")});
	//如果你的message里指定了接收方,这里也可以写transport.sendMessage(message);
}
finally
{
	transport.close();
}

4、发送不同类型的短信

MimeMessage message = new MimeMessage();
//发送者:名称要编码一下
InternetAddress from = new InternetAddress(MimeUtility.encodeText("赵岩的博客") + "");
InternetAddress from = new InternetAddress("zhaoyan@zhaoyanblog.com","赵岩的博客","utf-8");
message.setFrom(from);

//接收者
message.setRecipient(Message.RecipientType.TO, new InternetAddress("zhaoyan@zhaoyanblog.com"));
//多个接收者
message.setRecipient(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("zhaoyan1@zhaoyanblog.com"),new InternetAddress("zhaoyan2@zhaoyanblog.com")});
//标题
message.setSubject("你好");

1、普通文本邮件

message.setText("欢迎看我的博客zhaoyanblog.com");

2、普通html邮件

message.setContent("

欢迎看我的博客 zhaoyanblog.com

", "text/html; charset=utf-8");

3、带附件的邮件

//html
MimeBodyPart contentBodyPart = new MimeBodyPart();
contentBodyPart.setContent("

欢迎到我的博客,zhaoyanblog.com

", "text/html; charset=utf-8"); //附件 MimeBodyPart logoMultiPart = new MimeBodyPart(); logoMultiPart.setDataHandler(new DataHandler(new FileDataSource("我的文档.doc")); //组合,可以加多个附近 MimeMultipart bodyMultipart = new MimeMultipart("mixed"); bodyMultipart.addBodyPart(contentBodyPart); bodyMultipart.addBodyPart(logoMultiPart); message.setContent(bodyMultipart);

4、html加图片的邮件 只要给图片附件加个id,然后在html部分引用

MimeBodyPart contentBodyPart = new MimeBodyPart();
contentBodyPart.setContent("", "text/html; charset=utf-8");

MimeBodyPart logoMultiPart = new MimeBodyPart();
logoMultiPart.setDataHandler(new DataHandler(new FileDataSource("logo.jpg")));
logoMultiPart.setContentID("logo.png");

MimeMultipart bodyMultipart = new MimeMultipart("mixed");
bodyMultipart.addBodyPart(contentBodyPart);
bodyMultipart.addBodyPart(logoMultiPart);
message.setContent(bodyMultipart);