用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();
}
}
}