前些日子做项目的时候,使用了Java向用户发送QQ邮件,在这里做一些记录。
简述
1、要使用Java实现发送邮件,就要有Java提供的jar依赖包,这里只是最简单的发送文本邮件(至于带附件的、带图片的,博主也在学习中,请各位大侠参考其他博主的文章,这里暂不作介绍),只用到了两个jar包:activation.jar、mail.jar,分享下载地址:https://pan.baidu.com/s/1QjsXzcb5-u5adikJAsB2Iw
2、在发送之前,要将发件人邮箱的SMTP服务打开,腾讯默认是对用户关闭这一服务的。假如要使用你自己的QQ号作为发件人,打开你的QQ邮箱——设置——账户——POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,将POP3/SMTP、IMAP/SMTP两个选项打开,此时会弹出一个窗口,是一个16为的口令,一定要记住,最好是保存下来!!!因为在你调用这个服务实现发送邮件时,我们是需要提供这个口令的。
3、将第一步下载的jar包添加到项目中,然后撸一篇代码:
package BaseDaoImpl;
import org.apache.tomcat.util.net.openssl.ciphers.Authentication;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class EmailSend {
public void sendEmail(){
/**
* 第一步,确定连接
* 因为这一步骤涉及到的信息比较多,所以这里用Properties保存,在接下来使用的时候会很方便,直接在Properties环境下创建邮件
* */
Properties props=new Properties(); //记录邮箱的一些属性
props.put("mail.smtp.auth", "true"); //表示使用SMTP发送邮件,须经过身份验证
props.put("mail.smtp.host", "smtp.qq.com"); //此处填写SMTP服务器,我们是用QQ,所以写QQ邮箱的服务器
props.put("mail.smtp.port", "587"); //端口号,QQ邮箱提供了两个端口,随意选一个,此处用587
props.put("mail.user", "发件人@qq.com"); // 你的QQ账号,即发件人
props.put("mail.password", "****************"); // 此处的密码是腾讯提供的16位STMP口令
/**
* 第二步,验证/获得权限
* 构建授权信息,用于SMTP身份验证
* */
Authenticator authenticator = new Authenticator() {
//返回一个PasswordAuthentication类型的对象
protected PasswordAuthentication getPasswordAuthentication() {
String userName = props.getProperty("mail.user");
String userPwd = props.getProperty("mail.password");
return new PasswordAuthentication(userName, userPwd); //将读取到的用户名和密码拿过来
}
};
/**
* 第三步,创建邮件
* 使用环境属性和授权信息,创建邮件会话
* */
Session mailSession = Session.getInstance(props, authenticator);
MimeMessage message = new MimeMessage(mailSession); //通过Session对象创建邮件消息
/**
* 第四步,设置发件人
* */
InternetAddress sendUser = null;
try {
sendUser = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(sendUser); //通过MimeMessage对象的setFrom()方法设置发件人,需要一个InternetAddress对象
} catch (MessagingException e) {
e.printStackTrace();
}
/**
* 第五步,设置收件人
* */
InternetAddress getUser = null;
try {
getUser = new InternetAddress("收件人@qq.com");
/* Address[] addresses=new Address[]{
new InternetAddress("收件人@qq.com")
};*/
//Address[] addresses=new Address[]{InternetAddress对象};
//Message.RecipientType.TO代表收件人
//Message.RecipientType.CC代表抄送
//Message.RecipientType.BCC代表暗送 用于群发的时候,不让别人看到其他的收件人
//第二个参数是收件人的地址,也可以是一个Address[]数组,用于群发的场景,群发用message.setRecipients(Message.RecipientType.TO, Address[])
message.setRecipient(Message.RecipientType.TO, getUser); //通过MimeMessage对象的setRecipient()方法设置收件人,需要一个InternetAddress对象
} catch (MessagingException e) {
e.printStackTrace();
}
/**
* 第六步,设置邮件标题和内容
* */
try {
// 设置邮件标题
message.setSubject("测试邮件");
// 设置邮件的内容体
message.setContent("通过Java发送QQ邮件", "text/html;charset=UTF-8");
/**
* 最后一步,发送邮件,需要一个邮件对象作为参数
* */
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
4、运行这篇代码,收到邮件,完成。