send email with velocity and spring 完整示例

    由于项目里要发邮件,用了spring 和 velocity 模板。写下来以后可以看,好记性不如博客。
版本说明下:
spring 2.0.6
velocity 1.5
javamail 用 spring/lib下的

1.封装邮件信息类:

package  com.chenlb.mail;

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.springframework.mail.MailException;
import  org.springframework.mail.javamail.JavaMailSender;
import  org.springframework.mail.javamail.MimeMessageHelper;
import  org.springframework.ui.velocity.VelocityEngineUtils;

/**
 * 邮件发送器
 * @作者 chenlb
 * @创建时间 2007-7-28 下午03:35:31 
 
*/
public   class  VelocityTemplateMailMessage {

    
protected   final  Log logger  =  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 model;


    
public   boolean  send() {
        MimeMessage msg 
=  javaMailSender.createMimeMessage();
        MimeMessageHelper helper 
=   new  MimeMessageHelper(msg);
        
        
try  {
            helper.setFrom(from);
            helper.setSubject(title);
            helper.setTo(toEmails);
            helper.setText(getMessage(), 
true );   //如果发的不是html内容去掉true参数
            javaMailSender.send(msg);
            
        } 
catch  (MessagingException e) {
            
//  TODO 自动生成 catch 块
             if (logger.isWarnEnabled()) {
                logger.warn(
" 邮件信息导常! 邮件标题为:  " + title);
            }
            
return   false ;
            
// e.printStackTrace();
        }  catch  (MailException me) {
            
//  TODO: handle exception
             if (logger.isWarnEnabled()) {
                logger.warn(
" 发送邮件失败! 邮件标题为:  " + title);
            }
            
return   false ;
        }
        
return   true ;    
    }
    
    
    
/**
     * 邮件模板中得到信息
     * 
@return  返回特发送的内容
     
*/
    
private  String getMessage() {
        
return  VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, 
                templateLocation, encoding, model);
    }

    
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 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" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
        "dtd/spring-beans-2.0.dtd"
>
<!--  http://www.springframework.org/  -->
< beans >

<!--  属性文件加载  -->
    
< bean  id ="propertyConfigurer"  class ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        
< property  name ="locations" >
          
< list >
              
< value > classpath: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.chenlb.mail.VelocityTemplateMailMessage" >
        
< property  name ="javaMailSender"  ref ="mailSender" ></ property >
        
< property  name ="from"  value ="${mail.from}" ></ property >
        
< property  name ="encoding"  value ="UTF-8" ></ property >
        
< property  name ="templateLocation"  value ="test.vm" ></ property >
        
< property  name ="velocityEngine"  ref ="velocityEngine" ></ property >
        
< property  name ="title"  value ="wwww.blogjava.net/chenlb" ></ property >
    
</ bean >
    
</ beans >

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

3.发送者邮件信息,mail.properties(classpath位置):

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


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

你好!${me} 这是模板生成的邮件。


5.使用:

VelocityTemplateMailMessage vtmm  =  (VelocityTemplateMailMessage) context.getBean( " templateMail " );
Map
< String, String >  data  =   new  HashMap < String, String > ();
data(
" me " , " yourname " );
vtmm.setModel(data);
vtmm.setToMail(
" yourOtherMail@163.com " );
vtmm.setTitle(
" mail with veloctiy and spring " );
vtmm.send();

 

看下是否收到邮件了。^_^

基于MATLAB的电池等效电路模型(ECM)仿真,用于分析电气行为和动态响应.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档系统性地提供了隔离型全桥LLC谐振变换器的建模、仿真与参数设计全套技术资料,涵盖Simulink/Plecs仿真模型、详细设计报告及Mathcad计算书,内容涉及开环与闭环控制、软启动过程、恒压恒流双闭环竞争控制等多种工况。资料还拓展至多相交错LLC、双向CLLC拓扑以及V2G(Vehicle-to-Grid)电动汽车充放电等前沿应用场景,并融合状态估计算法(如卡尔曼滤波、扩展卡尔曼滤波、粒子滤波)与神经网络技术进行系统性能优化,配套PPT说明与高水平EI期刊复现案例,为电力电子领域的科研与工程设计提供完整的技术支撑; 适合人群:适用于电力电子、电气工程及其自动化等相关专业的高校研究生、科研人员,以及从事高频DC-DC变换器、新能源电源系统开发的工程师,具备扎实电路理论基础和Matlab/Simulink仿真能力者尤佳; 使用场景及目标:①支撑LLC谐振变换器相关的科研课题、学位论文或项目开发;②开展高频高效电源的参数设计、效率优化与动态响应分析;③学习并复现高水平期刊中先进的控制策略,如变频控制、混合移相控制及智能优化算法;④掌握Simulink/Matlab在电力电子系统建模、控制算法实现与状态估计中的综合应用; 阅读建议:建议结合仿真模型、Mathcad计算书与设计报告三位一体同步研习,重点理解主电路参数设计与闭环控制逻辑之间的耦合关系,优先运行典型算例并调试关键模块,有条件者可进一步推进至硬件原型验证,并积极探索状态估计与人工智能算法在电力系统动态建模中的融合应用。

