`
jerryqiu007
  • 浏览: 230948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring发送邮件-java发送email

    博客分类:
  • JAVA
阅读更多

最近碰到好多新手问我发送email的问题,特此整理代码如下,以供参考,不妥之处还请指出。

以我的工程为例,需以下准备工作:

1.spring2.5.jar

2.activation.jar

3.velocity-1.6.jar

4.mail-1.4.2.jar

 

接下来就是写代码了。

1.封装邮件发送器

package com.haixu.platform.pub;

import java.util.Map;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.VelocityException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.velocity.VelocityEngineUtils;

/**
 * 邮件发送器
 */
public class MailUtil {

    protected final Log log = LogFactory.getLog(getClass());
    
    private JavaMailSender javaMailSender;
    private VelocityEngine velocityEngine;
    private String from;
    private String title;
    private String encoding;
    private String templateLocation;
    private String[] toEmails;
    private Map<String,String> model;

    public boolean send(){
        try {
			MimeMessage msg = javaMailSender.createMimeMessage();
			MimeMessageHelper message = new MimeMessageHelper(msg, true, "UTF-8");
            message.setFrom(from);
            message.setSubject(title);
            message.setTo(toEmails);
			message.setText(getMessage(), true); // 如果发的不是html内容去掉true参数
//			message.addInline("myLogo",new ClassPathResource("img/mylogo.gif"));
//			message.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf"));
			javaMailSender.send(msg);
            
        } catch (MessagingException e) {
        	e.printStackTrace();
            if(log.isWarnEnabled()) {
                log.warn("邮件信息导常! 邮件标题为: "+title);
            }
            return false;
        } catch (MailException me) {
        	me.printStackTrace();
            if(log.isWarnEnabled()) {
                log.warn("发送邮件失败! 邮件标题为: "+title);
            }
            return false;
        }
        return true;    
    }
    
    
    /**
     * 邮件模板中得到信息
     * @return 返回特发送的内容
     */
    private String getMessage() {
        try {
			return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateLocation, encoding, model);
		} catch (VelocityException e) {
			e.printStackTrace();
			log.error("邮件模板读取失败!邮件标题为: "+title);
		}
		return "";
    }

    private String[] createToEmail(String to) {
        return new String[] {to};
    }
    
    public void setToEmail(String to) {
        setToEmails(createToEmail(to));
    }
    
    public void setJavaMailSender(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }
    
    public void setVelocityEngine(VelocityEngine velocityEngine) {
        this.velocityEngine = velocityEngine;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public void setModel(Map<String,String> model) {
        this.model = model;
    }

    public void setTemplateLocation(String templateLocation) {
        this.templateLocation = templateLocation;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setToEmails(String[] toEmails) {
        this.toEmails = toEmails;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTemplateLocation() {
        return templateLocation;
    }
}

 

 

2.spring配置文件,applictionContext-mail.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

	<!-- 属性文件加载 -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<!-- <value>classpath:mail.properties</value> -->
				<value>/WEB-INF/properties/mail.properties</value>
			</list>
		</property>
	</bean>

	<!-- 邮件发送器 -->
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="host" value="${mail.host}" />
		<property name="username" value="${mail.username}" />
		<property name="password" value="${mail.password}" />
		<property name="defaultEncoding" value="UTF-8"></property>
		<property name="javaMailProperties">
			<props>
				<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
				<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
			</props>
		</property>
	</bean>

	<bean id="velocityEngine"
		class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
		<property name="resourceLoaderPath" value="classpath:velocity"></property>
	</bean>

	<bean id="templateMail" class="com.haixu.platform.pub.MailUtil">
		<property name="javaMailSender" ref="mailSender"></property>
		<property name="from" value="${mail.from}"></property>
		<property name="encoding" value="UTF-8"></property>
		<property name="templateLocation" value="hello.vm"></property>
		<property name="velocityEngine" ref="velocityEngine"></property>
		<property name="title" value="www.cpuele.com"></property>
	</bean>

</beans>

 说明:模板文件放到classpath的velocity目录下,可自行改。

3.发送者邮件信息,mail.properties(WEB-INF下):

mail.from=yourname@gmail.com
mail.host=smtp.gmail.com
mail.password=yourpassword
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.username=yourname

 

4.模板文件,hello.vm(classpath的velocity目录下):

${username},您好,欢迎来到恒特电器

 

5.测试Demo

MailUtil mailUtil = (MailUtil) SpringToolListener.getApplicationContext().getBean("templateMail");
Map<String, String> data = new HashMap<String, String>();
data.put("username", "村长");
mailUtil.setTemplateLocation("hello.vm");
mailUtil.setModel(data);
mailUtil.setToEmail("hengte@cpuele.com");
mailUtil.setTitle("mail with veloctiy and spring");
mailUtil.send();

 

注意:SpringToolListener是我自己的工具类,可将上述代码替换为MailUtil mailUtil = (MailUtil) context.getBean("templateMail");

 

tomcat下测试成功。  

分享到:
评论
23 楼 zongshoujin 2012-07-18  
com.sun.mail.smtp.SMTPSendFailedException: 550 Invalid User  发送不成功啊!一直包这个错!请教了!本人qq:492805861,谢谢!
22 楼 zongshoujin 2012-07-18  
class path resource [WEB-INF/mail.properties] cannot be opened because it does not exist
总是提示说文件找不到的,但是实际上WEB-INF下面是有的啊!什么情况??????
21 楼 簡單從泚銷夨 2011-06-23  
wangyu1221 写道
收邮件被标题编码搞死了,各种编码,各种不编码,几乎做不到通用

同感...就不知道邮件客服端是怎么实现的。
20 楼 wangyu1221 2011-06-23  
收邮件被标题编码搞死了,各种编码,各种不编码,几乎做不到通用
19 楼 簡單從泚銷夨 2011-06-23  
bitray 写道
发送不是什么玩意,麻烦的是接收

是的,我以前写过用jmail接收邮件,不是那么好用。
18 楼 Ayin2767 2011-06-23  
参考使用了,谢谢!
17 楼 sanz 2010-09-10  
请问下,如果采用这种方式进行群发,收件人地址中有不存在的邮箱,会抛MailSendException,导致所有人都无法收到邮件,有什么解决办法?
16 楼 bitray 2010-08-30  
jerryqiu007 写道
bitray 写道
发送不是什么玩意,麻烦的是接收

不过javamail一般的应用只做发送服务呵呵



请教下,接收一般采用什么呢?这两天被这个接收弄的太闹心,发送已经开发完了
15 楼 程序新手 2010-08-30  
jerryqiu007 写道

activation.jar 加入到classpath中

   几个jar包都放在lib文件夹下面,包括您说的activation.jar
14 楼 jerryqiu007 2010-08-29  
程序新手 写道

配置下,发现出现了无法初始化类异常
    追踪到Spring源码发现可以找到这个类,而且在Spring配置中的参数也都有 ,表示疑惑
    
     求楼主和配置通过的朋友解答。谢谢


activation.jar 加入到classpath中
13 楼 程序新手 2010-08-29  

配置下,发现出现了无法初始化类异常
    追踪到Spring源码发现可以找到这个类,而且在Spring配置中的参数也都有 ,表示疑惑
    
     求楼主和配置通过的朋友解答。谢谢
12 楼 jerryqiu007 2010-08-29  
tsxm 写道
请问发送图片怎么办?

MimeMessageHelper 提供发送附件的接口addAttachment
11 楼 jerryqiu007 2010-08-29  
bitray 写道
发送不是什么玩意,麻烦的是接收

不过javamail一般的应用只做发送服务呵呵
10 楼 bitray 2010-08-26  
发送不是什么玩意,麻烦的是接收
9 楼 BestUpon 2010-08-25  
使用Apache Common email 很容易,几乎不需要什么配置!
8 楼 suxiaofei 2010-08-25  
不错,对新人很有用。
7 楼 mengzhaopeng 2010-08-25  
好东西,学习了,谢谢分享
6 楼 testfor1 2010-08-25  
写的挺好,就是不支持附件。
5 楼 sunjun 2010-08-25  
可以使用apache 的common email ,也很方便的
4 楼 tsxm 2010-08-25  
请问发送图片怎么办?

相关推荐

    java发送邮件 spring发送邮件

    通过以上步骤,你就可以在Java应用中使用Spring发送邮件了。当然,实际的邮件发送可能更复杂,涉及HTML内容、附件、多部分消息等,可以使用`MimeMessage`和`MimeMessageHelper`类来构建复杂的邮件结构。例如,添加...

    java 发送邮件 spring发送邮件Mail

    Spring框架提供了一种优雅的方式来处理这个任务,它整合了JavaMailSender接口和JavaMail API,使得在Java应用程序中发送邮件变得更加简单。让我们深入探讨这个主题。 首先,JavaMail API是Java用来处理邮件收发的...

    自定义 SpringBoot-Starter email-spring-boot-starter.zip

    通过集成这个库,"email-spring-boot-starter"使Spring Boot应用能够轻松发送邮件。 在使用这个starter时,首先需要在项目的pom.xml或build.gradle文件中引入依赖。对于Maven项目,可以在dependencies节点下添加...

    Java发送email:spring email、微软ews

    EWS是一种基于SOAP协议的API,用于与Microsoft Exchange Server交互,包括发送邮件。如果你的应用需要与Exchange服务器集成,EWS是个不错的选择。使用EWS,你需要添加ews-java-api库到`pom.xml`: ```xml ...

    spring-boot-邮件发送

    - 在需要发送邮件的地方调用邮件发送服务,传入邮件信息对象,即可完成邮件的发送。 ```java // 调用邮件发送服务 boolean result = emailSendService.send("receiver@example.com", "邮件主题", "邮件正文"); ...

    spring发送邮件demo

    下面将详细介绍如何使用Spring发送邮件。 首先,我们需要在项目中引入Spring的邮件支持。这通常通过添加`spring-context-support`依赖来完成,该依赖包含了处理邮件发送所需的类。在Maven项目中,可以在pom.xml文件...

    java发送邮件(两种方式-springcloud方式+静态调用方式).zip

    Java发送邮件是常见的系统集成需求,它涉及到网络通信、邮件协议和编程技术。在这个主题中,我们将探讨两种方法:一种是通过Spring Cloud实现,另一种是使用静态方法直接调用JavaMail API。这两种方法都有其独特的...

    spring JavaMailSenderImpl 发送邮件 java

    以下是一个简单的示例,展示了如何在Spring中使用JavaMailSenderImpl发送邮件: ```java @Autowired private JavaMailSender emailSender; public void sendEmail() { SimpleMailMessage message = new ...

    SpringBoot中整合Mail实现简单邮件发送示例代码

    通过这个示例,你可以了解到Spring Boot如何通过自动配置简化邮件服务的集成,以及如何使用JavaMailSender接口发送邮件。当然,实际应用中可能需要处理更复杂的邮件场景,例如发送HTML邮件、添加附件等,但这个基础...

    spring-boot-mail邮件发送服务 v1.0.zip

    有了JavaMailSender,我们就可以在业务逻辑中轻松发送邮件了。以下是一个简单的示例,展示如何发送一封纯文本邮件: ```java @Service public class MailService { @Autowired private JavaMailSender ...

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

    在Java开发中,Spring框架提供了一种方便的方式来发送电子邮件,这就是SpringMail模块。SpringMail使得在应用程序中集成邮件服务变得更加简单,它支持多种功能,包括发送带有多个附件、多接收者(包括抄送和暗送)的...

    spring+velocity发送邮件

    在本场景中,我们将利用Spring来管理JavaMail Sender对象,以便于发送邮件。 #### Velocity模板引擎 Velocity是一个基于Java的模板引擎,它允许开发者通过简单的模板语言来生成HTML网页、XML数据或者普通的文本。在...

    Spring进阶—如何用Java代码实现邮件发送

    使用Spring发送邮件的基本步骤如下: 1. 添加Spring核心库和相关的邮件发送库(如JavaMail API)到项目依赖中。 2. 在Spring配置文件(如`email-163.xml`)中配置邮件服务器的相关信息,如用户名、密码、SMTP服务器...

    spring-boot-email-tools:一组服务和工具,用于使用模板引擎在Spring Boot 1.5.x应用程序中发送电子邮件

    该项目依赖于无模板模块it.ozimov:spring-boot-email-core ,该模块提供了核心功能(例如,发送电子邮件,调度和确定优先级,持久性)。 由于它是无模板的,因此它不提供用于通过模板引擎生成电子邮件正文的服务的...

    java发送邮件,spring JavaMailSender 邮件,复制粘贴直接用!!2发送方式

    Java发送邮件是常见的系统集成需求,Spring框架中的JavaMailSender接口提供了一种便捷的方式来实现这一功能。本教程将详细介绍如何使用Spring MVC与JavaMailSender发送邮件,并提供两种发送方式。 首先,我们需要...

    Spring-Boot-Send-Email-with-AWS-SES:Spring Boot使用AWS SES发送电子邮件

    在本文中,我们将深入探讨如何使用Spring Boot框架与Amazon Simple Email Service (AWS SES)集成,以便在Java应用程序中实现电子邮件的发送功能。AWS SES是一种经济高效的电子邮件服务,它允许开发者发送大量邮件,...

    Spring整合Quartz定时发送邮件

    标题“Spring整合Quartz定时发送邮件”涉及到两个主要技术领域:Spring框架和Quartz调度库。这个场景的应用是使用Quartz来安排任务,而Spring则提供了集成环境和邮件服务支持。 首先,Quartz是一个开源的作业调度...

    spring各种邮件发送

    首先,Spring框架提供了`JavaMailSender`接口,它是发送邮件的核心接口。通过实现这个接口,我们可以配置SMTP服务器的相关参数,如主机地址、端口、用户名、密码等,来设置邮件发送的环境。`JavaMailSender`提供了...

    用spring发送邮件

    本教程将详细讲解如何使用Spring发送邮件,以及在遇到问题时如何排查。 首先,我们需要在Spring项目中引入邮件服务相关的依赖。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org.spring...

Global site tag (gtag.js) - Google Analytics