java 发送邮件的几种方式
java 发送邮件的几种方式| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |
| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 16261702| java 发送邮件的几种方式| 2022-05-12T11:21:00| | BlogPost|
一、java mail发送邮件:
1.pom.xml
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>
2.代码
2.1email实体类
@Data
public class EmailDto {
private String serverName;
private String port;
private String userName;
private String password;
private String senderName;
private String emailAddress;
private String subject;
private String to;
private String cC;
private String content;
@Override
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String toString() {
</span><span style="color: #0000ff;">return</span> JSONObject.toJSONString(<span style="color: #0000ff;">this</span><span style="color: #000000;">);
}
}
2.2邮件发送
public class MailUtils {
/**
* 发送邮件
* @param emailDto email配置信息
* @param filePath 本地附件地址
*/
public static void sendMail(EmailDto emailDto, JSONArray filePath) {
Transport transport = null;
try {
Properties prop = new Properties();
prop.setProperty("mail.host", emailDto.getServerName()); //邮箱发送
prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码
//1、创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//传入发件人的姓名和授权码
return new PasswordAuthentication(emailDto.getUserName(), emailDto.getPassword());
}
});
//2、通过session获取transport对象
transport = session.getTransport();
//3、通过transport对象邮箱用户名和授权码连接邮箱服务器
transport.connect(emailDto.getServerName(), emailDto.getUserName(), emailDto.getPassword());
//4、创建邮件,传入session对象
MimeMessage mimeMessage = getMimeMessage(session, emailDto, filePath);
//5、发送邮件
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (transport != null) {
try {
transport.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
* 组装发送信息
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> session session
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> emailDto 邮件配置信息
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> filesPath 本地地址
* </span><span style="color: #808080;">@return</span><span style="color: #008000;"> MimeMessage
* </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> Exception Exception
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> MimeMessage getMimeMessage(Session session, EmailDto emailDto, JSONArray filesPath) <span style="color: #0000ff;">throws</span><span style="color: #000000;"> Exception {
</span><span style="color: #008000;">//</span><span style="color: #008000;">消息的固定信息</span>
MimeMessage mimeMessage = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MimeMessage(session);
</span><span style="color: #008000;">//</span><span style="color: #008000;">发件人</span>
mimeMessage.setFrom(<span style="color: #0000ff;">new</span><span style="color: #000000;"> InternetAddress(emailDto.getEmailAddress()));
</span><span style="color: #008000;">//</span><span style="color: #008000;">收件人</span>
<span style="color: #0000ff;">if</span><span style="color: #000000;"> (StringUtils.isNotBlank(emailDto.getTo())) {
String[] tos </span>= emailDto.getTo().split(","<span style="color: #000000;">);
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String to : tos) {
mimeMessage.setRecipient(Message.RecipientType.TO, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> InternetAddress(to));
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">抄送人</span>
<span style="color: #0000ff;">if</span><span style="color: #000000;"> (StringUtils.isNotBlank(emailDto.getCC())) {
String[] ccs </span>= emailDto.getTo().split(","<span style="color: #000000;">);
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String cc : ccs) {
mimeMessage.setRecipient(Message.RecipientType.CC, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> InternetAddress(cc));
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">邮件标题</span>
mimeMessage.setSubject(emailDto.getSubject());
MimeMultipart multipart = new MimeMultipart();
//附件
for (Object pathObj : filesPath) {
MimeBodyPart attachPart = new MimeBodyPart();
File file = new File((String) pathObj);
attachPart.setDataHandler(new DataHandler(new FileDataSource(file)));
//避免中文乱码的处理
attachPart.setFileName(MimeUtility.encodeWord(file.getName()));
multipart.addBodyPart(attachPart);//附件
}
//正文
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setContent(emailDto.getContent(), "text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
multipart.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed
//放到Message消息中
mimeMessage.setContent(multipart);
mimeMessage.saveChanges();//保存修改
return mimeMessage;
}
}
二、spring自带的邮件发送器发送邮件
1.pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
2.代码
/**
* 创建邮件发送器
*
* @param emailDto 邮件配置信息
* @return 发送器
*/
private static JavaMailSenderImpl createMailSender(EmailDto emailDto) {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost(emailDto.getServerName());
sender.setPort(Integer.parseInt(emailDto.getPort()));
sender.setUsername(emailDto.getUserName());
sender.setPassword(emailDto.getPassword());
sender.setDefaultEncoding("Utf-8");
Properties p = new Properties();
p.setProperty("mail.smtp.timeout", "25000");
p.setProperty("mail.smtp.auth", "false");
sender.setJavaMailProperties(p);
return sender;
}
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
* 发送邮件
*
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> emailDto emailDto
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> files files(由于附件是服务接收的,故我这里用MultipartFile)
* </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> MessagingException
* </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> UnsupportedEncodingException 自定义异常,可忽略
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> sendMail(EmailDto emailDto, MultipartFile... files) <span style="color: #0000ff;">throws</span><span style="color: #000000;"> MessagingException, UnsupportedEncodingException {
</span><span style="color: #0000ff;">long</span> startTime =<span style="color: #000000;"> System.currentTimeMillis();
JavaMailSenderImpl mailSender </span>=<span style="color: #000000;"> createMailSender(emailDto);
MimeMessage mimeMessage </span>=<span style="color: #000000;"> mailSender.createMimeMessage();
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 设置utf-8或GBK编码,否则邮件会有乱码</span>
MimeMessageHelper messageHelper = <span style="color: #0000ff;">new</span> MimeMessageHelper(mimeMessage, <span style="color: #0000ff;">true</span>, "UTF-8"<span style="color: #000000;">);
messageHelper.setFrom(emailDto.getEmailAddress(), emailDto.getSenderName());
messageHelper.setTo(emailDto.getTo().split(</span>","<span style="color: #000000;">));
messageHelper.setSubject(emailDto.getSubject());
messageHelper.setText(emailDto.getContent(), </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (StringUtils.isNotBlank(emailDto.getCC())) {
messageHelper.setCc(emailDto.getCC().split(</span>","<span style="color: #000000;">));
}
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (MultipartFile file : files) {
</span><span style="color: #0000ff;">if</span> (!file.isEmpty() && file.getOriginalFilename() != <span style="color: #0000ff;">null</span><span style="color: #000000;">) {
messageHelper.addAttachment(file.getOriginalFilename(), file);
}
}
mailSender.send(mimeMessage);
log.info(</span>"邮件发送耗时:" + (System.currentTimeMillis() - startTime) / 1000.0<span style="color: #000000;">);
}</span></pre>
三、使用Apache commons-email发送html邮件
1.pom.xml
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.5</version> </dependency>
2.代码
import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import java.util.List;/**
@className: MailUtil.java
@description: 邮件工具类
*/
public class MailUtil {/**
构建器
*/
public static class EmailInfo {/**
- SMTP 服务器 端口
*/
private String mailServer;
private Integer mailPort;/**
- 发件人 账号
*/
private String mailNick;/**
- 发件人 账号
*/
private String mailUsername;/**
- 发件人 密码
*/
private String mailPassword;/**
- 邮件标题
*/
private String title;/**
- 邮件内容
*/
private String content;/**
- 收件人
*/
private List<String> receivers;boolean ssl;
public EmailInfo(String mailServer,Integer mailPort,String mailNick,String mailUsername,
String mailPassword,String title,String content,List<String> receivers,boolean ssl) {
this.mailServer = mailServer;
this.mailPort = mailPort;
this.mailNick = mailNick;
this.mailUsername = mailUsername;
this.mailPassword = mailPassword;
this.title = title;
this.content = content;
this.receivers = receivers;
this.ssl = ssl;
}public MailUtil send() throws Exception {
return new MailUtil(this);
}
}private MailUtil(EmailInfo emailInfo) throws Exception {
HtmlEmail email = new HtmlEmail();
// 通过Server 发送邮件
email.setHostName(emailInfo.mailServer);
email.setSmtpPort(emailInfo.mailPort);
//设定smtp服务器的认证资料信息
email.setAuthentication(emailInfo.mailUsername, emailInfo.mailPassword);
email.setStartTLSEnabled(false);
email.setSSLOnConnect(emailInfo.ssl);
try {
// 设定发件人
email.setFrom(emailInfo.mailUsername,emailInfo.mailNick);
// 设定收件人 (多人)
int size = emailInfo.receivers.size();
email.addTo(emailInfo.receivers.toArray(new String[size]));
// 设定内容的语言集
email.setCharset("UTF-8");
email.setDebug(false);
// 设定主题
email.setSubject(emailInfo.title);
// 设定邮件内容
email.setHtmlMsg(emailInfo.content);
// 发送邮件
email.send();
System.out.println("邮件发送成功!");
} catch (EmailException e) {
System.out.println("邮件发送失败!");
throw new Exception(e);
}
}
}
| 648658| | 2022-05-12T11:21:00| false| | 2022-05-12T11:21:22.517| true| 一、java mail发送邮件:1.pom.xml <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> 2.代码| Anonymous|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!