Spring邮件发送
一、前期准备工作(163网易邮箱为例)
开启POP3/SMTP/IMAP服务,需要短信验证
二、java Email邮件发送
1、创建一个工程
2、添加依赖
<!--java Mail-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
3、java代码
发送普通文本的邮件
package com.whq.mail;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
/**
*
* 发送普通文本文件
* 使用javamail发送邮件步骤
* 1、创建session对象,加载properties对象
* 2、通过session对象得到transport对象
* 3、使用邮箱的用户名和密码连接邮件服务器
* 4、设置message邮件对象
* 5、发送邮件
*/
public class MailTest01 {
public static void main(String[] args) throws MessagingException {
//设置邮箱服务器的相关配置
Properties properties = new Properties();
//设置邮箱服务器的主机名
properties.setProperty("mail.smtp.host", "smtp.163.com");
//设置邮箱服务器的端口
properties.setProperty("mail.smtp.port","25");
//设置邮箱服务器是否需要身份认证
properties.setProperty("mail.smtp.auth", "true");
/*使用javamail发送文件*/
//* 1、创建session对象,加载properties对象
Session session = Session.getInstance(properties);
//开启session的debug模式。可以在控制台看到邮件的发送运行状态
session.setDebug(true);
//* 2、通过session对象得到transport对象
Transport transport = session.getTransport();
//* 3、使用邮箱的用户名和密码连接邮件服务器(用户名,密码:授权码)
transport.connect("smtp.163.com","用户名","授权码");
//* 4、设置message邮件对象
Message message = createSimpleMail(session);
//* 5、发送邮件
transport.sendMessage(message,message.getAllRecipients());
//6、关闭transport传输对象
transport.close();
}
/**
* 普通文本的邮件
* 创建一封普通文本邮件
* @param session
* @return
*/
private static Message createSimpleMail(Session session) throws MessagingException {
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//创建邮件的发送人
message.setFrom("用户名@163.com");
//设置邮件的接受人(发件人和收件人是同一个人)
message.setRecipient(Message.RecipientType.TO,new InternetAddress("用户名@163.com"));
//设置邮件的主题
message.setSubject("测试文本邮件");
//设置邮件的发送日期
message.setSentDate(new Date());
//设置邮件的发送内容
message.setText("你好这是一封测试邮件");
//返回封装好的邮件对象
return message;
}
}
运行之后邮箱会收到邮件
发送HTML文本的邮件
package com.whq.mail;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;
/**
*
* 发送html文件
* 使用javamail发送邮件步骤
* 1、创建session对象,加载properties对象
* 2、通过session对象得到transport对象
* 3、使用邮箱的用户名和密码连接邮件服务器
* 4、设置message邮件对象
* 5、发送邮件
*/
public class MailTest02 {
public static void main(String[] args) throws MessagingException {
//设置邮箱服务器的相关配置
Properties properties = new Properties();
//设置邮箱服务器的主机名
properties.setProperty("mail.smtp.host", "smtp.163.com");
//设置邮箱服务器的端口
properties.setProperty("mail.smtp.port","25");
//设置邮箱服务器是否需要身份认证
properties.setProperty("mail.smtp.auth", "true");
/*使用javamail发送文件*/
//* 1、创建session对象,加载properties对象
Session session = Session.getInstance(properties);
//开启session的debug模式。可以在控制台看到邮件的发送运行状态
session.setDebug(true);
//* 2、通过session对象得到transport对象
Transport transport = session.getTransport();
//* 3、使用邮箱的用户名和密码连接邮件服务器(用户名,密码:授权码)
transport.connect("smtp.163.com","ahuwhq","BNODLIFKXKUGQTLH");
//* 4、设置message邮件对象
Message message = createHtmlMail(session);
//* 5、发送邮件
transport.sendMessage(message,message.getAllRecipients());
//6、关闭transport传输对象
transport.close();
}
/**
* 普通html的邮件
* 创建一封普html邮件
* @param session
* @return
*/
private static Message createHtmlMail(Session session) throws MessagingException {
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//设置发件人的邮箱
message.setFrom("ahuwhq@163.com");
//设置收件人的邮箱
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress("ahuwhq@163.com"));
//设置邮件的主题
message.setSubject("测试HTML内容");
//设置邮件发送的时间
message.setSentDate(new Date());
/*准备邮件的数据*/
//设置多媒体对象容器(一个MultiPart对象中可以包含一个或多个BodyPart的对象)
MimeMultipart multipart = new MimeMultipart();
//设置邮件体对象
MimeBodyPart bodyPart = new MimeBodyPart();
//设置HTML内容
StringBuffer sb = new StringBuffer();
sb.append("<html><body><a href='https://www.baidu.com'>百度一下</a></body></html>");
//将HTML内容设置到邮件体对象中
bodyPart.setContent(sb.toString(),"text/html;charset=UTF-8");
//将邮件体对象设置到多媒体对象容器中;
multipart.addBodyPart(bodyPart);
//将多媒体对象容器设置到message邮件对象中
message.setContent(multipart);
//返回创建好的邮件对象
return message;
}
}
发送包含附件的邮件
package com.whq.mail;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;
/**
*
* 发送html文件
* 使用javamail发送邮件步骤
* 1、创建session对象,加载properties对象
* 2、通过session对象得到transport对象
* 3、使用邮箱的用户名和密码连接邮件服务器
* 4、设置message邮件对象
* 5、发送邮件
*/
public class MailTest03 {
public static void main(String[] args) throws MessagingException {
//设置邮箱服务器的相关配置
Properties properties = new Properties();
//设置邮箱服务器的主机名
properties.setProperty("mail.smtp.host", "smtp.163.com");
//设置邮箱服务器的端口
properties.setProperty("mail.smtp.port","25");
//设置邮箱服务器是否需要身份认证
properties.setProperty("mail.smtp.auth", "true");
/*使用javamail发送文件*/
//* 1、创建session对象,加载properties对象
Session session = Session.getInstance(properties);
//开启session的debug模式。可以在控制台看到邮件的发送运行状态
session.setDebug(true);
//* 2、通过session对象得到transport对象
Transport transport = session.getTransport();
//* 3、使用邮箱的用户名和密码连接邮件服务器(用户名,密码:授权码)
transport.connect("smtp.163.com","ahuwhq","BNODLIFKXKUGQTLH");
//* 4、设置message邮件对象
Message message = createAttachMail(session);
//* 5、发送邮件
transport.sendMessage(message,message.getAllRecipients());
//6、关闭transport传输对象
transport.close();
}
/**
* 普通包含附件的邮件
* 创建一封普html邮件
* @param session
* @return
*/
private static Message createAttachMail(Session session) throws MessagingException {
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//设置发件人的邮箱
message.setFrom("ahuwhq@163.com");
//设置收件人的邮箱
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress("1739757230@qq.com"));
//设置邮件的主题
message.setSubject("测试包含附件的邮件");
//设置邮件发送的时间
message.setSentDate(new Date());
/*创建邮件内容*/
//创建邮件正文
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent("<h2>这是一封包含附件的邮件</h2>","text/html;charset=UTF-8");
//创建邮件附件对象
MimeBodyPart attachPart = new MimeBodyPart();
//本地文件
DataHandler df = new DataHandler(new FileDataSource("E:\\邮件附件.txt"));
//将本地文件设置到附件对象中
attachPart.setDataHandler(df);
//设置附件文件名
attachPart.setFileName(df.getName());
//创建多媒体容器对象
MimeMultipart multipart = new MimeMultipart();
//添加正文
multipart.addBodyPart(bodyPart);
//添加附件
multipart.addBodyPart(attachPart);
//如果邮件中要添加附件,设置为mixed
multipart.setSubType("mixed");
//将多媒体容器对象设置到邮件对象
message.setContent(multipart);
//返回创建好的邮件对象
return message;
}
}
三、Spring Email邮件发送
1、添加依赖
<!--spring核心jar依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.4</version>
</dependency>
<!-- spring 上下文环境支持-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.4</version>
</dependency>
<!--java Mail-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
2、代码
首先一个定义接口类
package com.whq.springMail;
/**
* 定义接口类
*/
public interface OrderManager {
void placeOrder();
}
SimpleOrderManager.java
package com.whq.springMail;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class SimpleOrderManager implements OrderManager{
@Resource
private MailSender mailSender;
@Resource
private SimpleMailMessage templateMessage;
@Override
public void placeOrder() {
SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage);
msg.setTo("用户名@163.com");
msg.setText("hello ! Spring mail");
try{
this.mailSender.send(msg);
}
catch (MailException ex) {
System.err.println(ex.getMessage());
}
}
}
MailTest.java
package com.whq.springMail;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MailTest {
public static void main(String[] args) {
//加载spring上下文环境
BeanFactory factory = new ClassPathXmlApplicationContext("spring.xml");
SimpleOrderManager simpleOrderManager = (SimpleOrderManager) factory.getBean("simpleOrderManager");
simpleOrderManager.placeOrder();
}
}
附件的邮件
package com.whq.springMail;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.MailSender;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
public class MailTest02 {
public static void main(String[] args) throws MessagingException {
//加载spring上下文环境
BeanFactory factory = new ClassPathXmlApplicationContext("spring.xml");
//获取邮件发送器的bean对象
JavaMailSender mailSender = (JavaMailSender) factory.getBean("mailSender");
//获取邮件对象
MimeMessage message = mailSender.createMimeMessage();
//设置邮件主题
message.setSubject("Spring Mail测试-附件");
//创建带有附件的消息的帮助类
MimeMessageHelper helper = new MimeMessageHelper(message,true,"UTF-8");
//设置邮件接受者
helper.setTo("用户名@163.com");
//设置邮件的发送者
helper.setFrom("用户名@163.com");
//设置邮件内容
helper.setText("邮件附件测试!");
//设置附件
File file = new File("E:\\邮件附件.txt");
//添加附件
helper.addAttachment(file.getName(),file);
//发送邮件
mailSender.send(message);
}
}
完成即可!