- 使用Properties对象封装服务器信息
更多可以去 这里 了解要发送邮件,就要和邮件服务器通信,所以需要服务器信息;
常见的有:
mail.smtp.host //主机名
mail.smtp.auth //是事进行身份验证
mail.smtp.port //邮件服务器端口号
mail.smtp.socketFactory.class //ssl工厂类
mail.smtp.socketFactory.port //ssl接口 - 获取session对象
一般在这里时给在后面的参数中给出一个验证器 Authenticator对象//不共享
session session= Session mailsession = Session.getInstance(props,null);
//单例,共享
Session mailsession = Session.getDefaultInstance(props,null);
- 用message封装邮件信息
- 获取Transport对象发送邮件
package cn.mail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class MailSender {
public void send() throws Exception{
//设置邮件信息
Address formMail = new InternetAddress("zhangsan@126.com");
Address toMail = new InternetAddress("1001000@qq.com");
String subject = "测试邮件";
String content="测试邮件的内容";
/*设置邮件服务器信息*/
Properties props=System.getProperties();
props.put("mail.smtp.host", "smtp.126.com");//主机
props.put("mail.smtp.auth", "true");//做身份验证
//获取session对象
Session mailsession=Session.getInstance(props,new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//返回 用户名 与 密码
return new PasswordAuthentication("zhangsan@126.com", "zhansanpass");
}
});
/*设置删除件信息*/
Message msg=new MimeMessage(mailsession) ;
msg.setFrom(formMail);//发件人
msg.addRecipient(RecipientType.TO, toMail);//收件人
msg.setSubject(subject);//主题
msg.setContent(content, "text/html;charset=utf-8");//正文及MIME,此处指定编码有助于防止乱码
msg.setSentDate( new Date() );//发送时间
/*获取Trans并发送*/
Transport trans= mailsession.getTransport("smtp");
trans.send(msg, msg.getAllRecipients());//发送组所有收件人
trans.close();
}
public static void main(String[] args) {
MailSender sender=new MailSender();
try {
sender.send();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 创建邮件发送类
package mail.service;
import mail.entity.MailInfo;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
/**
* 邮件发送业务
*
* @author Administrator
*
*/
public class SimpleMailServiceImpl implements IMailService {
// 邮件发送器
private JavaMailSenderImpl sender;
@Override
public void sendMail(MailInfo mail) throws Exception {
// 建立邮件消息
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo("xxxxxxxx@qq.com");// 收件人
mailMessage.setFrom("xxxxxx@qq.com");// 发件人
mailMessage.setSubject("测试简单文本邮件发送! ");// 主题
mailMessage.setText(" 测试我的简单邮件发送机制!! ");// 内容
// 发送邮件
sender.send(mailMessage);
System.out.println(" 邮件发送成功.. ");
}
public JavaMailSenderImpl getSender() {
return sender;
}
public void setSender(JavaMailSenderImpl sender) {
this.sender = sender;
}
}
- 在spring的配置文件中配置MailSender实现Bean
完成以上步骤就可以发简单邮件了<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<bean name="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="host" value="smtp.126.com" /> <!-- 主机名 -->
<property name="username" value="username@126.com" /> <!-- 用户名 -->
<property name="password" value="emailpassword" /> <!-- 密码 -->
<property name="protocol" value="smtp" /> <!-- 协议 -->
<property name="port" value="25" /> <!-- 发送端口号 -->
<property name="javaMailProperties"> <!-- 更多属性 -->
<props>
<prop key="mail.smtp.auth">true</prop> <!-- 身份证码 -->
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <!-- SSL工厂类 -->
<prop key="mail.smtp.port">465</prop> <!-- smtp 端口号 -->
<prop key="mail.smtp.socketFactory.port">465</prop> <!-- ssl验证端口 -->
<prop key="mail.imap.auth.login.disable">false</prop>
<prop key="mail.debug">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
</beans>
- MailSender用JavaMailSender这个实现类
private JavaMailSender sender;
- MailMessage 用 MimeMessage这个实现类
//创建 复杂邮件内容对象
MimeMessage msg=sender.createMimeMessage(); - 设置MimeMessage中的内容时,用工具类 MimeMessageHelper
//创建 复杂邮件内容 帮助 对象
MimeMessageHelper helper=new MimeMessageHelper(msg,true,encoding);
....//设置发件人
helper.setFrom(mail.getFromAddr()); - 处理附件文件名乱码用 MimeUtility类
//用 MimeUtility进行转码防止中文文件名乱码
helper.addAttachment( MimeUtility.encodeWord(file.getName()), file);
业务类package mail.entity;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 邮件信息封装类
* @author Administrator
*
*/
public class MailInfo {
/**
* 收件人
*/
private String[] toAddr;
/**
* 抄送
*/
private String[] bcc;
/**
* 发件人
*/
private String fromAddr;
/**
* 主题
*/
private String subject;
/**
* 内容
*/
private String text;
/**
* 是否以html方式显示
*/
private boolean html;
/**
* 内容中内嵌文件
*/
private Map<String, File> Inlines = new HashMap<String, File>(0) ;
/**
* 附件
*/
private List<File> attachment = new ArrayList<File>(0);
//###############################
/**
* 是否为复杂邮件
* @return
*/
public boolean isMultipart() {
if(attachment.size()>0||Inlines.size()>0){
return true;
}
return false;
}
// #####################
public MailInfo(){}
public MailInfo(String[] toAddr, String[] bcc, String fromAddr,
String subject, String text) {
super();
this.toAddr = toAddr;
this.bcc = bcc;
this.fromAddr = fromAddr;
this.subject = subject;
this.text = text;
}
public MailInfo(String[] toAddr, String[] bcc, String fromAddr,
String subject, String text, boolean html,
Map<String, File> inlines, List<File> attachment) {
super();
this.toAddr = toAddr;
this.bcc = bcc;
this.fromAddr = fromAddr;
this.subject = subject;
this.text = text;
this.html = html;
Inlines = inlines;
this.attachment = attachment;
}
// ############## 此处省去相应的getter与setter
}
spring配置文件package mail.service;
import java.io.File;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import mail.entity.MailInfo;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
/**
* 邮件发送业务
*
* @author Administrator
*
*/
public class MimeMailServiceImpl implements IMailService {
// 邮件发送器
private JavaMailSender sender;
// 邮件编码
private String encoding;
/*
* (non-Javadoc)
*
* @see mail.service.IMailService#sendMail(mail.entity.MailInfo)
*/
@Override
public void sendMail(MailInfo mail) throws Exception {
// 创建 复杂邮件内容对象
MimeMessage msg = sender.createMimeMessage();
// 创建 复杂邮件内容 帮助 对象
MimeMessageHelper helper = new MimeMessageHelper(msg, true, encoding);
// 设置收件人
helper.setTo(mail.getToAddr());
if (mail.getBcc() != null) {
// 设置抄送
helper.setBcc(mail.getBcc());
}
// 设置发件人
helper.setFrom(mail.getFromAddr());
// 设置 邮件标题
helper.setSubject(mail.getSubject());
// 设置邮件 内容 以及 要不要用html方式显示
helper.setText(mail.getText(), mail.isHtml());
// 设置 邮件内嵌文件(图片)
for (String cid : mail.getInlines().keySet()) {
// cid 与 内容中的 模版占位标签对应
helper.addAttachment(cid, mail.getInlines().get(cid));
}
// 设置 邮件 附件
for (File file : mail.getAttachment()) {
// 用 MimeUtility进行转码防止中文文件名乱码
helper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
}
// 发送邮件
sender.send(helper.getMimeMessage());
}
public JavaMailSender getSender() {
return sender;
}
public void setSender(JavaMailSender sender) {
this.sender = sender;
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
}
测试代码<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 配置邮件信息 -->
<bean name="mail" class="mail.entity.MailInfo" >
<property name="fromAddr" value="skyer518@126.com" />
<property name="toAddr">
<array>
<value>159134323@qq.com</value>
<value>kmanybe@yahoo.com.cn</value>
<value>616234969@qq.com</value>
<value>sk332348@126.com</value>
<value>nielei@xieming.com</value>
</array>
</property>
<property name="subject" value="测试邮件" />
<property name="text" value="这是一封测试邮件" />
<property name="html" value="false" />
</bean>
<!-- 配置sender -->
<bean name="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="host" value="smtp.126.com" /> <!-- 主机名 -->
<property name="username" value="userame@126.com" /> <!-- 用户名 -->
<property name="password" value="password" /> <!-- 密码 -->
<property name="protocol" value="smtp" /> <!-- 协议 -->
<property name="port" value="25" /> <!-- 发送端口号 -->
<property name="javaMailProperties"> <!-- 更多属性 -->
<props>
<prop key="mail.smtp.auth">true</prop> <!-- 身份证码 -->
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <!-- SSL工厂类 -->
<prop key="mail.smtp.port">465</prop> <!-- smtp 端口号 -->
<prop key="mail.smtp.socketFactory.port">465</prop> <!-- ssl验证端口 -->
<prop key="mail.imap.auth.login.disable">false</prop>
<prop key="mail.debug">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
<!-- 配置一个bean 用于测试 -->
<bean name="mailService" class="mail.service.MimeMailServiceImpl" p:sender-ref="sender" p:encoding="utf-8" />
</beans>
注意 : 向QQ邮箱发送消息需要加:package test;
import mail.entity.MailInfo;
import mail.service.IMailService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class T1 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
IMailService email = (IMailService) ac.getBean("mailService");
MailInfo mail = (MailInfo) ac.getBean("mail");
try {
email.sendMail(mail);
} catch (Exception e) {
e.printStackTrace();
}
}
}
<prop key="mail.smtp.socketFactory.port">465</prop> <!-- ssl验证端口 -->