`
strongant
  • 浏览: 66649 次
  • 性别: Icon_minigender_1
  • 来自: IT
社区版块
存档分类
最新评论

Spring 邮件发送详细配置

 
阅读更多

1. 引入所需要jar包:activation.jarcommons-logging.jarmail.jarspring相关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整合邮件发送并保存历史发送邮箱 项目描述 项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件...

    Spring邮件发送源码

    首先,让我们来了解如何配置Spring邮件服务。在Spring的配置文件(如`applicationContext.xml`)中,我们需要定义一个`JavaMailSender` bean。这个bean通常会包含SMTP服务器的信息,如主机名、端口号、用户名和密码...

    Spring邮件发送

    接下来,配置Spring邮件发送的相关属性。这些属性包括SMTP服务器地址、端口、用户名、密码等。可以创建一个名为`mail.properties`的配置文件,并在其中定义这些参数。然后在Spring的配置类中加载这些属性: ```java...

    spring各种邮件发送

    在"spring各种邮件发送"这个主题中,我们将探讨Spring框架如何帮助开发者实现电子邮件的发送。邮件服务在许多应用场景中都十分常见,例如用户注册确认、密码重置提醒等。 首先,Spring框架提供了`JavaMailSender`...

    Spring邮件发送服务(java邮件发送)

    下面将详细阐述Spring邮件发送服务的核心概念和技术细节。 首先,我们需要配置SpringMail的相关设置。这通常通过一个XML配置文件完成,例如`springmail_config.xml`。在这个文件中,我们定义了邮件服务器的相关属性...

    java发送邮件 spring发送邮件

    接下来,配置Spring的邮件发送服务。这通常在应用的配置文件(如`application.properties`或`application.yml`)中完成,设置SMTP服务器的属性,包括主机名、端口、用户名、密码等: ```properties # application....

    java 发送邮件 spring发送邮件Mail

    接下来,我们可以创建一个服务类来处理邮件发送的具体逻辑,使用`JavaMailSender`发送邮件: ```java @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void ...

    struts2+spring3.0+mybatis3.0.4集成的邮件发送实例(可上传附件)

    本实例将详细讲解如何在这三个框架基础上实现一个邮件发送功能,同时支持附件上传。对于Java开发者来说,理解和掌握这个集成过程将有助于提升在实际项目中的应用能力。 首先,Struts2作为MVC框架,主要负责控制层的...

    spring发送邮件demo

    这通常通过添加`spring-context-support`依赖来完成,该依赖包含了处理邮件发送所需的类。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context-...

    struts spring 实现简单的邮件发送

    这个项目"struts spring 实现简单的邮件发送"旨在展示如何整合这两个框架来完成邮件发送的功能。 首先,Struts是Apache组织的一个开源项目,它提供了一种模型驱动的方式来构建动态Web应用程序。Struts框架通过控制...

    spring集成邮件服务

    通常,它会包含一个邮件发送服务类,该类注入`JavaMailSender`,并提供一个方法来创建并发送邮件。例如: ```java @Service public class MailService { @Autowired private JavaMailSender mailSender; public ...

    Spring mvc 发送邮件功能

    在Spring MVC框架中,实现邮件发送功能通常涉及配置Spring的JavaMailSender接口和使用模板引擎如FreeMarker来创建动态邮件内容。以下是一个详细的步骤指南: 1. **依赖库**: - `javax.mail`:这是Java邮件API的...

    spring中邮件及定时任务

    关于压缩包中的文件"spring_扩展_邮件及定时任务_2",它很可能包含了示例代码或者配置文件,用于演示如何在Spring项目中实现邮件发送和定时任务。这些文件可能包括了Java源代码、XML配置文件或者YAML配置文件,你...

    Spring邮件发送实例

    以下是对Spring邮件发送实例的详细讲解。 首先,我们需要在项目中引入Spring Mail的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.springframework.boot ...

    spring定时发送邮件

    实现这一功能,你需要在Spring配置文件中定义一个`TaskScheduler`或`ThreadPoolTaskScheduler`,然后创建一个实现了`Runnable`接口的任务类,最后在任务类中定义你的邮件发送逻辑。 接下来,我们来看Spring Mail。...

    spring邮件服务(java邮件发送)

    总的来说,Spring邮件服务提供了一种便捷的方式,让我们能够轻松地在Java应用中集成邮件发送功能。通过配置文件设置邮件服务器信息,然后通过工具类调用相应的API,我们可以实现复杂邮件的发送,包括多附件、多收件...

    spring JavaMailSenderImpl 发送邮件 java

    JavaMailSender接口是Spring提供的邮件发送API,它定义了一系列方法来配置和发送电子邮件。JavaMailSenderImpl是这个接口的默认实现,它利用JavaMail API来发送邮件。在实际应用中,我们通常需要通过配置文件或编程...

    spring mail通过代理发送邮件

    Spring Mail作为Java中常用的邮件发送工具,帮助开发者方便地集成邮件服务到他们的应用中。 压缩包中的“javaMain通过代理发送邮件.docx”文件很可能是提供了一个详细的实例或者教程,包含了如何在Java主程序中配置...

Global site tag (gtag.js) - Google Analytics