记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的。
类中只有两个方法:1.第一个就是普通的发送文本内容邮件的方法。2.第二个是能发送附件邮件的方法。如果还想实现更复杂的可以自行百度。
一、pom依赖
1.maven项目
<dependencies>
<!-- JavaMail API -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<!-- JavaBeans Activation Framework (JAF) -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
上述依赖项包含了JavaMailAPI和JavaBeans Activation Framework(JAF)。JavaMail API用于发送和接收电子邮件,而JAF用于处理邮件附件的类型和编码。
2.SpringBoot项目
<dependencies>
<!-- Spring Boot Mail Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
要在Spring Boot项目中发送电子邮件,你可以使用Spring Boot提供的spring-boot-starter-mail依赖项。该依赖项集成了JavaMail API,并提供了更方便的配置和使用方式。上述依赖项将自动引入Spring Boot Mail Starter,并解决其所需的传递依赖关系。它包含了JavaMail API以及Spring Boot中发送电子邮件所需的其他组件。
二、代码
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;
public class MailUtil{
// 发件人邮箱的邮件服务器地址(SMTP)
// 必须准确,不同邮件服务器地址不同,QQ邮箱的 SMTP 服务器地址为: smtp.qq.com
public static String myEmailSMTPHost = "smtp.qq.com";
/**
* 发送纯文本邮件
*
* @param mailTitle 邮件主题
* @param content 邮件内容
* @param sendMail 发件人邮箱地址
* @param sendName 发件人姓名
* @param receiveMail 收件人
* @param sendMailPassword 发送人邮箱密码
* 某些邮箱服务器为了增加邮箱本身密码的安全性,给SMTP客户端设置了独立密码(有的邮箱称为“授权码”),
* 对于开启了独立密码的邮箱,这里的邮箱密码必需使用这个独立密码(授权码)。
*
* @return
* @throws Exception
*/
public static void sendEmail(String mailTitle, String content, String sendMail, String sendName,
String receiveMail, String sendMailPassword) throws Exception{
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "smtp");// 使用的协议
p.setProperty("mail.smtp.host", myEmailSMTPHost);
p.setProperty("mail.smtp.localhost", "localhost");// 不加的话在linux报错:501 syntax:ehlo hostname
p.setProperty("mail.smtp.auth", "true");// 需要请求认证
Session session = Session.getInstance(p);
//设置为debug模式,可以查看详细的发送log
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
//发件人
message.setFrom(new InternetAddress(sendMail, sendName, "UTF-8"));
//收件人
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, receiveMail, "UTF-8"));
//邮件主题
message.setSubject(mailTitle, "UTF-8");
//邮件正文
message.setContent(content, "text/html;charset=UTF-8");
//设置显示的发件时间
message.setSentDate(new Date());
//保存前面的设置
message.saveChanges();
//根据session获取邮件传输对象
Transport transport = session.getTransport();
//连接邮箱服务器
transport.connect(sendMail, sendMailPassword);
//发送邮件到所有的收件地址
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
//和上边方法基本相同,只不过可以添加附件发送邮件
public static void sendEmailWithFile(String mailTitle, String content, String sendMail, String sendName,
List<String> receiveMailList, String sendMailPassword) throws Exception{
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "smtp");
p.setProperty("mail.smtp.host", myEmailSMTPHost);
//p.setProperty("mail.smtp.localhost", "localhost");//不加的话在linux报错:501 syntax:ehlo hostname
p.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(p);
//设置为debug模式,可以查看详细的发送log
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
//发件人
message.setFrom(new InternetAddress(sendMail, sendName, "UTF-8"));
//收件人
for(String receiveAddress : receiveMailList){
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveAddress, receiveAddress, "UTF-8"));
}
//邮件主题
message.setSubject(mailTitle, "UTF-8");
//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
MimeMultipart multipart = new MimeMultipart();
//设置邮件的文本内容
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setContent(content, "text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);
//添加附件
MimeBodyPart filePart = new MimeBodyPart();
DataSource source = new FileDataSource("E:\file_path" + File.separator + "附件.xlsx");
//添加附件的内容
filePart.setDataHandler(new DataHandler(source));
//添加附件的标题
filePart.setFileName(MimeUtility.encodeText("附件.xlsx"));
multipart.addBodyPart(filePart);
multipart.setSubType("mixed");
//将multipart对象放到message中
message.setContent(multipart);
//设置显示的发件时间
message.setSentDate(new Date());
//保存前面的设置
message.saveChanges();
//根据session获取邮件传输对象
Transport transport = session.getTransport();
//连接邮箱服务器
transport.connect(sendMail, sendMailPassword);
//发送邮件到所有的收件地址
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
另外,邮件的内容(content)也可以通过拼接html代码来发送文本内容格式是表格的邮件,如下:
content = "<html><head><head><body><table>" +
"<tr>" +
"<td>第一个单元格</td>" +
"<td>第二个单元格</td>" +
"</tr>" +
"</table></body></html>"
按上边这个content发送的邮件内容将展示为一个表格。
好了,有不同意见的欢迎留言哈~
出处:https://blog.csdn.net/sfh2018/article/details/104652557
原文始发于微信公众号(知识追寻者):java实现发送邮件附件功能
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/291573.html