一、什麼是受權碼?
受權碼是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); }