SpringBoot使用Velocity发送电子邮件

文章目录使用Velocity发送电子邮件简介Velocity能用来干什么?入门页面引用指令Java代码集成发送电子邮件前提编码配置文件发送邮件发送结果官方文档示例代码 使用Velocity发送电子邮件 简介 Velocity能用来干什么? 我认为大家熟知的什么用Velocity页面当做MVC的页面来呈现这种方式,但在当今前后端分离的时代,我觉得很大一部分公司前端页面都是使用的React,Vue等纯前端框架。使用各大模板引擎当做页面应该很少 除了这个,官方文档提到了一个很重要的一个应用场景,就是发送电子邮件。

本博客已迁移到 https://jacksparrow414.com 3165

ADC选型实战:从参数指标到精准应用的工程指南

本文深入解析ADC(模数转换器)选型的关键参数与实战技巧,涵盖分辨率、转换误差等核心指标,并提供高精度温度测量、高速数据采集等五大应用场景的选型指南。通过实际案例和代码示例,详细讲解校准方法、功耗优化策略及常见问题排查,帮助工程师实现从参数指标到精准应用的工程实践。

weixin_29166013的博客 326

使用Velocity作为邮件的模板

Velocity是一个基于Java的模板引擎。它允许任何人使用一种简单但强大的模板语言去引用Java代码中定义的对象。 Velocity的基本常用语法:https://www.cnblogs.com/xiohao/p/5788932.html 最近在做ESL的邮件报警功能,邮件内容包含两...

chouqin3721的博客 2211

STorM BGC V1.31硬件+SimpleBGC固件:从零搭建三轴云台开发环境(Keil+JLink避坑指南)

本文详细介绍了如何从零搭建STorM BGC V1.31硬件+SimpleBGC固件的三轴云台开发环境,涵盖硬件连接、Keil+JLink开发工具配置、固件编译与烧录等关键步骤,并提供了常见问题的解决方案和调试技巧,帮助开发者快速上手三轴云台开发。

weixin_28693683的博客 380

Wafer的T7 Code是什么,怎么来的

在半导体Cim系统中,waferstart 业务需要支持 Sorter 读取 Wafer 的 T7 Code,与 MES 的 Wafer ID 进行绑定,以便向 前追溯 Wafer 历史,那么问题来了,T7code 是什么Wafer的T7 Code是一种,用于标识双面抛光的晶圆。这种标记采用二维矩阵代码符号,适用于各种尺寸的晶圆,不仅限于450mm无缺口晶圆7。T7 Code是衬底来料背面通常会有的供应商刻的追溯ID,这是一串数字和字母组成的流水码。

阿拉伯梳子的专栏 7923

Spring使用Velocity发送Email

