Spring提供的发送电子邮件的高级抽象层,向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层资源的处理。
MailSender和SimpleMailMessage的基本用法。
这里是mailSender的注入,MailSender是发送邮件的主要接口,Spring为它提供的一个子接口,即:org.springframework.mail.javamail.JavaMailSender,在他的实现类中有用来发送邮件的一些配置。
SimpleMailMessage是值对象,封装了一些简单的属性,如from、to、subject、text等等,SimpleMailMessage只能用来发送text格式的邮件。
如果发送Html格式的邮件,请使用MimeMessageHelper类。
MailSender
,
JavaMailSender
,
MimeMessagePreparator
,
MimeMessageHelper
,
MimeMailMessage
,
Serialized Form
这几个都行:MimeMessagePreparator
,MimeMessageHelper
,MimeMailMessage
使用到的依赖包:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mail</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
applicationContext中的配置:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="mail.tongyiku.com"></property>
<property name="username" value="customer@tongyiku.com"></property>
<property name="password" value="×××××××××"></property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
</bean>
<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="customer@tongyiku.com"></property>
<property name="subject" value="your subject!"></property>
</bean>
<bean id="orderManager" class="com.spring.mail.OrderManagerImpl">
<property name="mailSender" ref="mailSender"></property>
<property name="message" ref="mailMessage"></property>
</bean>
JTO文件:
Customer:
public class Customer {
private String emailAddress;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
}
Order:
public class Order {
private String orderNumber;
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
private Customer customer;
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
OrderManage类:
public interface OrderManager {
void placeOrder(Order order);
}
第一种实现:
OrderManageImpl.java
public class OrderManagerImpl implements OrderManager {
private MailSender mailSender;
private SimpleMailMessage message;
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
public void setMessage(SimpleMailMessage message) {
this.message = message;
}
public void placeOrder(final Order order) {
SimpleMailMessage msg = new SimpleMailMessage(this.message);
msg.setSubject("主题");//主题
msg.setTo(order.getCustomer().getEmailAddress());
msg.setText(
"Dear "
+ order.getCustomer().getFirstName()
+ order.getCustomer().getLastName()
+ ", thank you for placing order. Your order number is "
+ order.getOrderNumber());
try{
mailSender.send(msg);
}
catch(MailException ex) {
//log it and go on
System.err.println(ex.getMessage());
}
}
}
第二种实现:
OrderManagerImpl.java:
public class OrderManagerImpl implements OrderManager {
private JavaMailSender mailSender;
private SimpleMailMessage message;
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public void setMessage(SimpleMailMessage message) {
this.message = message;
}
public void placeOrder(final Order order) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws MessagingException {
mimeMessage.setRecipient(Message.RecipientType.TO,
new InternetAddress(order.getCustomer().getEmailAddress()));
mimeMessage.setFrom(new InternetAddress("customer@tongyiku.com"));
mimeMessage.setText(
"Dear "
+ order.getCustomer().getFirstName()
+ order.getCustomer().getLastName()
+ ", thank you for placing order. Your order number is second:"
+ order.getOrderNumber());
}
};
try{
mailSender.send(preparator);
}
catch(MailException ex) {
//log it and go on
System.err.println(ex.getMessage());
}
}
}
测试用例:
@ContextConfiguration(locations={"/applicationContext.xml"})
public class OrderManageEmailTest extends AbstractTransactionalJUnit4SpringContextTests{
@Autowired
private OrderManager orderManager;
Order order = null;
@Before
public void before(){
order=new Order();
order.setOrderNumber("123654");
Customer customer = new Customer();
customer.setEmailAddress("meixiang@tongyiku.com");
customer.setFirstName("li");
customer.setLastName("meixiang");
order.setCustomer(customer);
}
@Test
public void placeOrderTest(){
orderManager.placeOrder(order);
}
}
发送HTML模板文件:
使用MimeMessageHelper类。
MimeMessage msg = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
try {
helper = new MimeMessageHelper(msg, true, getEncoding());
helper.setTo(new InternetAddress(order.getCustomer().getEmailAddress()));
helper.setSubject("subject");
helper.setFrom(getFrom());
helper.setText("a", "<font color=red weight=bold>童壹库邮件模板</font>");
} catch (MessagingException ex) {
System.out.println(ex.getMessage());
}
try{
mailSender.send(msg);
}
catch(MailException ex) {
System.err.println(ex.getMessage());
}
参考: