注意:
1、先在项目中导入mail.jar,activation.jar包(可到网上下载)
2、发信人地址需开通smtp服务(登陆邮箱后,找到:设置--》账户--》POP3/IMAP/SMTP服务)
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.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>smtp.126.com</value>
</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>xiaojunwei_1987</value>
</property>
<property name="password">
<value>8888888888888</value>
</property>
</bean>
</beans>
java类:
package com.techcenter.mail;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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 org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class SpringMail {
//读取spring配置文件
static ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-init.xml");
//强制返回spring邮件发送器
static JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
//模拟Email发送信息
static String toAddress1 = "";
static String toAddress2 = "";
static String fromAddress = "";
static String subject = "spring发送文本邮件例子";
static String text = "测试spring发送文本邮件例子!";
static List<String> toAddressList = new ArrayList<String>();
static List<String> files = new ArrayList<String>();
/**
* 验证文本类型邮件信息是否完整并初始化发送信息
* @param toAddressList 收信人地址列表(必填)
* @param fromAddress 发信人地址(必填)
* @param subject 主题 (可以为空)
* @param text 内容 (必填)
* @return boolean类型的值
* @throws MailException 声明异常
*
*/
private static void checkTextEmailMsg(List<String> toAddressList,String fromAddress,
String subject,String text) throws MailException{
//声明spring的简单邮件消息
SimpleMailMessage mail = new SimpleMailMessage();
//判断收信人地址,发信人地址,邮件内容是否为空
if (toAddressList != null && toAddressList.size() > 0 ) {
int size = toAddressList.size();//
//把收信人集合转化为数组
String [] arrayAddress = toAddressList.toArray(new String[size]);
//设置收信人地址
mail.setTo(arrayAddress);
} else {
System.out.println("收信人地址为空!");
return ;
}
if ( fromAddress != null ) {
//设置发信人地址
mail.setFrom(fromAddress);
//设置邮件主题
mail.setSubject(subject);
}else {
System.out.println("发信人地址为空!");
return ;
}
if ( text != null ) {
//设置邮件内容
mail.setText(text);
//用邮件发送器发送
sender.send(mail);
System.out.println("发送文本类型邮件成功!");
}else {
System.out.println("内容为空!");
return ;
}
}
/**
* 发送文本类型邮件
* @param toAddressList 收信人地址列表(必填)
* @param fromAddress 发信人地址(必填)
* @param subject 主题 (可以为空)
* @param text 内容 (必填)
*/
public static void sendTextMail(List<String> toAddressList,String fromAddress,String subject,String text) {
try {
//验证email信息是否完整
checkTextEmailMsg(toAddressList, fromAddress, subject, text);
}catch(MailException e){
System.out.println("发送邮件失败!原因:"+e.getMessage());
}
}
/**
* 发送带附件的邮件
* @param toAddressList 收信人地址列表(必填)
* @param fromAddress 发信人地址(必填)
* @param subject 主题 (可以为空)
* @param text 内容 (必填)
* @param files 附件地址集合 (必填)
* @throws Exception 声明异常
*/
public static void sendMimeMessage(final List<String> toAddressList,final String fromAddress,final String subject,
final String text,final List<String> files) throws Exception {
//扩展信息介质接口,需自己实现接口中的方法
try {
MimeMessagePreparator mimeMail = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws MessagingException {
//设置收信人地址
if ( toAddressList != null && toAddressList.size() > 0 ) {
Iterator<String> iterator = toAddressList.iterator();
while (iterator.hasNext()) {
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(iterator.next().toString()));
}
}else {
System.out.println("收件人地址为空!");
return ;
}
if ( fromAddress != null ) {
mimeMessage.setFrom(new InternetAddress(fromAddress));
}
else {
System.out.println("发信人地址为空!");
return ;
}
if ( subject != null ) {
mimeMessage.setSubject(subject);
}
//多部件的,可以看做一个邮件容器,包含正文、附件等
Multipart mp = new MimeMultipart();
//向Multipart添加正文
MimeBodyPart content = new MimeBodyPart();
if ( text != null ) {
content.setText(text);
}
//向MimeMessage添加(Multipart代表正文)
mp.addBodyPart(content);
//向Multipart添加附件,可以添加多个附件;
/* 本地测试附件
files.add("e://呵呵.txt");
String path = System.getProperty("user.dir");
System.out.println(path);
files.add(path+"");
*/
if ( files != null && files.size() > 0 ) {
Iterator<String> it = files.iterator();
//遍历List,把附件放到邮件容器里面
while(it.hasNext()) {
MimeBodyPart attachFile = new MimeBodyPart();
String filename = it.next().toString();
//文件数据源
FileDataSource fds = new FileDataSource(filename);
//数据处理器
attachFile.setDataHandler(new DataHandler(fds));
//设置文件名
attachFile.setFileName(fds.getName());
mp.addBodyPart(attachFile);
}
}
else {
System.out.println("附件为空!");
return ;
}
files.clear();
//向Multipart添加MimeMessage
mimeMessage.setContent(mp);
mimeMessage.setSentDate(new Date());
}
};
//发送带附件的邮件
sender.send(mimeMail);
System.out.println("成功发送带附件邮件!");
}catch (Exception e) {
System.out.println("发送带附件的邮件失败,原因:"+e.getMessage());
}
}
/**
* 测试发送邮件方法
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
toAddressList.add(toAddress1);
//测试发送只有文本信息的简单测试
sendTextMail(toAddressList, fromAddress, subject, text);
//测试发送带附件的邮件
files.add("e://呵呵.txt");
sendMimeMessage(toAddressList, fromAddress, subject, text, files) ;
}
}