class org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader UTF-8 UTF-8 text/html; charset=UTF-8 Email email = new SimpleEmail(); email.setSubject("

死脑袋瓜的专栏 1515

Zabbix监控网络设备讲解

Zabbix监控网络设备讲解 本人在研究学习zabbix的时候,网上找过很多如何监控路由,交换,或者是防火墙的文章,但很多都比较散,这里我出一个大概的整合,方便大家参考和学习。本章就拿华三的交换机来做文章。 监控网络设备首先我们需要开启snmp协议,华三怎么开启snmp协议在我的博客里有写到,其次就是找到版本对应的OID,zabbix就是通过抓取设备的OID来做到监控网络设备的,当然zabbix也不仅仅只有通过snmp来监控设备,还有很多别的功能,这些功能我会在以后的博客里面一一更新 文章目录Zab

太阳了文哥的博客 3381

java velocity 邮件_send email with velocity and spring 完整示例

packagecom.chenlb.mail;importjava.util.Map;importjavax.mail.MessagingException;importjavax.mail.internet.MimeMessage;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;im...

weixin_30394019的博客 169

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

m0_56779872的博客 8677

[SV]SystemVerilog学习笔记之struct & union

SystemVerilog学习笔记(四) 一、结构体(struct) 1.1、结构体(struct) 结构体声明:结构体默认是变量,也可以声明为线网 var struct{ //通过var进行结构体变量声明 logic [31:0] a, b; logic [ 7:0] opcode; } Instruction_Word_var; wire struct{ //结构体线网声明,定义为线网类型时,结构体的所有成员必须...

元直的博客 1万+

java 邮件模版_模板发送java邮件

Creating email content using a templating libraryThe code in the previous examples explicitly created the content of the email message, using methods calls such asmessage.setText(..). This is fine fo...

weixin_42373997的博客 373

YOLOv11涨点改进 | 全网独家首发、特征融合创新篇 | ACM 2025顶会 | 引入DAAttn差异感知注意力融合模块,通过动态调整注意力,使模型更准确地识别关键内容,提高精度、并减少冗余计算

本文提出了一种基于DAAttn(差异感知注意力融合)模块改进的YOLOv11模型,用于提升变化检测任务的性能。DAAttn模块通过动态加权特征差异,有效区分有意义变化与噪声(如光照、天气变化),显著提高了模型在复杂场景下的检测精度。该模块采用反转注意力机制,重点关注显著差异区域,同时减少计算冗余。实验表明,改进后的模型在保持计算效率的同时,能够更准确地识别小目标和细节变化。文章详细介绍了DAAttn的原理、优势、实现代码及其在YOLOv11中的集成方法,并提供了两种改进配置方案。

Ai缝合怪、助力小伙伴高效发论文 300

办公Agent从Demo到生产:循环、记忆、安全与可观测性的工程实践

大语言模型驱动的智能体(Agent)正在重塑企业办公流程,但表面的对话能力并不等于生产可用。Agent循环作为执行核心,决定了模型如何感知、决策与调用工具;而工具调用的参数校验、幂等控制与白名单机制,则是避免误操作的关键。实际办公场景中,外部文档可能携带恶意指令,提示注入风险要求开发者从系统提示、来源标记和敏感操作确认等层面构建安全边界。同时,多轮对话依赖三层记忆结构,短期记忆、工作记忆与长期记忆的合理分层,能有效解决上下文丢失问题。可观测性建设——包括结构化日志、调用链追踪与关键指标监控,则是线上排错的基

weixin_34216196的博客 441

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 676

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Qwen-Image-Edit-2511-Hyper-Realistic-Portrait进阶实战:柔光箱灯光、浅景深与湿发水光效果调优技巧

Qwen-Image-Edit-2511-Hyper-Realistic-Portrait 是一款基于 Qwen-Image-Edit-2511 图像编辑底模的超写实人像 LoRA 适配器,能将普通照片转换成毛孔级皮肤质感、湿发水光、浅景深散景的电影级写实人像,且严格保留人物面部身份。本文将带你掌握柔光箱布光、85mm 浅景深与湿润皮肤效果的提示词调优技巧。 ## 📌 项目速览:这套人像 Lo

gitblog_00962的博客 987

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

spring mvc 发送html格式velocity邮件模板(包括定时发送与按钮触发发送)

1.Maven Dependency(POM.xml) dependency>          groupId>org.apache.velocitygroupId>          artifactId>velocity-toolsartifactId>          version>2.0version>        dependency>

Carl_WeiRenKuan的专栏 3958

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

使用velocity+spring发送邮件

applicationContext.xml:         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">                                           classpath:mail.properties            

jamesge的博客 2152

spring+velocity+javamail发送模板邮件

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

雪莲嘉乐--专栏 7590

spring 对 conection 的事务

    spring 对 JdbcTemplate……的事务管理不用担心。就是对直接Jdbc实现的Dao事务管理有点小问题,如:我直接,用dataSource.getConnection()。spring是管理不了事务的。原因是Jdbc实现的Dao里的connection是自动提交的。要改用经过spring 处理过的connection = DataSourceUtil.getConnection...

clbchenlb的专栏 170

upload code

package org.uploadtag.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletR...

topinking的专栏 245

java处理日期时间

关键字: java处理日期时间 JAVA处理日期时间常用方法: 1.java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的...

topinking的专栏 182

list/Arrays/Set之间的转换

http://blog.csdn.net/qianling3439/archive/2008/08/01/2752475.aspx   ★ 数组转Collection 使用Apache Jakarta Commons Collections: import org.apache.commons.collections.CollectionUtils;       String[] strAr...

topinking的专栏 126
上一篇: 怎样判断一个字符是否为中文字
下一篇: list/Arrays/Set之间的转换
topinking
博客等级 码龄20年 15粉丝 242原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值