Spring 邮件相关服务接口

本文介绍了一个Java邮件服务接口的设计及其实现细节,包括发送单个邮件、批量邮件及带附件的批量邮件等功能。该服务利用Spring框架进行配置,并通过线程发送邮件以提高效率。
1、服务接口

package com.*.email.service;

/**
* Description : 邮件相关服务接口.

* Create Time : 2013年12月2日 上午10:08:42

* Copyright : Copyright (c) 2010 - 2013 All rights reserved.

*
* @author Mr Yan
* @version 1.0
*/
public interface EmailService {


/**
* 发送邮件
* @param mailto 收件邮箱
* @param fromEmail 发送邮箱
* @param text 内容
* @param title 标题
* @throws Exception
*/
public void sendMail(String mailto, String fromEmail, String text, String title) throws Exception;


/**
* 批量下发邮件
* @param mailto 收件邮箱
* @param fromEmail 发送邮箱
* @param text 内容
* @param title 标题
* @throws Exception
*/
public void sendBatchMail(String[] mailto, String fromEmail, String text, String title) throws Exception;


/**
* 批量下发邮件待附件
* @param mailto 收件邮箱
* @param fromEmail 发送邮箱
* @param text 内容
* @param title 标题
* @param filePath 附件
* @throws Exception
*/
public void sendBatchMailWithFile(String[] mailto, String fromEmail, String text, String title, String[] filePath) throws Exception;

}



2、服务接口实现

package com.*.email.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.annotation.Resource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import com.*.email.service.EmailService;

/**
* Description : 邮件相关服务接口实现.

* Create Time : 2013年12月2日 上午10:10:25

* Copyright : Copyright (c) 2010 - 2013 All rights reserved.

*
* @author Mr Yan
* @version 1.0
*/
@Service
public class EmailServiceImpl implements EmailService{

@Resource(name = "javaMailSender")
private JavaMailSenderImpl javaMailSender;

class EmailThread extends Thread {
private final MimeMessage mimeMessage;
public EmailThread(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
}
@Override
public void run() {
javaMailSender.send(mimeMessage);
}

}

@Override
public void sendMail(String mailto, String fromEmail, String text, String title) throws Exception {
fromEmail = javaMailSender.getUsername();

MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(new InternetAddress(fromEmail));
messageHelper.setSubject(title);
messageHelper.setText(text, true);
messageHelper.setTo(new InternetAddress(mailto));
mimeMessage = messageHelper.getMimeMessage();

EmailThread et = new EmailThread(mimeMessage);
et.start();

}

@Override
public void sendBatchMail(String[] mailto, String fromEmail, String text, String title) throws Exception {

MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(new InternetAddress(fromEmail));
messageHelper.setSubject(title);
messageHelper.setText(text, true);

List<InternetAddress> list = new ArrayList<InternetAddress>();
for (int i = 0; i < mailto.length; i++) {
list.add(new InternetAddress(mailto[i]));
}
InternetAddress[] address = list.toArray(new InternetAddress[list.size()]);
mimeMessage.setRecipients(Message.RecipientType.TO, address);
mimeMessage = messageHelper.getMimeMessage();

EmailThread et = new EmailThread(mimeMessage);
et.start();
}

@Override
public void sendBatchMailWithFile(String[] mailto, String fromEmail, String text, String title, String[] filePath) throws Exception {

MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom(new InternetAddress(MimeUtility.encodeText(fromEmail)));
messageHelper.setSubject(title);
if (filePath != null) {
BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象
mdp.setContent(text, "text/html;charset=UTF-8");// 给BodyPart对象设置内容和格式/编码方式
Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对象
mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
// 把mm作为消息对象的内容
MimeBodyPart filePart;
FileDataSource filedatasource;
// 逐个加入附件
for (int j = 0; j < filePath.length; j++) {
filePart = new MimeBodyPart();
filedatasource = new FileDataSource(filePath[j]);
filePart.setDataHandler(new DataHandler(filedatasource));
try {
filePart.setFileName(MimeUtility.encodeText(filedatasource.getName()));
} catch (Exception e) {
e.printStackTrace();
}
mm.addBodyPart(filePart);
}
mimeMessage.setContent(mm);
} else {
messageHelper.setText(text, true);
}

List<InternetAddress> list = new ArrayList<InternetAddress>();
for (int i = 0; i < mailto.length; i++) {
list.add(new InternetAddress(mailto[i]));
}
InternetAddress[] address = list.toArray(new InternetAddress[list.size()]);

mimeMessage.setRecipients(Message.RecipientType.TO, address);
mimeMessage = messageHelper.getMimeMessage();

EmailThread et = new EmailThread(mimeMessage);
et.start();
}
}



3、服务配置

<bean name="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.163.com" />
<property name="defaultEncoding" value="UTF-8"></property>
<property name="username" value="username@163.com"></property>
<property name="password" value="password"></property>
<property name="javaMailProperties">
<map>
<entry key="mail.smtp.auth" value="true" />
</map>
</property>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值