java邮件框架_Spring框架JavaMailSender发送邮件工具类详解

本文详细介绍了如何使用Spring框架的JavaMailSender工具类发送邮件,包括发送普通文本、添加附件、发送HTML邮件及群发邮件的实现方法,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例为大家分享了Spring框架JavaMailSender发送邮件工具类,供大家参考,具体内容如下

需要用到的jar包:

8cac37c6d55821becbe85f84266e0000.png

下面是发送工具类代码:

package com.test.email;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import org.springframework.mail.javamail.MimeMessageHelper;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Properties;

/**

* @author tlimited

* @create 2017-08-17 11:38

**/

public class SendMailUtils {

// Spring的邮件工具类,实现了MailSender和JavaMailSender接口

private JavaMailSenderImpl mailSender;

/**

* 初始化邮件发送数据

* @param host 服务器

* @param username 发送人

* @param passwd 发送人密码

*/

public void setInitData(String host,String username,String passwd){

//创建邮件发送服务器

mailSender = new JavaMailSenderImpl();

mailSender.setHost(host);

// mailSender.setPort(465);

mailSender.setUsername(username);

mailSender.setPassword(passwd);

//加认证机制

Properties javaMailProperties = new Properties();

javaMailProperties.put("mail.smtp.auth", true);

javaMailProperties.put("mail.smtp.starttls.enable", true);

javaMailProperties.put("mail.smtp.timeout", 5000);

mailSender.setJavaMailProperties(javaMailProperties);

System.out.println("初始化邮件发送信息完成");

}

/**

* 发送普通文本

* @param email 对方邮箱地址

* @param subject 主题

* @param text 邮件内容

*/

public void simpleMailSend(String email,String subject,String text) {

//创建邮件内容

SimpleMailMessage message=new SimpleMailMessage();

message.setFrom(mailSender.getUsername());

message.setTo(email);

message.setSubject(subject);

message.setText(text);

//发送邮件

mailSender.send(message);

System.out.println("发送成功");

}

/**

* 发送附件,支持多附件

* //使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容

//MimeMessages为复杂邮件模板,支持文本、附件、html、图片等。

* @param email 对方邮箱

* @param subject 主题

* @param text 内容

* @param paths 附件路径,和文件名

* @throws MessagingException

*/

public void attachedSend(String email,String subject,String text,Map paths) throws MessagingException {

MimeMessage message = mailSender.createMimeMessage();

//创建MimeMessageHelper对象,处理MimeMessage的辅助类

MimeMessageHelper helper = new MimeMessageHelper(message, true);

//使用辅助类MimeMessage设定参数

helper.setFrom(mailSender.getUsername());

helper.setTo(email);

helper.setSubject(subject);

helper.setText(text);

if (paths!=null){

paths.forEach((k,v)->{

//加载文件资源,作为附件

FileSystemResource file = new FileSystemResource(v);

try {

//添加附件

helper.addAttachment(k, file);

} catch (Exception e) {

e.printStackTrace();

}

});

}

//发送邮件

mailSender.send(message);

System.out.println("发送成功");

}

/**

* 发送html文件,支持多图片

* @param email 对方邮箱

* @param subject 主题

* @param text 内容

* @param paths 富文本中添加用到的路径,一般是图片,或者css,js文件

* @throws MessagingException

*/

public void richContentSend(String email,String subject,String text,Map paths) throws MessagingException {

MimeMessage message = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(message, true);

helper.setFrom(mailSender.getUsername());

helper.setTo(email);

helper.setSubject(subject);

//第二个参数true,表示text的内容为html,然后注意标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,

//需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件

helper.setText(text,true);

//文件地址相对应src目录

// ClassPathResource file = new ClassPathResource("logo.png");

if (paths!=null){

paths.forEach((k,v)->{

//文件地址对应系统目录

FileSystemResource file = new FileSystemResource(v);

try {

helper.addInline(k, file);

} catch (Exception e) {

e.printStackTrace();

}

});

}

mailSender.send(message);

System.out.println("发送成功");

}

/**

* 群发多人,且多附件

* @param mailto 多人邮件地址

* @param subject 主题

* @param text 内容

* @param filePath 文件路径

* @throws Exception

*/

public void sendBatchMailWithFile(String[] emails, String subject, String text, String[] filePath) throws Exception {

MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");

messageHelper.setFrom(new InternetAddress(MimeUtility.encodeText(mailSender.getUsername())));

messageHelper.setSubject(subject);

if (filePath != null) {

BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象

mdp.setContent(text, "text/html;charset=UTF-8");// 给BodyPart对象设置内容和格式/编码方式

Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对象

mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)

// 把mm作为消息对象的内容

MimeBodyPart filePart;

FileDataSource filedatasource;

// 逐个加入附件

for (int j = 0; j < filePath.length; j++) {

filePart = new MimeBodyPart();

filedatasource = new FileDataSource(filePath[j]);

filePart.setDataHandler(new DataHandler(filedatasource));

try {

filePart.setFileName(MimeUtility.encodeText(filedatasource.getName()));

} catch (Exception e) {

e.printStackTrace();

}

mm.addBodyPart(filePart);

}

mimeMessage.setContent(mm);

} else {

messageHelper.setText(text, true);

}

List list = new ArrayList();// 不能使用string类型的类型,这样只能发送一个收件人

for (int i = 0; i < emails.length; i++) {

list.add(new InternetAddress(emails[i]));

}

InternetAddress[] address = list.toArray(new InternetAddress[list.size()]);

mimeMessage.setRecipients(Message.RecipientType.TO, address);

mimeMessage = messageHelper.getMimeMessage();

mailSender.send(mimeMessage);

System.out.println("发送成功");

}

public static void main(String[] args) throws Exception

{

SendMailUtils test = new SendMailUtils();

//测试发送普通文本

// test.setInitData("smtp.qq.com","706548532@qq.com","123456");

test.setInitData("smtp.163.com","1234@163.com","1234");

test.simpleMailSend("1326624701@qq.com","测试","测试能不能发邮件!!!");

//测试发送附件

/* test.setInitData("smtp.163.com","1234@163.com","1234");

Map map = new HashMap();

map.put("test12.xls", "D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls");

map.put("wsdl.rar", "D:\\wsdl.rar");

test.attachedSend("706548532@qq.com","Hello Attachment","This is a mail with attachment",map);

*/

//测试发送富文本(html文件)

/* test.setInitData("smtp.163.com","1234@163.com","1234");

String text = "

Hello Html Email

";

Map map = new HashMap();

map.put("file", "E:\\1f7827.jpg");

test.richContentSend("706548532@qq.com","邮件标题",text,map);*/

//测试群发多人多附件

test.setInitData("smtp.163.com","1234@163.com","1234");

String [] address = {"706548532@qq.com","1326624701@qq.com"};

String [] filePath = {"D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls", "D:\\wsdl.rar"};

test.sendBatchMailWithFile(address, "群发多文件", "实时", filePath);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值