java实现发送邮件功能(可以添加附件)

您所在的位置:网站首页 邮件附件怎么收藏 java实现发送邮件功能(可以添加附件)

java实现发送邮件功能(可以添加附件)

2024-06-28 18:44| 来源: 网络整理| 查看: 265

记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的。

目录 一、pom依赖1.maven项目2.SpringBoot项目 二、代码

类中只有两个方法: 1.第一个就是普通的发送文本内容邮件的方法。 2.第二个是能发送附件邮件的方法。如果还想实现更复杂的可以自行百度。

一、pom依赖 1.maven项目 com.sun.mail javax.mail 1.6.2 javax.activation activation 1.1.1

上述依赖项包含了JavaMail API和JavaBeans Activation Framework(JAF)。JavaMail API用于发送和接收电子邮件,而JAF用于处理邮件附件的类型和编码。

2.SpringBoot项目 org.springframework.boot spring-boot-starter-mail

要在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 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 = "" + "" + "第一个单元格" + "第二个单元格" + "" + ""

按上边这个content发送的邮件内容将展示为一个表格。

好了,有不同意见的欢迎留言哈~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3