Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text。 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象。 要获得关于邮件异常层次的更丰富的信息,请参考Javadocs。
为了使用JavaMail中的一些特色, 比如MIME类型的信件, Spring提供了MailSender的一个子接口, 即org.springframework.mail.javamail.JavaMailSender。Spring还提供了一个回调接口org.springframework.mail.javamail.MimeMessagePreparator, 用于准备JavaMail的MIME信件。
这里简单的介绍了如何使用spring发送各种形式的邮件以及配置。
一,Spring配置发送邮件
1,配置邮件发送信息
#sys.mail.protocol=smtp sys.mail.transport.protocol=smtp sys.mail.host=smtp.exmail.qq.com sys.mail.sysEmailAddress=***@***.com sys.mail.password=*** sys.mail.debug=true sys.mail.smtp.auth=true sys.mail.smtp.timeout=25000 sys.mail.smtp.port=465 sys.mail.smtp.ssl.enable=true sys.mail.toSet=****,***,***
2,spring配置信息
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 邮件发票配置 --> <util:properties id="mailProp" location="classpath:config/mail.properties"/> <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean" id="configProperties"> <property name="locations"> <list> <value>classpath:config/mail.properties</value> </list> </property> </bean> <!-- 邮件发送 --> <bean class="org.springframework.mail.javamail.JavaMailSenderImpl" id="mailSender"> <property name="host" value="#{mailProp['sys.mail.host']}"></property> <property name="username" value="#{mailProp['sys.mail.sysEmailAddress']}"></property> <property name="password" value="#{mailProp['sys.mail.password']}"></property> <property name="protocol" value="#{mailProp['sys.mail.transport.protocol']}"></property> <property name="defaultEncoding" value="UTF-8"></property> <property name="javaMailProperties"> <props> <prop key="mail.debug">#{mailProp['sys.mail.debug']}</prop> <prop key="mail.smtp.auth">#{mailProp['sys.mail.smtp.auth']}</prop> <prop key="mail.smtp.timeout">#{mailProp['sys.mail.smtp.timeout']}</prop> <prop key="mail.smtp.port">#{mailProp['sys.mail.smtp.port']}</prop> <prop key="mail.smtp.ssl.enable">#{mailProp['sys.mail.smtp.ssl.enable']}</prop> <prop key="mail.transport.protocol">#{mailProp['sys.mail.transport.protocol']}</prop> </props> </property> </bean> </beans>
3,注入发送配置信息
4,发送邮件
/** * 发送邮件 */ public void sendMail(JavaMailSender mailSender, String from, Set<String> set, String subject, String content, Boolean isHtml, Boolean isAttachment, Map<String, File> attachments) throws Exception { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, isAttachment); //添加发送者 helper.setFrom(from); // Set<String> toSet = simpleEmail.getToSet(); //添加接收者 helper.setTo(set.toArray(new String[set.size()])); //添加主题 helper.setSubject(subject); //添加正文 helper.setText(content, isHtml); //添加附件 if (isAttachment && attachments != null) { for (Map.Entry<String, File> attach : attachments.entrySet()) { helper.addAttachment(attach.getKey(), attach.getValue()); } } JavaMailSenderImpl javaMailSender = (JavaMailSenderImpl) mailSender;
///避开认证问题 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); javaMailSender.getJavaMailProperties().put("mail.smtp.ssl.socketFactory", sf); javaMailSender.send(message); // 发送 }
二,javaMail发送工具类
package com.ehaoyao.jobcenter.order.utils; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Date; import java.util.Properties; /** * com.ehaoyao.utils * 发送邮件工具类 * * @author PF * @create 2017-10-12 17:34 **/ public class EmailUtil { public static void sendMail(String fromMail, String user, String password, String toMail, String mailTitle, String mailContent) throws Exception { Properties props = new Properties(); // 开启debug调试 props.setProperty("mail.debug", "true"); // 发送服务器需要身份验证 props.setProperty("mail.smtp.auth", "true"); // 设置邮件服务器主机名 props.setProperty("mail.host", "smtp.qq.com"); // 发送邮件协议名称 props.setProperty("mail.transport.protocol", "smtp"); MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); Session session = Session.getInstance(props); Message msg = new MimeMessage(session); msg.setSubject(mailTitle); msg.setText(mailContent); msg.setFrom(new InternetAddress(fromMail)); Transport transport = session.getTransport(); transport.connect("smtp.exmail.qq.com", fromMail, password); transport.sendMessage(msg, new Address[]{new InternetAddress(toMail)}); transport.close(); } public static void main(String[] args) throws Exception { EmailUtil.sendMail("***@***.com","ces","***","***@qq.com","测试","测试"); } }