spring+velocity+javamail发送模板邮件

有时候当我们注册完的时候系统会提示有一封邮件发送到了你的邮箱,如何做呢? 
就要用到spring+velocity+javamail这3个玩意,其实只用了spring,因为其他2个都被spring集成了。 
先看代码

package com.worthtech.app.util;

import java.io.File;
import java.util.Map;

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

import org.apache.velocity.app.VelocityEngine;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.velocity.VelocityEngineUtils;

public class MailSenderService {
    private JavaMailSender mailSender;//spring配置中定义
    private VelocityEngine velocityEngine;//spring配置中定义
    private SimpleMailMessage simpleMailMessage;//spring配置中定义
    private String from;
    private String to;
    private String subject;
    private String content;
    private String templateName;
    // 是否需要身份验证
    private boolean validate = false; 

    public JavaMailSender getMailSender() {
        return mailSender;
    }
    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }
    public VelocityEngine getVelocityEngine() {
        return velocityEngine;
    }
    public void setVelocityEngine(VelocityEngine velocityEngine) {
        this.velocityEngine = velocityEngine;
    }
    /**
     * 发送模板邮件
     *
     */
    public void sendWithTemplate(Map model){
        mailSender = this.getMailSender();
        simpleMailMessage.setTo(this.getTo()); //接收人
        simpleMailMessage.setFrom(simpleMailMessage.getFrom()); //发送人,从配置文件中取得
        simpleMailMessage.setSubject(this.getSubject());
        String result = null;
        try {
            result = VelocityEngineUtils.mergeTemplateIntoString(this.getVelocityEngine(), this.getTemplateName(), "UTF-8",model);
        } catch (Exception e) {}
        simpleMailMessage.setText(result);
        mailSender.send(simpleMailMessage);
    }
    /**
     * 发送普通文本邮件
     *
     */
    public void sendText(){
        mailSender = this.getMailSender();
        simpleMailMessage.setTo(this.getTo()); //接收人
        simpleMailMessage.setFrom(simpleMailMessage.getFrom()); //发送人,从配置文件中取得
        simpleMailMessage.setSubject(this.getSubject());
        simpleMailMessage.setText(this.getContent());
        mailSender.send(simpleMailMessage);
    }
    /**
     * 发送普通Html邮件
     *
     */
    public void sendHtml(){
        mailSender = this.getMailSender();
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
        try {
            messageHelper.setTo(this.getTo());
            messageHelper.setFrom(simpleMailMessage.getFrom());
            messageHelper.setSubject(this.getSubject());
            messageHelper.setText(this.getContent(),true);
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mailSender.send(mimeMessage);
    }
    /**
     * 发送普通带一张图片的Html邮件
     *
     */
    public void sendHtmlWithImage(String imagePath){
        mailSender = this.getMailSender();
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
            messageHelper.setTo(this.getTo());
            messageHelper.setFrom(simpleMailMessage.getFrom());
            messageHelper.setSubject(this.getSubject());
            messageHelper.setText(this.getContent(),true);
//            Content="<html><head></head><body><img src=\"cid:image\"/></body></html>";
            //图片必须这样子:<img src=‘cid:image‘/>
            FileSystemResource img = new FileSystemResource(new File(imagePath));
            messageHelper.addInline("image",img);
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mailSender.send(mimeMessage);
    }
    /**
     * 发送普通带附件的Html邮件
     *
     */
    public void sendHtmlWithAttachment(String filePath){
        mailSender = this.getMailSender();
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
            messageHelper.setTo(this.getTo());
            messageHelper.setFrom(simpleMailMessage.getFrom());
            messageHelper.setSubject(this.getSubject());
            messageHelper.setText(this.getContent(),true);
            FileSystemResource file = new FileSystemResource(new File(filePath));
//            System.out.println("file.getFilename==="+file.getFilename());
            messageHelper.addAttachment(file.getFilename(),file);
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mailSender.send(mimeMessage);
    }
    public String getFrom() {
        return from;
    }
    public void setFrom(String from) {
        this.from = from;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getTo() {
        return to;
    }
    public void setTo(String to) {
        this.to = to;
    }
    public String getTemplateName() {
        return templateName;
    }
    public void setTemplateName(String templateName) {
        this.templateName = templateName;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public boolean isValidate() {
        return validate;
    }
    public void setValidate(boolean validate) {
        this.validate = validate;
    }
    public SimpleMailMessage getSimpleMailMessage() {
        return simpleMailMessage;
    }
    public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
        this.simpleMailMessage = simpleMailMessage;
    }
}

上面这个类实际上是个发送邮件的工具类,我们只要设置好参数后调用想要的sendXXX()就可以了。如下:

//注册完马上发送邮件
MailSenderService mailSender=this.getMailsenderService();
mailSender.setTo(form.getEmail());
mailSender.setSubject("来自worthtech的邮件");
mailSender.setTemplateName("mail.vm");//设置的邮件模板
Map model=new HashMap();
model.put("username", form.getUserName());
String url=request.getRequestURL().toString();
url=url.substring(0, url.lastIndexOf("/"));
model.put("url", url);
model.put("email", "[email protected]");
mailSender.sendWithTemplate(model);
System.out.println("邮件发送成功!");

下面的是spring配置

<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>
                <!--
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.socketFactory.fallback">false</prop>
                -->
            </props>
        </property>
  </bean>
  <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage" singleton="false">
    <property name="from">
        <value>${mail.default.from}</value>
    </property>
  </bean>
  <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">
            <props>
                <prop key="resource.loader">class</prop>
                <prop key="class.resource.loader.class">
                    org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
                </prop>
                <prop key="velocimacro.library"></prop>
            </props>
        </property>
   </bean>
    <bean id="mailsenderService" class="com.worthtech.app.util.MailSenderService">
          <property name="mailSender" ref="mailSender" />
          <property name="simpleMailMessage" ref="simpleMailMessage" />
          <property name="velocityEngine" ref="velocityEngine" />
    </bean>

mail.vm内容如下:

亲爱的${username}

欢迎加入worthtech!

当您收到这封信的时候,您已经可以正常登录了。
请点击链接登录首页:${url}
如果您的email程序不支持链接点击,请将上面的地址拷贝至您的浏览器(如IE)的地址栏进入。

如果您还想申请管理员权限,可以联系管理员${email}

我们对您产生的不便,深表歉意。

希望您在worthtech度过快乐的时光!

-----------------------

(这是一封自动产生的email,请勿回复。)

mail.properties如下:

mail.host=218.000.000.234
mail.port=25
mail.username=[email protected]
mail.password=xxxxxxxx
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.default[email protected]
时间: 2024-08-05 15:21:03

spring+velocity+javamail发送模板邮件的相关文章

使用Spring整合javaMail发用邮件

1.导入javamail.jar        自行百度下载 2.使用模板发送邮件架包 freemarker.jar 3.Spring配置文件  以及架包这里就不需要说了吧,如果不明白的发我Email :[email protected] //邮件信息设置类 main.java package cn.jbit.email; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.ut

JavaMail(二):利用JavaMail发送复杂邮件

上一篇文章我们学习了利用JavaMail发送简单邮件,这篇文章我们利用JavaMail发送稍微复杂一点的邮件(包含文本.图片.附件).这里只贴出核心代码,其余代码可参考JavaMail(一):利用JavaMail发送简单邮件 封装发送邮件代码 /** * 封装发送邮件代码 * @author fly * @时间 2017-05-09 * */ public class Email { /** * 创建并发送一封包含文本.图片.附件的复杂邮件 * @throws Exception */ publ

JavaMail发送简单邮件

Properties props = new Properties();// 回话Session session = Session.getInstance(props);session.setDebug(true);// 构建邮件正文Message message = new MimeMessage(session);// 发送者message.setFrom(new InternetAddress("发送邮箱地址")); // 设置接收者message.setRecipient(R

【Mail】JavaMail发送带附件的邮件

上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入javamail.jar包,maven引用如下: 1 <!-- javamail --> 2 <dependency> 3 <groupId>javax.mail</groupId> 4 <artifactId>mail</artifactId

[Java] JavaMail 发送带图片的 html 格式的邮件

JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的. 发送带附件的邮件可参考JavaMail 发送 html 格式.带附件的邮件. 发送纯文本的邮件可参照 JavaMail 简单案例. 具体例子 EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名.用户名.密码.发送人邮箱.收件人邮箱.邮件主题.html 格式的内容.图片的路径,便可发送一份内置图片的邮件.在创建 MimeMultipart

Spring+Freemarker模板邮件发送

Spring+Freemarker模板邮件发送 在eclipse中新建一个Java Project, 名称为spring-freemarker-mail 2. 在项目下新建一个lib目录,导入下面需要的jar包 commons-logging-1.2.jar freemarker.jar mail.jar servlet-api.jar spring-beans-3.2.2.jar spring-context-3.2.2.jar spring-context-support-3.2.2.jar

Spring+Velocity模板发送邮件

Spring+Velocity模板发送邮件 1.在eclipse中新建一个Java Project, 命名为spring-velocity-mail 2.在项目下新建一个lib目录,导入需要的jar包 依赖包如下: commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logging-1.2.jar mail.jar spring-beans-3.2.2.jar spring-context-3.2.2.jar spring-con

JavaMail发送含有插入图片和表格的邮件

引入依赖  javamail.jcommon.jfreechart <javamail-version>1.8.3</javamail-version> <jcommon.version>1.0.23</jcommon.version> <jfreechart.version>1.0.17</jfreechart.version> <dependency> <groupId>org.apache.geronim

java spring 开启SMTP服务发送QQ邮件

首先进入自己的QQ邮箱,在设置中修改账户信息 然后来至底部 点击开启,再用手机发送对应信息到指定号码,然后点击我已发送 获取授权码 注意提示: 到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了 接下来的是Spring 中使用邮件服务 首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的 <!-- 邮件服务 --> <bean id="mailSender&q