用Java发送邮件,首先要获取授权码,这里使用qq邮箱发送邮件给自己,所以要获取qq邮箱的授权码。
首先添加maven依赖,
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version></dependency>
代码写法基本是固定的。
import java.security.Security;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import com.sun.net.ssl.internal.ssl.Provider;public class MailClient{public static void main(String[] args){try{//设置SSL连接、邮件环境Security.addProvider(new Provider());final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";//配置邮箱信息Properties props = System.getProperties();//邮件服务器props.setProperty("mail.smtp.host","smtp.qq.com");props.setProperty("mail.smtp.socketFactory.class",SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback","false");//邮件服务器端口props.setProperty("mail.smtp.port","465");props.setProperty("mail.smtp.socketFactory.port","465");//鉴权信息props.setProperty("mail.smtp.auth","true");//建立邮件会话Session session = Session.getDefaultInstance(props,new Authenticator(){//身份认证protected PasswordAuthentication getPasswordAuthentication(){//账户 授权码return new PasswordAuthentication("xxx@qq.com","xxxx");}});//建立邮件对象MimeMessage message = new MimeMessage(session);//设置邮件的发件人message.setFrom(new InternetAddress("xxxx@qq.com"));//设置邮件的收件人,可设置多个收件人用逗号隔开message.setRecipients(Message.RecipientType.TO,"xxxx@qq.com,xxx@163.com");//设置邮件的主题message.setSubject("通过javamail发出");//文本内容message.setContent("文本邮件测试","text/html;charset=UTF-8");message.saveChanges();//发送邮件Transport.send(message);}catch(Exception e){e.printStackTrace();}}}
下面的代码复用性更好
package com.youkeda.test.j3.c9;import com.sun.net.ssl.internal.ssl.Provider;import java.security.Security;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class Mail {private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";private static Properties props = null;// TODO:发件人信箱private static final String FROM_MAIL = "xxxx@qq.com";// TODO:发件人信箱安全key即授权码private static final String FROM_MAIL_KEY = "";// TODO:收件人信箱 可多个private static final String TO_MAIL = "xxx@163.com";/*** 在构造函数中初始化相关的参数。这是固定用法。*/public Mail() {// 设置SSL连接、邮件环境Security.addProvider(new Provider());props = System.getProperties();props.setProperty("mail.smtp.host", "smtp.qq.com");props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.port", "465");props.setProperty("mail.smtp.socketFactory.port", "465");props.setProperty("mail.smtp.auth", "true");}/*** 发送邮件* @param subject* @param content*/public void sendMail(String subject, String content) {try {// 建立邮件会话Session session = Session.getDefaultInstance(props, new Authenticator() {// 身份认证protected PasswordAuthentication getPasswordAuthentication() {// 账户 授权码return new PasswordAuthentication(FROM_MAIL, FROM_MAIL_KEY);}});// 建立邮件对象MimeMessage message = new MimeMessage(session);// 设置邮件的发件人、收件人、主题// 附带发件人名字message.setFrom(new InternetAddress(FROM_MAIL));message.setRecipients(Message.RecipientType.TO, TO_MAIL);message.setSubject(subject);// 文本部分message.setContent(content, "text/html;charset=UTF-8");message.saveChanges();// 发送邮件Transport.send(message);} catch (Exception e) {e.printStackTrace();}}}
