Java 通过 JavaMail 发送邮件
环境介绍:
- Java 版本:1.8.0_191
- JavaMail 版本:1.6.2
一、配置邮箱
为了设置发件邮箱能有发送邮件权限,请先设置邮箱开启 POP3/SMPT/IMAP 等选项。
这里用的是 163 邮箱

二、Maven 引入包
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version></dependency>三、邮件实体类
邮件内容实体类,定义一些发送邮件的属性。
注意,为了简化实体类写法,这里使用了 lombok 工具。实体类
import lombok.Data;
@Datapublic class SimpleMail { private String[] to; private String[] cc; private String[] bcc; private String from; private String host; private String port; private String subject; private String body; private String[] attachment; private String username; private String password; private Boolean isHtml;}四、发送邮件工具类
发送邮件工具类,用词工具调用 JavaMail 发送邮件。
import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.*;import java.io.UnsupportedEncodingException;import java.util.*;
public class MailUtils {
/** * 发送邮件 * @param simpleMail */ public static void sendMail(SimpleMail simpleMail) { /** 获取系统属性 **/ Properties properties = System.getProperties(); /** 设置邮件服务器 **/ properties.setProperty("mail.smtp.host", simpleMail.getHost()); /** 设置邮件服务器端口 **/ properties.setProperty("mail.smtp.port", simpleMail.getPort()); /** 设置服务器验证为true **/ properties.put("mail.smtp.auth", "true"); /** 获取默认session对象 **/ Session session = Session.getDefaultInstance(properties, new Authenticator() { // 设置提供的发件邮箱与给的邮箱授权码 public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(simpleMail.getUsername(), simpleMail.getPassword()); } }); try { /** 创建默认的 MimeMessage 对象 **/ MimeMessage message = new MimeMessage(session); /** 设置发件人 **/ message.setFrom(new InternetAddress(simpleMail.getFrom())); /** 设置收件人、抄送、密送 **/ List<InternetAddress> toList = new ArrayList<>(); List<InternetAddress> ccList = new ArrayList<>(); List<InternetAddress> bccList = new ArrayList<>(); if (simpleMail.getTo() != null) { for (String str : simpleMail.getTo()) { toList.add(new InternetAddress(str)); } message.addRecipients(Message.RecipientType.TO, toList.toArray(new InternetAddress[]{})); } if (simpleMail.getCc() != null) { for (String str : simpleMail.getCc()) { toList.add(new InternetAddress(str)); } message.addRecipients(Message.RecipientType.CC, ccList.toArray(new InternetAddress[]{})); } if (simpleMail.getBcc() != null) { for (String str : simpleMail.getBcc()) { toList.add(new InternetAddress(str)); } message.addRecipients(Message.RecipientType.BCC, bccList.toArray(new InternetAddress[]{})); } // 设置标题Subject message.setSubject(simpleMail.getSubject()); //message.setText(simpleMail.getBody()); /** 创建消息部分 **/ // 创建消息体对象 BodyPart messageBodyPart = new MimeBodyPart(); // 创建多重消息对象 Multipart multipart = new MimeMultipart(); /** 设置消息 **/ //messageBodyPart.setText(simpleMail.getBody()); if (simpleMail.getIsHtml()) { messageBodyPart.setContent(simpleMail.getBody(), "text/html;charset=utf-8"); } else { messageBodyPart.setContent(simpleMail.getBody(), "text/plain;charset=utf-8"); } // 添加到 multipart multipart.addBodyPart(messageBodyPart); /** 设置附件 **/ if (simpleMail.getAttachment()!=null){ for (String str:simpleMail.getAttachment()){ messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(str); messageBodyPart.setDataHandler(new DataHandler(source)); // 设置文件名 System.out.println(str); messageBodyPart.setFileName(MimeUtility.encodeText(str.substring(str.lastIndexOf("/")+1))); // 添加到 multipart multipart.addBodyPart(messageBodyPart); } } /** 设置消息内容与附件 **/ message.setContent(multipart); /** 发送消息 **/ Transport.send(message); System.out.println("发送成功!"); } catch (MessagingException | UnsupportedEncodingException mex) { mex.printStackTrace(); } }
}五、测试的 Main 方法
先编写自定义的实体对象,将邮件内容、收件人、发件人等等定义好,在用此实体对象当参数调用邮件发送工具类发送邮件。
public static void main(String[] args) { /** 1、设置发送邮件内容对象 **/ SimpleMail simpleMail = new SimpleMail(); // 指定发送邮件的服务器地址 simpleMail.setHost("smtp.163.com"); // 指定发送邮件服务器的端口 simpleMail.setPort("25"); // 收件人电子邮箱 simpleMail.setTo(new String[]{"32******7@qq.com", "mydlq.club@gmail.com"}); // 收件人抄送 simpleMail.setCc(new String[]{"123456789@qq.com"}); // 收件人密送 simpleMail.setTo(new String[]{"111111111@qq.com"}); // 发件人电子邮箱 simpleMail.setFrom("m*******lq@163.com"); // 邮件主题 simpleMail.setSubject("测试邮件"); // 邮件内容 //simpleMail.setBody("这是一封测试邮件"); simpleMail.setBody("<html>" + "<p>主题:测试</p>" + "<p>结果:签到人数:xxx</p>" + "</html>"); // 是否为 HTML 格式邮件 simpleMail.setIsHtml(true); // 邮件附件 simpleMail.setAttachment(new String[]{"d://非签到表.xlsx", "d://签到表.xlsx"}); // 设置发件邮箱的用户名、验证码 simpleMail.setUsername("m******lq@163.com"); simpleMail.setPassword("a*******0");
/** 2、调用方法发送邮件 **/ // 发送邮件测试 sendMail(simpleMail); }六、查看收到的邮件效果
上面代码执行成功后邮箱就会收到一条邮件信息,如下:

---END---
如果本文对你有帮助,可以关注我的公众号 "小豆丁技术栈" 了解最新动态,顺便也请帮忙 Github 点颗星哦,感谢~
