java开发遇到发送邮件的功能
一. 添加pom依赖
此处使用java自动的封装的依赖包,联网下载即可
<!-- 发送邮箱 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>
二.发送邮件工具类
直接创建即可
package com.jz.ask.common.email;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.*;
/**
* 邮件发送工具类
* @author ZhaoRenHui
* @since 2020-11-17
*/
public class DataEtlEmail {
/**
* 邮件发送方法
* @param myEmailNumber 发件人邮箱 (邮箱需开启SMTP服务)
* @param myEmailSMTPPassword SMTP服务唯一密码(开通时获取)
* @param emailSMTPHost SMTP 邮箱服务器 (例如: 网易163 smtp.163.com)
* @param receiveMailNumber 收件人邮箱
* @param sendName 发件人姓名
* @param title 邮件标题
* @param text 邮件正文
* @return map 成功/错误信息
*/
public static Map<String,Object> sendEmail(String myEmailNumber,String myEmailSMTPPassword,
String emailSMTPHost,String receiveMailNumber,
String sendName,String title,String text) {
Map<String, Object> map = new HashMap<String, Object>();
//前提 邮箱账号必须要开启 SMTP 服务
//发送邮箱
//设置一个发送帐号
String myEmailAccount = myEmailNumber;
String myEmailPassword = myEmailSMTPPassword;
String myEmailSMTPHost = emailSMTPHost; //网易126 SMTP smtp.126.com
//收件人
String receiveMailAccount = receiveMailNumber;
Properties props = new Properties(); // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.mime.address.strict", "false");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port","465"); // 设置端口, 默认为 25端口,阿里云服务器不支持25, 改为465, 25不使用ssl链接, 465使用ssl链接
props.put("mail.smtp.ssl.enable",true);
Session mimeSession = Session.getInstance(props); // 根据参数配置,创建会话对象(为了发送邮件准备的)
// 设置为debug模式, 可以查看详细的发送 log
mimeSession.setDebug(false);
try {
// 创建邮件对象
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(mimeSession);
// 发件人
message.setFrom(new InternetAddress(myEmailAccount, sendName, "UTF-8"));
// message.setFrom(new InternetAddress(myEmailAccount, currentUser.getPersonName(), "UTF-8")); //
// 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "用户", "UTF-8"));
// 邮件主题
message.setSubject(title, "UTF-8");
// Content: 邮件正文(可以使用html标签)
message.setContent(text, "text/html;charset=UTF-8");
// 设置发件时间
message.setSentDate(new Date());
// 保存设置
message.saveChanges();
Transport transport = mimeSession.getTransport();
transport.connect(myEmailAccount, myEmailPassword);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
map.put("code", 200);
map.put("message", "发送成功!");
} catch (Exception e) {
e.printStackTrace();
map.put("code", 500);
map.put("message", e.getMessage());
}
return map;
}
}
三. 使用
在你需要发送邮件的地方直接调用即可
SMTP服务在发件人邮箱开通即可, SMTP密码在开通时会返回
Map<String, Object> map = DataEtlEmail.sendEmail("发件人邮箱", "SMTP密码",
"SMTP邮箱服务器", "收件人邮箱", "发件人姓名", "邮件标题", "邮件正文");
if (map.get("code") == "200") { //发送成功
System.out.println(map.get("message"));
} else {
System.out.println(map.get("message"));
}