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

使用Spring JavaMail 定时发送邮件

阅读更多

包括: 一个配置文件, 一个继承了java.util.TimerTask 的类:TimerMail.java

一 . 配置文件中使用了两个类(还可以使用更多的 类,如:org.springframework.mail.MailMessage 邮件模板.
    1. org.springframework.scheduling.timer.TimerFactoryBean
2. org.springframework.scheduling.timer.ScheduledTimerTask

<beans>
<bean id="springSendMail" class="com.yidwo.app.springMail.SpringSendMail">
   <property name="mailSender">
    <ref bean="mailSender" />
   </property>
</bean>

    <!-- 定时任务 -->
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
   <property name="scheduledTimerTasks">
    <list>
     <ref bean="springTimerTask" />
    </list>
   </property>
</bean>
<bean id="springTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
   <property name="timerTask">
    <ref bean="springSendMail" />
   </property>
   <property name="delay">
    <value>10000</value>
   </property>
   <property name="period">
    <value>3600000</value> <!-- 区间要定在一小时 3600000-->
   </property>
</bean>

    <!-- 邮件发送模板 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
   <property name="host" value="smtp解析地址" />
   <property name="port" value="25" />
   <property name="username" value="username" />
   <property name="password" value="password" />
   <!-- 如果要使用用户名和密码验证,这一步需要 -->
   <property name="javaMailProperties">
          <props>   
              <prop key="mail.smtp.auth">true</prop>
          </props>
        </property>
       
</bean>
</beans>

 

实现的类代码如下:

package com.yidwo.app.springMail;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimerTask;
import java.util.Locale;
import java.io.ByteArrayOutputStream;

import java.io.OutputStreamWriter;
import java.io.Writer;

import org.apache.log4j.Logger;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.MimeMessageHelper;


import freemarker.template.Template;
import freemarker.template.Configuration;


/**
* 报表邮件发送类
*
* @author Yinghe Lai
*
*/
public class SpringSendMail extends TimerTask {

private static final Logger logger = Logger.getLogger(SpringSendMail.class);
public SpringSendMail() {}

private JavaMailSenderImpl mailSender;

public JavaMailSenderImpl getMailSender() {
   return mailSender;
}

public void setMailSender(JavaMailSenderImpl mailSender) {
   this.mailSender = mailSender;
}


public void run() {
  
   this.doEmail();
}
  

// 进行发送处理
private void doEmail() {
  
   MimeMessage mimeMessage = mailSender.createMimeMessage();
   try {
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true,"utf-8");

    helper.setTo("接收邮箱");   // 设置接收邮箱 邮箱必须符合邮箱格式

// 设置发送方信息,邮箱必须符合邮箱格式
    helper.setFrom("置发送邮箱", "发送人别名");

    helper.setSubject("设置标题");    // 设置标题
   
    // list 为其它程序传入, 用于动态填充模板.
    String fmStr = this.doFreemarkerMail(this.doFreemarkerMail(List list));
    helper.setText("这是您设置接收的报表邮件,请查收.",fmStr);

    mailSender.send(mimeMessage);
    helper = null;
    System.out.println("*** The required mail has been successfully sended ***");
              
   } catch (Exception e) {
    logger.debug("sendException: "+e.getMessage());
    e.printStackTrace();
   }
}
  

// 构造freemarker动态邮件

// 只要由其它方法传入一个List结构的数据就可.返回邮件内容
private String doFreemarkerMail(List list) throws Exception{
  
   Map maplist = new HashMap();
        maplist.put("mapList", list);
       
   Configuration freemarker_cfg = new Configuration();
   freemarker_cfg.setEncoding(Locale.getDefault(), "utf-8");      
  
   // 查找并加载freemarker模板文件.
     freemarker_cfg.setClassForTemplateLoading(this.getClass(), "
\\com\\yidwo\\app\\springMail");
   Template freetemplate = freemarker_cfg.getTemplate("mailTemplate.ftl");
  
   ByteArrayOutputStream bos = new ByteArrayOutputStream();
        Writer out = new OutputStreamWriter(bos);     
        freetemplate.process(mapList, out);       
       
        String content = bos.toString();
        out.close();
        return content;
}

// 返回List 用于动态更新模板文件
private List returnList(){
    List list = new ArrayList();
    return list;
}

 

 

邮件开发中的异常:

1. javax.mail.MessagingException: Could not connect to SMTP host: www.d1888.com, port: 25, response: -1
   都是配置host时出错.要不没有此host的.要不服务解析时没有对应到邮件服务器.

2. org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException

   是邮箱用户名或密码出错导致.

3. com.sun.mail.smtp.SMTPSendFailedException: 503 input error.

   是setFrom时设置的邮箱出错,这里的设置要符合邮箱格式.(
user@websit.com).

分享到:
评论

相关推荐

    spring+quartz+javamail定时发送邮件

    本项目“spring+quartz+javamail定时发送邮件”结合了Spring框架、Quartz调度器以及JavaMail API,构建了一个能够定时发送邮件的系统。以下将详细介绍这三个关键组件及其整合方式。 首先,Spring框架是一个广泛使用...

    在spring利用javamail,quartz定时发送邮件

    本文将详细探讨如何在Spring环境中,利用JavaMail和Quartz库实现定时发送邮件的功能。 #### JavaMail简介 JavaMail API是一个允许Java应用程序读取和发送邮件的工具包。它提供了与不同邮件协议(如SMTP、POP3和...

    如何用javamail定时发送邮件.docx

    要实现定时发送邮件,我们可以结合 JavaMail 与 Java 的定时任务框架,如 Timer 和 TimerTask,或者使用更现代的 Quartz Scheduler 或 Spring Scheduler。在这个场景中,我们将主要探讨如何使用 Java 计时器框架来...

    spring定时发送邮件

    在这个项目中,可能会包含Spring Task的配置文件、邮件服务的配置、以及实现定时发送邮件的具体Java类。通过分析和运行这些文件,我们可以更深入地理解和学习如何在实际应用中利用Spring实现定时发送邮件的功能。 ...

    手把手教你 ,spring定时发送邮件

    本教程将聚焦于Spring的一个实用特性——定时任务,特别是如何利用Spring集成JavaMailSender来实现定时发送邮件。我们将探讨以下知识点: 1. **Spring定时任务(Scheduled Tasks)** Spring通过`@Scheduled`注解和`...

    spring-boot使用quartz框架定时发送邮件

    至此,我们就完成了在Spring Boot中使用Quartz框架定时发送邮件并生成报表的任务。这个过程中,我们利用Quartz的Cron表达式来定义任务的执行时间,通过Spring的邮件服务发送邮件,以及通过自定义的业务服务(如`...

    mvc定时发邮件

    本项目“mvc定时发邮件”利用SpringMVC、MyBatis和Quartz框架,结合JavaMail API,实现了定时向指定邮箱发送邮件的功能。以下是对这个项目涉及的关键技术点的详细说明: 1. **SpringMVC**:SpringMVC是Spring框架的...

    springboot 定时发送邮件

    本项目是关于使用Spring Boot实现定时发送邮件的功能,这对于自动化通知、日志报告或者定期执行任务等场景非常实用。 首先,我们关注的是"定时"这一概念,这涉及到Spring Boot中的定时任务调度器——`@Scheduled`。...

    spring发送邮件demo

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

    利用Spring定时发送email

    在Spring框架中,定时任务是通过Spring Task模块实现的,它可以让我们轻松地配置和执行定时任务,例如定时发送电子邮件。这个"利用Spring定时发送email"的项目,包含了完整的jar包并经过测试,确保了功能的可行性。...

    如何用java实现邮件方式每天发送消息

    在Java编程环境中,使用Spring Boot框架来实现每天定时发送邮件是一项常见的需求。Spring Boot以其便捷的配置和强大的功能,使得创建此类应用变得简单。本文将详细介绍如何利用Spring Boot结合Spring Task(Spring的...

    JavaMail邮件的上传和下载

    对于更复杂的场景,例如处理邮件模板、定时发送邮件等,开发者可以结合其他库,如Apache Commons Email或Spring框架的Email模块。 总的来说,JavaMail是Java开发中处理邮件功能的重要库,提供了全面的邮件操作功能...

    Spring邮件发送源码

    Spring框架在Java应用开发中扮演着重要角色,尤其在处理各种集成任务时,如数据库操作、定时任务以及我们的关注点——邮件发送。Spring提供了一套完整的邮件服务支持,通过其`org.springframework.mail`包,我们可以...

    SSM框架+Javamail发送邮件.docx

    或者在系统后台,可以定时发送报告邮件等。这种方式提高了代码的可复用性和模块化。\n\n总的来说,结合SSM框架和JavaMail API,我们可以轻松地实现在Web应用中发送邮件的功能,无论是用于通知、验证还是其他业务需求...

    springboot发送邮件(含带附件的邮件,定时任务等功能)

    创建一个`ScheduledEmailService`类,实现定时发送邮件的功能: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public ...

    用spring框架技术发邮件.pdf

    以下是使用Spring发送邮件的关键知识点: 1. **配置邮件发送器**: - 首先,我们需要在Spring的配置文件中定义一个`MailSender`的bean。这里使用的是`JavaMailSenderImpl`实现,它负责实际的邮件发送工作。 - ...

    Spring Boot实现自动发送邮件

    本篇文章主要介绍了如何使用Spring Boot实现自动发送邮件,通过详细的示例代码,讲解了自动发送邮件的实现过程,并提供了有价值的参考信息。 首先,需要建立一个Spring Boot项目,并添加相关的依赖项,包括spring-...

    Spring实现邮件发送功能

    这篇文章将详细介绍如何使用Spring实现邮件发送功能,并提供了相关的配置和代码实现。 Spring 邮件发送功能实现 在实现邮件发送功能时,需要添加相关的Maven依赖,包括spring-context-support和javax.mail。其中,...

Global site tag (gtag.js) - Google Analytics