使用spring框架实现邮件发送

本文介绍如何使用JavaMail API发送纯文本邮件及带有Freemarker模版的邮件。包括配置Spring上下文来设置JavaMailSender,创建实体类管理邮件内容,并通过Struts2 Action触发邮件发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现邮件发送有两种形式
1.不使用发送模版
实体类
public class SendMailContent {
private String toMail;
private String fromMail;
private String sendText;
private String subject;
public String getToMail() {
return toMail;
}
public void setToMail(String toMail) {
this.toMail = toMail;
}
public String getFromMail() {
return fromMail;
}
public void setFromMail(String fromMail) {
this.fromMail = fromMail;
}
public String getSendText() {
return sendText;
}
public void setSendText(String sendText) {
this.sendText = sendText;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}

}
接口
public interface SendMailIntrface {
public void sendMail(String sendContentType,SendMailContent Content);
}
接口实现
import java.util.Date;

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

import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;

public class SendMailImpl implements SendMailIntrface {

JavaMailSender mailSender;

public JavaMailSender getMailSender() {
return mailSender;
}

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

public void sendMail(String sendContentType, SendMailContent content) {
if (sendContentType.equals("TEXT")) {
SpringSendTextMail(mailSender, content);
}
}

private void SpringSendTextMail(JavaMailSender sender,
SendMailContent content) {
SimpleMailMessage mail = new SimpleMailMessage();
mail.setFrom(content.getFromMail());
mail.setTo(content.getToMail());
mail.setSubject(content.getSubject());
mail.setText(content.getSendText());
sender.send(mail);

System.out.println("成功发送文本文件!");
}

@SuppressWarnings("unused")
private void SpringSendTextMail(SendMailContent content) {

final String toMail = content.getToMail();
final String fromMail = content.getFromMail();
final String subject = content.getSubject();
final String text = content.getSendText();

MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage)
throws MessagingException {
mimeMessage.setRecipient(Message.RecipientType.TO,
new InternetAddress(toMail));

mimeMessage.setFrom(new InternetAddress(fromMail));
mimeMessage.setSubject(subject);
mimeMessage.setSentDate(new Date());
mimeMessage.setText(text);
}
};

try {
mailSender.send(preparator);
} catch (MailException ex) {
ex.printStackTrace();
// log it and go on
System.err.println(ex.getMessage());
}
}
}

Action
import com.opensymphony.xwork2.ActionSupport;

public class SendMailAction extends ActionSupport{

SendMailIntrface mailSend;

private String toMail;
private String fromMail;
private String sendText;
private String subject;

public String getFromMail() {
return fromMail;
}

public void setFromMail(String fromMail) {
this.fromMail = fromMail;
}

public String getSendText() {
return sendText;
}

public void setSendText(String sendText) {
this.sendText = sendText;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getToMail() {
return toMail;
}

public void setToMail(String toMail) {
this.toMail = toMail;
}

public String execute() {

//mailSend.SpringSendMail("test@126.com");

SendMailContent content = new SendMailContent();
content.setToMail(this.getToMail());
content.setFromMail(this.getFromMail());
content.setSubject(this.getSubject());
content.setSendText(this.getSendText());

mailSend.sendMail("TEXT",content);
try {

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//返回成功 跳转到成功页面
return "success";
}

public SendMailIntrface getMailSend() {
return mailSend;
}

public void setMailSend(SendMailIntrface mailSend) {
this.mailSend = mailSend;
}

}

spring配置文件
<!-- JavaMail 发送邮件配置 -->
<bean id="mailSenders"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.163.com" />
<property name="port" value="25" />
<property name="username" value=" yonghuming" />
<property name="password" value="mima" />
<property name="javaMailProperties">
<props>
<!-- 如果不添加下面这个,将会出现553 authentication is required错误 -->
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
<bean id="SendMailImpl"
class="com.mail.SendMailImpl">
<property name="mailSender">
<ref bean="mailSenders" />
</property>
</bean>
<bean id="mailAction" class="com.mail.SendMailAction">
<property name="mailSend" ref="SendMailImpl"></property>
</bean>
action 配置文件
<action name="mailSend" class="mailAction">
<result name="success">/pages/success.jsp</result>
</action>
测试页面
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>

<body>

<s:form action="/mailSend.action">

发送人<s:textfield name="fromMail" value="lixiongjie2006@163.com"></s:textfield>
收件人<s:textfield name="toMail" ></s:textfield>
主题<s:textfield name="subject" ></s:textfield>

发送内容<s:textarea cols="20" name="sendText" rows="5" >
</s:textarea>
<s:submit value="发送"></s:submit>
</s:form>
</body>
</html>

2、使用模版
1、模版 notify-mail.ftl
欢迎加入! 
 
亲爱的${username} 
 
请点击链接完成注册: 
 
如果您的email程序不支持链接点击,请将上面的地址拷贝至您的浏览器(如IE)的地址栏进入****。 
 
您可以在***: 
 
查看最新的影视资料,查看各种相关消费产品,在这里交友,灌水……; 
 
希望您在**度过快乐的时光!
2、实现
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;


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

public class SpringMail {
private Configuration cfg = new Configuration();

public static void main(String[] args) throws Exception {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
SpringMail springMail = new SpringMail();
springMail.sendMail(sender);

}

private void sendMail(JavaMailSender sender) throws Exception {
SimpleMailMessage mail = new SimpleMailMessage();
mail.setTo("50125670@qq.com"); // 接收人
mail.setFrom("lixiongjie2006@163.com"); // 发送人
mail.setSubject("test by amigo");
// 嵌入ftl模版
cfg.setClassForTemplateLoading(getClass(), "/mail");
Map root = new HashMap();
root.put("username", "lixiongjie"); // 模板变量
Template t = cfg.getTemplate("notify-mail.ftl");
StringWriter writer = new StringWriter();
t.process(root, writer);
// 把模版内容写入邮件中
mail.setText(writer.toString());
sender.send(mail);
System.out.println("邮件发送成功!");
}
}
3、spring配置文件
<?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.5.xsd">


<!-- JavaMail 发送邮件配置 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.163.com">
</property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</bean>
</beans>
4、包结构
src
--mail
notify-mail.ftl
--springmail
SpringMail.java
applicationContext.xml
以上有很多时参考网上实现,仅供参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值