1、传统方式发送邮件
引入jar包
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.6.0</version> </dependency>
实体类:MailInfo.java
public class MailInfo {
private String mailServerHost; //服务器主机号
private String mailServerPort; //服务器端口
private String fromAddress; //发送者地址
private String userName; //发送者账号
private String password; //发送者密码
// 是否需要身份验证
private boolean validate = false;
private String toAddress; //收件人地址
private String subject; //邮件主题
private String content; //邮件内容
/*
* 获得邮件会话属性
*/
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost); //邮件主机服务器
p.put("mail.smtp.port", this.mailServerPort); //端口号
p.put("mail.smtp.auth", "true");
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
验证类:MyAuthenticator.java
public class MyAuthenticator extends Authenticator{
String userName = null;
String password = null;
public MyAuthenticator(String userName,String password) {
this.userName = userName;
this.password = password;
}
//验证用户名密码
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,password);
}
}
邮件发送:MailSender .java
public class MailSender {
public boolean sendtextMail(MailInfo mailInfo) {
// 判断是否需要身份验证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
// 根据邮件会话属性和密码构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 通过session创建邮件信息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
mailMessage.setFrom(from);
Address to = new InternetAddress(mailInfo.getToAddress());
// RecipientType.TO 接受者类型,qq 163 等
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置发送时间
mailMessage.setSentDate(new Date());
// 创建容器类
Multipart multipart = new MimeMultipart();
// 创建一个包含HTML容器的bodypart
BodyPart html = new MimeBodyPart();
html.setContent(mailInfo.getContent(), "text/html;charset=utf-8");
multipart.addBodyPart(html);
mailMessage.setContent(multipart);
// 发送
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
Transport.send(mailMessage);
System.out.println("成功....");
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("失败....");
return false;
}
}
}
测试类
public class TestMail {
public static void main(String[] args) {
MailInfo mailInfo = new MailInfo();
mailInfo.setMailServerHost("smtp.qq.com");//主机地址
mailInfo.setMailServerPort("25"); //主机端口
mailInfo.setUserName("123456789"); //邮箱账号
mailInfo.setPassword("mipqxcnmlzpyecib"); //邮箱密码
mailInfo.setFromAddress("123456789@qq.com"); //发送地址
// 接收者信息
mailInfo.setToAddress("789456123@qq.com"); //收件地址
mailInfo.setSubject("测试"); //邮件标题
mailInfo.setContent("<div style='width:500px;height:300px;background-color:pink'><h2><font color=red>邮件测试</font></h2></div>");
// mailInfo.setContent("啦啦啦");
MailSender ms = new MailSender();
ms.sendtextMail(mailInfo);
}
}
2、Spring通过mailSender进行发送邮件
public class ComplexMailTest {
public static void main(String[] args) throws MessagingException {
String[] arr = {"123456789@qq.com","456789@163.com"};
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-mail.xml");
JavaMailSender sender = (JavaMailSender) ac.getBean("mailSender");
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true); //true带图片带附件必须设置
helper.setFrom("789456123@qq.com");
helper.setTo(arr);
helper.setSubject("附件测试!!!");
//true代表前面的文本可以当成html标签进行解析
helper.setText("<html><head></head><body><h1>王者荣耀!!!</h1><a href=http://www.baidu.com>百度</a><img src='cid:image' /></body></html>", true);
//添加了一个图片的附件
helper.addInline("image", new FileSystemResource(new File("E:/测试.png")));
//添加附件
helper.addAttachment("邮箱测试.docx", new FileSystemResource(new File("E:/邮箱测试.docx")));
sender.send(message);
}
}
配置文件:applicationContext-mail.xml
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<description>mail</description>
<context:property-placeholder location="classpath:mail.properties"/>
<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
<property name="from">
<value>${mail.from}</value>
</property>
<!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->
</bean>
<!-- 申明JavaMailSenderImpl对象 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="defaultEncoding" value="UTF-8" />
<property name="host" value="${mail.host}" />
<property name="username" value="${mail.username}" />
<property name="password" value="${mail.password}" />
<property name="javaMailProperties">
<props>
<!-- 设置认证开关 -->
<prop key="mail.smtp.auth">true</prop>
<!-- 启动调试开关 -->
<prop key="mail.debug">true</prop>
<!-- 设置发送延时 -->
<prop key="mail.smtp.timeout">0</prop>
</props>
</property>
</bean>
</beans>
发送账号信息:mail.properties
mail.host=smtp.qq.com
//发送账号
mail.username=123456789@qq.com
//发送授权码
mail.password=hrgqsktjsxlmdjgb
mail.from=123456789@qq.com