1. 引入所需要jar包:activation.jar,commons-logging.jar,mail.jar,spring相关jar
2. Spring底层采用java mail进行集成,封装成统一API方便调用,Spring xml配置如下:
<?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:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:tool="http://www.springframework.org/schema/tool" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:websocket="http://www.springframework.org/schema/websocket" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- 申明JavaMailSenderImpl对象 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="defaultEncoding" value="UTF-8" /> <property name="host" value="smtp.exmail.qq.com" /> <property name="username" value="8673711@qq.com" /> <property name="password" value="xxxxxxxxx" /> <property name="javaMailProperties"> <props> <!-- 设置认证开关 --> <prop key="mail.smtp.auth">true</prop> <!-- 启动调试开关 --> <prop key="mail.debug">true</prop> <!-- 设置发送延时 --> <prop key="mail.smtp.timeout">0</prop> </props> </property> </bean> </beans>
3. 封装邮件发送接口
MailCriteria
import java.util.Date; public class MailCriteria { private String mailType;//邮件类型(文本邮件,或者带附件邮件) private String from; private String replyTo; private String[] to; private String[] cc; private String[] bcc; private Date sentDate; private String title; private String content; private String fileUrl; public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getReplyTo() { return replyTo; } public void setReplyTo(String replyTo) { this.replyTo = replyTo; } public String[] getTo() { return to; } public void setTo(String to){ this.to = new String[]{to}; } public void setTo(String[] to) { this.to = to; } public String[] getCc() { return cc; } public void setCc(String[] cc) { this.cc = cc; } public String[] getBcc() { return bcc; } public void setBcc(String[] bcc) { this.bcc = bcc; } public Date getSentDate() { return sentDate; } public void setSentDate(Date sentDate) { this.sentDate = sentDate; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getFileUrl() { return fileUrl; } public void setFileUrl(String fileUrl) { this.fileUrl = fileUrl; } public String getMailType() { return mailType; } public void setMailType(String mailType) { this.mailType = mailType; } }
IMailService
public interface IMailService { /** * 发送邮件 * 目前只支持:文本邮件, 以及带单个附件的文本(需要时候可以扩展成多个附件) * @param criteria * @throws Exception */ public void sendEmail(MailCriteria criteria) throws Exception; }
MailServiceImpl
import java.net.URL; import javax.mail.internet.MimeMessage; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamSource; import org.springframework.core.io.UrlResource; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; @Component public class MailServiceImpl implements IMailService{ private static Logger logger = Logger.getLogger(MailServiceImpl.class); @Autowired private JavaMailSenderImpl senderImpl; @Override public void sendEmail(MailCriteria criteria) throws Exception{ if (Constants.MAIL_TYPE_TEXT.equals(criteria.getMailType())) { sendTextEmail(criteria); } else if (Constants.MAIL_TYPE_FILE.equals(criteria.getMailType())) { sendFileEmail(criteria); } else { throw new Exception("不支持该邮件类型发送>>>"+criteria.getMailType()); } } /** * 发送简单的文本邮件 */ public void sendTextEmail(MailCriteria criteria) { try { SimpleMailMessage mailMessage = new SimpleMailMessage(); if (StringUtil.isEmpty(criteria.getFrom())) { mailMessage.setFrom(senderImpl.getUsername()); } else { mailMessage.setFrom(criteria.getFrom()); } mailMessage.setTo(criteria.getTo()); mailMessage.setSubject(criteria.getTitle()); mailMessage.setText(criteria.getContent()); // 发送邮件 senderImpl.send(mailMessage); logger.info("邮件发送成功.. "); } catch (Exception e) { e.printStackTrace(); } } /** * 发送简单的html邮件 */ public void sendHtmlEmail(MailCriteria criteria) { try { // 建立邮件消息,发送简单邮件和html邮件的区别 MimeMessage mailMessage = senderImpl.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage); // 设置收件人,寄件人 if (StringUtil.isEmpty(criteria.getFrom())) { mailMessage.setFrom(senderImpl.getUsername()); } else { mailMessage.setFrom(criteria.getFrom()); } messageHelper.setTo(criteria.getTo()); messageHelper.setSubject(criteria.getTitle()); // true 表示启动HTML格式的邮件 messageHelper.setText("<html><head></head><body><h1>"+criteria.getContent()+"</h1></body></html>",true); // 发送邮件 senderImpl.send(mailMessage); logger.info("邮件发送成功.."); } catch (Exception e) { e.printStackTrace(); } } /** * 发送嵌套图片的邮件(图片地址是采用URL方式) */ public void sendImageEmail(MailCriteria criteria) { try { //建立邮件消息,发送简单邮件和html邮件的区别 MimeMessage mailMessage = senderImpl.createMimeMessage(); //注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用, //multipart模式 MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true); //设置收件人,寄件人 if (StringUtil.isEmpty(criteria.getFrom())) { mailMessage.setFrom(senderImpl.getUsername()); } else { mailMessage.setFrom(criteria.getFrom()); } messageHelper.setTo(criteria.getTo()); messageHelper.setSubject(criteria.getTitle()); //true 表示启动HTML格式的邮件 messageHelper.setText("<html><head></head><body><h1>"+criteria.getContent()+"</h1><img src='cid:aaa'/></body></html>",true); //FileSystemResource img = new FileSystemResource(new File("g:/123.jpg")); InputStreamSource iss = new UrlResource(new URL(criteria.getFileUrl())); messageHelper.addInline("aaa",iss,"text/img"); //发送邮件 senderImpl.send(mailMessage); logger.info("邮件发送成功.."); } catch (Exception e) { logger.info(e); } } /** * 发送包含附件的邮件(附件的地址是采用URL方式) */ public void sendFileEmail(MailCriteria criteria) { InputStreamSource iss = null; try { //建立邮件消息,发送简单邮件和html邮件的区别 MimeMessage mailMessage = senderImpl.createMimeMessage(); //注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用, //multipart模式 为true时发送附件 可以设置html格式 MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8"); //设置收件人,寄件人 messageHelper.setTo(criteria.getTo()); if (StringUtil.isEmpty(criteria.getFrom())) { messageHelper.setFrom(senderImpl.getUsername()); } else { messageHelper.setFrom(criteria.getFrom()); } messageHelper.setSubject(criteria.getTitle()); //true 表示启动HTML格式的邮件 messageHelper.setText("<html><head></head><body><h1>"+criteria.getContent()+"</h1></body></html>",true); iss = new UrlResource(new URL(criteria.getFileUrl())); String prefix = criteria.getFileUrl().substring(criteria.getFileUrl().lastIndexOf(".")+1); //这里的方法调用和插入图片是不同的。 messageHelper.addAttachment("test."+prefix,iss); //发送邮件 senderImpl.send(mailMessage); logger.info("邮件发送成功.."); } catch (Exception e) { logger.info(e); } finally { try { iss.getInputStream().close(); } catch (Exception e) { logger.info(e); } } } }
4. 客户端调用
首先实例化对象:MailCriteria
其次实例化对象:MailServiceImpl
接着调用:sendEmail
相关推荐
Spring Boot整合邮件发送并保存历史发送邮箱 项目描述 项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件...
首先,让我们来了解如何配置Spring邮件服务。在Spring的配置文件(如`applicationContext.xml`)中,我们需要定义一个`JavaMailSender` bean。这个bean通常会包含SMTP服务器的信息,如主机名、端口号、用户名和密码...
接下来,配置Spring邮件发送的相关属性。这些属性包括SMTP服务器地址、端口、用户名、密码等。可以创建一个名为`mail.properties`的配置文件,并在其中定义这些参数。然后在Spring的配置类中加载这些属性: ```java...
在"spring各种邮件发送"这个主题中,我们将探讨Spring框架如何帮助开发者实现电子邮件的发送。邮件服务在许多应用场景中都十分常见,例如用户注册确认、密码重置提醒等。 首先,Spring框架提供了`JavaMailSender`...
下面将详细阐述Spring邮件发送服务的核心概念和技术细节。 首先,我们需要配置SpringMail的相关设置。这通常通过一个XML配置文件完成,例如`springmail_config.xml`。在这个文件中,我们定义了邮件服务器的相关属性...
接下来,配置Spring的邮件发送服务。这通常在应用的配置文件(如`application.properties`或`application.yml`)中完成,设置SMTP服务器的属性,包括主机名、端口、用户名、密码等: ```properties # application....
接下来,我们可以创建一个服务类来处理邮件发送的具体逻辑,使用`JavaMailSender`发送邮件: ```java @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void ...
本实例将详细讲解如何在这三个框架基础上实现一个邮件发送功能,同时支持附件上传。对于Java开发者来说,理解和掌握这个集成过程将有助于提升在实际项目中的应用能力。 首先,Struts2作为MVC框架,主要负责控制层的...
这通常通过添加`spring-context-support`依赖来完成,该依赖包含了处理邮件发送所需的类。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.springframework <artifactId>spring-context-...
这个项目"struts spring 实现简单的邮件发送"旨在展示如何整合这两个框架来完成邮件发送的功能。 首先,Struts是Apache组织的一个开源项目,它提供了一种模型驱动的方式来构建动态Web应用程序。Struts框架通过控制...
通常,它会包含一个邮件发送服务类,该类注入`JavaMailSender`,并提供一个方法来创建并发送邮件。例如: ```java @Service public class MailService { @Autowired private JavaMailSender mailSender; public ...
在Spring MVC框架中,实现邮件发送功能通常涉及配置Spring的JavaMailSender接口和使用模板引擎如FreeMarker来创建动态邮件内容。以下是一个详细的步骤指南: 1. **依赖库**: - `javax.mail`:这是Java邮件API的...
关于压缩包中的文件"spring_扩展_邮件及定时任务_2",它很可能包含了示例代码或者配置文件,用于演示如何在Spring项目中实现邮件发送和定时任务。这些文件可能包括了Java源代码、XML配置文件或者YAML配置文件,你...
以下是对Spring邮件发送实例的详细讲解。 首先,我们需要在项目中引入Spring Mail的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.springframework.boot ...
实现这一功能,你需要在Spring配置文件中定义一个`TaskScheduler`或`ThreadPoolTaskScheduler`,然后创建一个实现了`Runnable`接口的任务类,最后在任务类中定义你的邮件发送逻辑。 接下来,我们来看Spring Mail。...
总的来说,Spring邮件服务提供了一种便捷的方式,让我们能够轻松地在Java应用中集成邮件发送功能。通过配置文件设置邮件服务器信息,然后通过工具类调用相应的API,我们可以实现复杂邮件的发送,包括多附件、多收件...
JavaMailSender接口是Spring提供的邮件发送API,它定义了一系列方法来配置和发送电子邮件。JavaMailSenderImpl是这个接口的默认实现,它利用JavaMail API来发送邮件。在实际应用中,我们通常需要通过配置文件或编程...
Spring Mail作为Java中常用的邮件发送工具,帮助开发者方便地集成邮件服务到他们的应用中。 压缩包中的“javaMain通过代理发送邮件.docx”文件很可能是提供了一个详细的实例或者教程,包含了如何在Java主程序中配置...