概念和协议
SMTP:Simple Message Transfer Protocal发送协议 默认端口:25POP:Post Office Protocal邮局协议。接收协议 默认端口:110
1. 邮件发送的过程
2. 邮件发送的相关API
3. 邮件发送的工具类MailUtil的提取
public class MailUtil {
/**
* 发送电子邮件
* @param addr 收件人地址
* @param subject 主题
* @param text 内容
* @throws MessagingException
*/
public static void sendMail(String addr,String subject,String text) throws MessagingException{
Properties props=new Properties();
props.put("mail.smtp.host","smtp.sina.com");
props.put("mail.smtp.auth","true");
Session session=Session.getInstance(props);
//构造信息体
MimeMessage message =new MimeMessage(session);
//发件地址
Address address = new InternetAddress("wwwitcastcn@sina.com");
message.setFrom(address);
//收件地址
Address toAddress = new InternetAddress(addr);
message.setRecipient(MimeMessage.RecipientType.TO, toAddress);
//主题
message.setSubject(subject);
//正文
message.setText(text);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("smtp.sina.com", "wwwitcastcn@sina.com", "itcast"); //发送
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
4. Spring对javaMail的支持
Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和其对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text。 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象。 要获得关于邮件异常层次的更丰富的信息。
为了使用JavaMail中的一些特色, 比如MIME类型的信件, spring提供了MailSender的一个子接口, 即org.springframework.mail.javamail.JavaMailSender。Spring还提供了一个回调接口org.springframework.mail.javamail.MimeMessagePreparator, 用于准备JavaMail的MIME信件。
这里简单的介绍了如何使用spring发送各种形式的邮件以及配置。
1、在src目录下建立mail.properties文件里边包含一下内容
mail.host=smtp.qq.com
mail.username=你的邮箱名
mail.password=你的邮箱密码
mail.from=发送方的邮箱
2、使用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" 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.0.xsd">
<!-- 加载Properties文件 --> <beanid="configurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <propertyname="locations"> <list> <value>classpath:mail.properties</value> </list> </property> </bean> <beanid="mailMessage"class="org.springframework.mail.SimpleMailMessage"> <propertyname="from"> <value>${mail.from}</value> </property> <!--查看SimpleMailMessage源码还可以注入标题,内容等 --> </bean> <!-- 申明JavaMailSenderImpl对象 --> <beanid="mailSender"class="org.springframework.mail.javamail.JavaMailSenderImpl"> <propertyname="defaultEncoding"value="UTF-8"/> <propertyname="host"value="${mail.host}"/> <propertyname="username"value="${mail.username}"/> <propertyname="password"value="${mail.password}"/> <propertyname="javaMailProperties"> <props> <!--设置认证开关 --> <propkey="mail.smtp.auth">true</prop> <!--启动调试开关 --> <propkey="mail.debug">true</prop> <!--设置发送延时 --> <propkey="mail.smtp.timeout">0</prop> </props> </property> </bean> </beans>
|
5. 发送简单邮件
importjavax.mail.MessagingException;
importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importorg.springframework.mail.MailSender; importorg.springframework.mail.SimpleMailMessage;
/**
* 本类测试邮件发送Html形式 *
* @author Eternity_._
*
*/
public class SingleMailSend {
static ApplicationContext actx = new ClassPathXmlApplicationContext( "applicationContext.xml"); static MailSender sender = (MailSender) actx.getBean("mailSender"); static SimpleMailMessage mailMessage = (SimpleMailMessage) actx.getBean("mailMessage"); public static voidmain(String args[]) throws MessagingException { mailMessage.setSubject("你好"); mailMessage.setText("这个是一个通过Spring框架来发送邮件的小程序"); mailMessage.setTo("9197****1@qq.com"); sender.send(mailMessage); }
}
|
6. 发送带有图片的邮件,以嵌入HTML的方式
importjava.io.File;
importjavax.mail.MessagingException; importjavax.mail.internet.MimeMessage;
importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importorg.springframework.core.io.FileSystemResource; importorg.springframework.mail.javamail.JavaMailSenderImpl; importorg.springframework.mail.javamail.MimeMessageHelper;
public class SpringAttachedImageMail {
public static voidmain(String[] args) throws MessagingException {
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml"); JavaMailSenderImpl sender = (JavaMailSenderImpl) ctx
.getBean("mailSender"); MimeMessage mailMessage = sender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true); messageHelper.setFrom("9197****1@qq.com"); messageHelper.setTo("9197****1@qq.com");
messageHelper.setSubject("测试邮件中嵌套图片!!"); // true 表示启动HTML格式的邮件 messageHelper.setText( "<html><head></head><body><h1>hello!!spring image html mail</h1>" +"<a href=http://www.baidu.com>baidu</a>" + "<img src=cid:image/></body></html>", true);
FileSystemResource img = new FileSystemResource(new File("单.png"));
messageHelper.addInline("image", img);//跟cid一致
sender.send(mailMessage); System.out.println("邮件发送成功...");
}
}
|
7. 发送带附件的邮件
importjava.io.File;
importjavax.mail.MessagingException; importjavax.mail.internet.MimeMessage;
importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importorg.springframework.core.io.FileSystemResource; importorg.springframework.mail.javamail.JavaMailSenderImpl; importorg.springframework.mail.javamail.MimeMessageHelper;
public class SpringAttachedImageMail {
public static voidmain(String[] args) throws MessagingException {
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml"); JavaMailSenderImpl sender = (JavaMailSenderImpl) ctx
.getBean("mailSender"); MimeMessage mailMessage = sender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true); messageHelper.setFrom("9197****1@qq.com"); messageHelper.setTo("9197****1@qq.com");
messageHelper.setSubject("测试邮件中嵌套图片!!"); // true 表示启动HTML格式的邮件 messageHelper.setText( "<html><head></head><body><h1>hello!!spring image html mail</h1>" +"<a href=http://www.baidu.com>baidu</a>" + "<img src=cid:image/></body></html>", true);
FileSystemResource img = new FileSystemResource(new File("单.png"));
messageHelper.addAttachment("单.png", file);//添加到附件
sender.send(mailMessage); System.out.println("邮件发送成功...");
}
}
|
8. 用户注册时的邮件发送
public void saveOrUpdate(User entity) { if(UtilFuns.isEmpty(entity.getId())){ //说明是新增 String id = UUID.randomUUID().toString(); entity.setId(id); entity.getUserInfo().setId(id);//基于一对一的主键关联
//引入Shiro后,进行密码的初始化 entity.setPassword(Encrypt.md5(SysConstant.DEFAULT_PASS, entity.getUserName()));
baseDao.saveOrUpdate(entity);
//发送邮件 mailMessage.setSubject("你好"); mailMessage.setText("尊敬的"+entity.getUserInfo().getName()+",您的用户名:"+entity.getUserName()+",初始密码为:123456"); mailMessage.setTo(entity.getUserInfo().getEmail()); mailSender.send(mailMessage); }else{ baseDao.saveOrUpdate(entity); }
} |
注意,在注册邮箱时,为了能发送成功,请进行如下调整。