java--邮件发送
1、什么是授权码?
授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。
2、怎么获取授权码?
先进入设置-》帐户页面找到入口,按照以下流程操作。
(1)点击“开启”
(2)验证密保
(3)获取授权码
3、引入依赖的jia包
在第三方客户端的密码框里面输入16位授权码进行验证。
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
4、定义邮件发送模板
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; }
5、发送邮件工具类(单独线程)
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); //1、创建定义整个应用程序所需的环境信息的 Session 对象 Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码 return new PasswordAuthentication(emailFrom, authKey); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 // session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect(smtpHost, emailFrom, authKey); //4、创建邮件 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); } } }
6、编写测试类
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); }