包括: 一个配置文件, 一个继承了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 API,构建了一个能够定时发送邮件的系统。以下将详细介绍这三个关键组件及其整合方式。 首先,Spring框架是一个广泛使用...
本文将详细探讨如何在Spring环境中,利用JavaMail和Quartz库实现定时发送邮件的功能。 #### JavaMail简介 JavaMail API是一个允许Java应用程序读取和发送邮件的工具包。它提供了与不同邮件协议(如SMTP、POP3和...
要实现定时发送邮件,我们可以结合 JavaMail 与 Java 的定时任务框架,如 Timer 和 TimerTask,或者使用更现代的 Quartz Scheduler 或 Spring Scheduler。在这个场景中,我们将主要探讨如何使用 Java 计时器框架来...
在这个项目中,可能会包含Spring Task的配置文件、邮件服务的配置、以及实现定时发送邮件的具体Java类。通过分析和运行这些文件,我们可以更深入地理解和学习如何在实际应用中利用Spring实现定时发送邮件的功能。 ...
本教程将聚焦于Spring的一个实用特性——定时任务,特别是如何利用Spring集成JavaMailSender来实现定时发送邮件。我们将探讨以下知识点: 1. **Spring定时任务(Scheduled Tasks)** Spring通过`@Scheduled`注解和`...
至此,我们就完成了在Spring Boot中使用Quartz框架定时发送邮件并生成报表的任务。这个过程中,我们利用Quartz的Cron表达式来定义任务的执行时间,通过Spring的邮件服务发送邮件,以及通过自定义的业务服务(如`...
本项目“mvc定时发邮件”利用SpringMVC、MyBatis和Quartz框架,结合JavaMail API,实现了定时向指定邮箱发送邮件的功能。以下是对这个项目涉及的关键技术点的详细说明: 1. **SpringMVC**:SpringMVC是Spring框架的...
本项目是关于使用Spring Boot实现定时发送邮件的功能,这对于自动化通知、日志报告或者定期执行任务等场景非常实用。 首先,我们关注的是"定时"这一概念,这涉及到Spring Boot中的定时任务调度器——`@Scheduled`。...
下面将详细介绍如何使用Spring发送邮件。 首先,我们需要在项目中引入Spring的邮件支持。这通常通过添加`spring-context-support`依赖来完成,该依赖包含了处理邮件发送所需的类。在Maven项目中,可以在pom.xml文件...
在Spring框架中,定时任务是通过Spring Task模块实现的,它可以让我们轻松地配置和执行定时任务,例如定时发送电子邮件。这个"利用Spring定时发送email"的项目,包含了完整的jar包并经过测试,确保了功能的可行性。...
在Java编程环境中,使用Spring Boot框架来实现每天定时发送邮件是一项常见的需求。Spring Boot以其便捷的配置和强大的功能,使得创建此类应用变得简单。本文将详细介绍如何利用Spring Boot结合Spring Task(Spring的...
对于更复杂的场景,例如处理邮件模板、定时发送邮件等,开发者可以结合其他库,如Apache Commons Email或Spring框架的Email模块。 总的来说,JavaMail是Java开发中处理邮件功能的重要库,提供了全面的邮件操作功能...
Spring框架在Java应用开发中扮演着重要角色,尤其在处理各种集成任务时,如数据库操作、定时任务以及我们的关注点——邮件发送。Spring提供了一套完整的邮件服务支持,通过其`org.springframework.mail`包,我们可以...
或者在系统后台,可以定时发送报告邮件等。这种方式提高了代码的可复用性和模块化。\n\n总的来说,结合SSM框架和JavaMail API,我们可以轻松地实现在Web应用中发送邮件的功能,无论是用于通知、验证还是其他业务需求...
创建一个`ScheduledEmailService`类,实现定时发送邮件的功能: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public ...
以下是使用Spring发送邮件的关键知识点: 1. **配置邮件发送器**: - 首先,我们需要在Spring的配置文件中定义一个`MailSender`的bean。这里使用的是`JavaMailSenderImpl`实现,它负责实际的邮件发送工作。 - ...
本篇文章主要介绍了如何使用Spring Boot实现自动发送邮件,通过详细的示例代码,讲解了自动发送邮件的实现过程,并提供了有价值的参考信息。 首先,需要建立一个Spring Boot项目,并添加相关的依赖项,包括spring-...
这篇文章将详细介绍如何使用Spring实现邮件发送功能,并提供了相关的配置和代码实现。 Spring 邮件发送功能实现 在实现邮件发送功能时,需要添加相关的Maven依赖,包括spring-context-support和javax.mail。其中,...