精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-23
最后修改:2010-08-23
最近碰到好多新手问我发送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下测试成功。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-24
感觉少了些什么
# <bean id="velocityEngine" # class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> # <property name="resourceLoaderPath" value="classpath:velocity"></property> # </bean> 模板路径放在什么地方 |
|
返回顶楼 | |
发表时间:2010-08-24
hrsvici412 写道 感觉少了些什么
# <bean id="velocityEngine" # class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> # <property name="resourceLoaderPath" value="classpath:velocity"></property> # </bean> 模板路径放在什么地方 模板文件放在这下面 classpath:velocity 例如:hello.vm 放在 /src/velocity/hello.vm |
|
返回顶楼 | |
发表时间:2010-08-25
始终感觉spring的没有javamail好用,可以自己重写,达到自己想要的效果
|
|
返回顶楼 | |
发表时间:2010-08-25
请问发送图片怎么办?
|
|
返回顶楼 | |
发表时间:2010-08-25
可以使用apache 的common email ,也很方便的
|
|
返回顶楼 | |
发表时间:2010-08-25
写的挺好,就是不支持附件。
|
|
返回顶楼 | |
发表时间:2010-08-25
不错,对新人很有用。
|
|
返回顶楼 | |
发表时间:2010-08-25
使用Apache Common email 很容易,几乎不需要什么配置!
|
|
返回顶楼 | |
发表时间:2010-08-26
发送不是什么玩意,麻烦的是接收
|
|
返回顶楼 | |