一、用普通java发送:
1、引入依赖jar包
<dependencies>
<!-- Javamail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
</dependencies>
2、创建发送邮件的工具类,详情如下:
package com.fh;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Map;
import java.util.Properties;
public class Demo1 {
/**
* 发送邮件的工具类
* @param recipientMap 收件人信息,map可对多个对象进行发送,map的key是邮箱,value是收取方式,支持发送to,抄送cc:抄送对象与发送对象互相可见,密送bcc:密送对象单方面可见发送和抄送的对象
* @param subject 邮件的主题
* @param content 邮件的正文
* @throws Exception
*/
public static void sendMail(Map<String,String> recipientMap, String subject, String content) throws Exception{
//发件属性
Properties properties = new Properties();
//连接协议
properties.put("mail.transport.protocol","smtp");
//发件服务器的主机地址,用谁的服务器(腾讯邮箱、网易邮箱等)设置谁的smtp地址,需要去对应邮箱网站上查询获得,本例为网易163
properties.setProperty("mail.smtp.host","smtp.163.com");
//发送服务器的端口号
//properties.put("mail.smtp.port",25);//25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。
//465端口为SMTP为基于smtp协议的变种协议,替代25端口,安全性更高
properties.put("mail.smtp.port",465);
// 设置是否使用ssl安全连接 ---一般都使用,与端口465组合使用
properties.put("mail.smtp.ssl.enable", "true");
//设置发件必须认证
properties.setProperty("mail.smtp.auth","true");
//创建发件会话
Session session = Session.getInstance(properties);
//设置debug
session.setDebug(true);
//由发件的会话创建邮件消息对象
MimeMessage message = new MimeMessage(session);
//设置消息内容
//设置邮件来源:发件人的邮箱
message.setFrom(new InternetAddress("xxxx@163.com"));
//设置邮件的接收:收件人的邮箱.第一个参数:TO 发送 CC 抄送 BCC 密送
for (Map.Entry<String,String> me : recipientMap.entrySet()) {
String mail = me.getKey();
String type = me.getValue();
if ("to".equalsIgnoreCase(type)) {
//发送
message.setRecipient(Message.RecipientType.TO,new InternetAddress(mail));
}else if ("cc".equalsIgnoreCase(type)) {
//抄送
message.setRecipient(Message.RecipientType.CC,new InternetAddress(mail));
} else if ("bcc".equalsIgnoreCase(type)) {
//密送
message.setRecipient(Message.RecipientType.BCC,new InternetAddress(mail));
}
}
//邮件主题
message.setSubject(subject);
//邮件内容
message.setText(content);
//利用当前使用协议,获取发送器对象
Transport transport = session.getTransport("smtp");
//利用发送器对象获取连接,因为上文自己设置的需要认证,因此要阐明发件人登陆的用户名和密码
transport.connect("xxxx","pppp");
//12.发送,参2表示对所有收件人均发送信息
transport.sendMessage(message,message.getAllRecipients());
//13.释放资源
transport.close();
}
}
二:集成spring发送:
1、增加spring依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
2、新建配置文件mail.properties:
#发件箱名称。即:从哪个邮箱发出
mail.from=aaaa@163.com
#指定smtp服务器的地址。即:从哪个服务器发出
mail.host=localhost
#指定smtp服务器的端口
mail.port=25
#指定发件箱的登录用户名
mail.username=aaaa
#指定发件箱的登录密码
mail.password=pppp
#指定发送邮件所用的编码
mail.encoding=UTF-8
#指定发送邮件所用的协议。不写默认也是smtp协议。
mail.protocol=smtp
3、新建spring容器的配置文件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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--加载配置文件,引入其内各个属性,可被直接调用-->
<context:property-placeholder location="classpath:mail.properties"/>
<!--配置消息对象:发送什么-->
<bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">
<!-- 此时我们只需要注入发件箱名称即可。不要注入主题,正文,收件箱等等信息,
因为那些信息是不固定的,在使用本配置文件的类中随时更改配置 -->
<property name="from" value="${mail.from}"/>
</bean>
<!--配置发送器:用什么发送-->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="username" value="${mail.username}"/>
<property name="password" value="${mail.password}"/>
<property name="host" value="${mail.host}"/>
<property name="protocol" value="${mail.protocol}"/>
<property name="defaultEncoding" value="${mail.encoding}"/>
<property name="port" value="${mail.port}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop><!-- 是否需要验证 -->
<prop key="mail.debug">true</prop><!-- 是否需要debug的信息 -->
<prop key="mail.smtp.timeout">0</prop><!-- 设置发送超时时间,以秒为单位。0为永不超时 -->
</props>
</property>
</bean>
</beans>
4、在测试类中使用:
package com.fh.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
public class MailTest {
public static void main(String[] args) {
//获取spring容器
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-mail.xml");
//获取spring内管理的简单消息对象
SimpleMailMessage simpleMailMessage = applicationContext.getBean("simpleMailMessage", SimpleMailMessage.class);
//设置发送地址
simpleMailMessage.setTo("demo1@163.com");
simpleMailMessage.setCc("demo2@163.com");
simpleMailMessage.setBcc("demo3@163.com");
//设置发送消息主题
simpleMailMessage.setSubject("爱德华");
//设置发送消息内容
simpleMailMessage.setText("钢之炼金术师就是我咯");
//获取发送器
JavaMailSenderImpl javaMailSender = applicationContext.getBean("javaMailSender", JavaMailSenderImpl.class);
//由于配置文件配置好了,所以直接利用发送器发送邮件
javaMailSender.send(simpleMailMessage);
}
}
三、spring集成下的复杂文件类型邮件(带图片、附件):
测试类中:
package com.fh.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.internet.MimeMessage;
public class MailTest {
public static void main(String[] args) throws Exception {
//获取spring容器
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-mail.xml");
//由容器获取发送器
JavaMailSenderImpl javaMailSender = applicationContext.getBean("javaMailSender", JavaMailSenderImpl.class);
//设置发送复杂消息的复杂消息对象
/**
* 在此说明mime类型:Multipurpose Internet Mail Extensions(多用途互联网邮件扩展类型),由其确定传输文件类型,只要独立进入网络(互联网/局域网)传输的文件都具有mime类型
* 如css引入主题文件时:<link rel="stylesheet" href="xxx.css" type="text/css"></> rel表示引入文件与本文件的关系,href为引入文件的地址,type表示该独立传入的引入文件的mime类型
*/
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//利用复杂消息对象,新建复杂邮件消息拼装帮助器,设置虽然是利用帮助对象,但其实内容本身还是设置到了消息对象上,参2的true表示支持multipart
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//设置主题
helper.setSubject("带有图片和附件的邮件");
//设置内容,参2为true表示开启html格式设置,注意html中cid:image后的空格
helper.setText("<html><head></head><body><div>动漫图片范例</div><img src=cid:image /></body></html>",true);
//用待传入图片建立文件源
FileSystemResource resource = new FileSystemResource("C:\\testdemo\\1000.jpg");
//将文件源指向cid
helper.addInline("image",resource);
//利用文件源,设置发送邮件的附件
helper.addAttachment("就是这张咯.jpg",resource);
//设置收件地址
helper.setTo("aaa@163.com");
//设置发件地址
helper.setFrom("bbb@163.com");
//发送邮件
javaMailSender.send(mimeMessage);
}
}