一、什么是受权码?
受权码是QQ邮箱推出的,用于登陆第三方客户端的专用密码。
适用于登陆如下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
舒适提醒:为了你的账户安全,更改QQ密码以及独立密码会触发受权码过时,须要从新获取新的受权码登陆。
二、怎么获取受权码?
先进入设置-》账户页面找到入口,按照如下流程操做。
(1)点击“开启”

(2)验证密保

(3)获取受权码

三、引入依赖的jia包
在第三方客户端的密码框里面输入16位受权码进行验证。
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
四、定义邮件发送模板
import lombok.Data; import java.io.Serializable; @Data public class EmailTemplate implements Serializable { //发件人 private String fromAddress; // 收件人(多个地址用逗号分隔) private String toAddress; // 抄送人(多个地址用逗号分隔) private String ccAddress; // 密送人(多个地址用逗号分隔) private String bccAddress; // 附件信息(暂不支持) // private List<EmailAttachment> attachments; // 邮件主题 private String subject; // 邮件的文本内容 private String content; }
五、发送邮件工具类(单独线程)
import com.demo.model.EmailTemplate; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class SendMail extends Thread { //用于给用户发送邮件的邮箱 private String emailFrom = "xxxxxx@qq.com"; //邮箱受权码(修改密码会致使受权码过时) private String authKey = "上面获取的16位受权码"; //发送邮件的服务器地址 private String smtpHost = "smtp.qq.com"; private EmailTemplate emailTemplate; public SendMail(EmailTemplate emailTemplate) { this.emailTemplate = emailTemplate; } //重写run方法的实现,在run方法中发送邮件给指定的用户 @Override public void run() { try { Properties prop = new Properties(); prop.setProperty("mail.smtp.host", smtpHost); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); // 关于QQ邮箱,还要设置SSL加密,加上如下代码便可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //一、建立定义整个应用程序所需的环境信息的 Session 对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、受权码 return new PasswordAuthentication(emailFrom, authKey); } }); //开启Session的debug模式,这样就能够查看到程序发送Email的运行状态 // session.setDebug(true); //二、经过session获得transport对象 Transport ts = session.getTransport(); //三、使用邮箱的用户名和受权码连上邮件服务器 ts.connect(smtpHost, emailFrom, authKey); //四、建立邮件 MimeMessage message = new MimeMessage(session); //发件人 message.setFrom(new InternetAddress(emailFrom)); //收件人 if (emailTemplate.getToAddress() != null) { message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailTemplate.getToAddress())); } //抄送人 if (emailTemplate.getCcAddress() != null) { message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(emailTemplate.getCcAddress())); } //密送人 if (emailTemplate.getBccAddress() != null) { message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(emailTemplate.getBccAddress())); } //邮件的标题 message.setSubject(emailTemplate.getSubject(),"UTF-8"); message.setContent(emailTemplate.getContent(), "text/html;charset=UTF-8"); message.saveChanges(); //发送邮件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); } catch (Exception e) { throw new RuntimeException(e); } } }
六、编写测试类
public static void main(String[] args) throws InterruptedException { EmailTemplate template=new EmailTemplate(); template.setToAddress("yyyy@163.com"); template.setSubject("邮件测试2"); template.setContent("详细信息:<a href='http://www.baidu.com'>http://www.baidu.com</a>"); SendMail sendMail=new SendMail(template); sendMail.start(); Thread.sleep(2000); }