JavaMail概述
Java Mail是由SUN公司提供的专门针对邮件的API,主要Jar包:mail.jar、activation.jar。
发送邮件是很常用的功能,注册验证,找回密码,修改密码等等
JavaMail中的主要类
java mail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。
- Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。
- MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。
- Transport:用来发送邮件。它是发送器。
JavaMail使用步骤
第一步:获得Session对象
Session session=Session.getInstance(Properties,Authenticator);
调用Session的静态方法getInstance()需要传入两个参数
Properties参数:包含两个键值对
Properties pro=new Properties();
pro.setProperty("mail.host","smtp.qq.com");//邮箱主机
pro.setProperty("mail.smtp.auth","true");//设置验证
Authenticator参数:需要实现抽象方法
Authenticator authenticator=new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//用户名和方法
return new PasswordAuthentication("905379100","gzwdrfmmpzwubcde");
}
};
第二步:创建MimeMessage对象
//通过参入session对象,创建MimeMessage对象
MimeMessage message=new MimeMessage(session);
然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
- message.setFrom(new InternetAddress( 邮箱账号));//设置发信人
- message.addRecipients(RecipientType.TO, 邮箱账号);//设置多个收信人
- message.addRecipients(RecipientType.CC, 邮箱账号);//设置多个抄送
- message.addRecipients(RecipientType.BCC, 邮箱账号);//设置暗送
- message.setSubject(“这是一封测试邮件”);//设置主题(标题)
- msg.setContent(“当然是hello world!”, “text/plain;charset=utf-8”);//设置正文
第三步:发送邮件
Transport.send(message);
如果发送带附件的邮件需要设置邮件的内容为MimeMultiPart
//MimeMultipart对象就是一个集合,可以存放多部分内容
MimeMultipart multipart=new MimeMultipart();
MimeBodyPart part1=new MimeBodyPart();
part1.setContent("这是一份带有附件的测试邮件","text/html;charset=utf-8");
//添加主体部件
multipart.addBodyPart(part1);
MimeBodyPart part2=new MimeBodyPart();
part2.attachFile(new File("H:/Head First Java.docx"));
part2.setFileName("Head First Java.docx");
//添加主体部件
multipart.addBodyPart(part2);
//将多部分内容放入message对象
message.setContent(multipart);
完整测试代码
public class test {
/**
* 没有附件的邮件发送
*/
@Test
public void func2() throws MessagingException {
/**
* 得到session对象
* 1、设置Properties对象
* 2、设置Authenticator
* 3、得到session对象
*/
Properties pro=new Properties();
pro.setProperty("mail.host","smtp.qq.com");
pro.setProperty("mail.smtp.auth","true");
Authenticator authenticator=new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//用户名和方法,需要注意这里的用户名只需要邮箱@前面的部分
return new PasswordAuthentication(用户名,密码);
}
};
Session session=Session.getInstance(pro,authenticator);
//创建消息对象
MimeMessage message=new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress(邮箱账号));
//添加收件人
message.addRecipient(Message.RecipientType.TO,new InternetAddress("i_am_liuyang@163.com"));
//设置主题
message.setSubject("测试邮件");
//设置邮件内容和编码
message.setContent("这是一封测试邮件","text/html;charset=utf-8");
//发送邮件
Transport.send(message);
}
/**
* 发送带附件的邮件
*/
@Test
public void func3() throws MessagingException, IOException {
/**
* 得到session对象
* 1、设置Properties对象
* 2、设置Authenticator
* 3、得到session对象
*/
Properties pro=new Properties();
pro.setProperty("mail.host","smtp.qq.com");
pro.setProperty("mail.smtp.auth","true");
Authenticator authenticator=new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//用户名和方法
return new PasswordAuthentication("905379100","gzwdrfmmpzwubcde");
}
};
Session session=Session.getInstance(pro,authenticator);
//创建消息对象
MimeMessage message=new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress("905379100@qq.com"));
//添加收件人
message.addRecipient(Message.RecipientType.TO,new InternetAddress("i_am_liuyang@163.com"));
//设置主题
message.setSubject("测试邮件");
//MimeMultipart对象就是一个集合,可以存放多部分内容
MimeMultipart multipart=new MimeMultipart();
MimeBodyPart part1=new MimeBodyPart();
part1.setContent("这是一份带有附件的测试邮件","text/html;charset=utf-8");
//添加主体部件
multipart.addBodyPart(part1);
MimeBodyPart part2=new MimeBodyPart();
part2.attachFile(new File("H:/Head First Java.docx"));
part2.setFileName("Head First Java.docx");
//添加主体部件
multipart.addBodyPart(part2);
//将多部分内容放入message对象
message.setContent(multipart);
//发送邮件
Transport.send(message);
}
}