Java邮件服务学习之四:邮箱服务客户端Spring Mail
一、Spring Mail API
Spring邮件抽象层的主要包为org.springframework.mail,Spring提供的邮件发送不仅支持简单邮件的发送、添加附件。
1、邮件发送的核心接口:MailSender,实现类JavaMailSenderImpl;
2、邮件对象:SimpleMailMessage 封装了简单邮件的属性如from, to,cc, subject,text;
org.springframework.mail.javamail.JavaMailSender和org.springframework.mail.javamail.MimeMessagePreparator, 用于准备JavaMail的MIME信件。
引入相关jar包:spring 相关jar包 mail.jar 和 activation.jar
二、Spring mail 发送邮件
1、配置
(1)mail.properties
# mail host
mail.host=smtp.163.com
# smtp port
mail.port=25
mail.encoding=UTF-8
mail.smtp.auth=true
# request timeout
mail.smtp.timeout=25000
mail.username=cac2020@163.com
mail.password=123456
mail.from=email@163.com;
(2)spring-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"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 扫描该包下的Bean -->
<context:component-scan base-package="com.jeecg.mail" /> <!-- 加载Properties文件 -->
<context:property-placeholder location="classpath:mail.properties" /> <!-- 邮件发送 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>${mail.host}</value>
</property>
<property name="username">
<value>${mail.username}</value>
</property>
<property name="password">
<value>${mail.password}</value>
</property>
<property name="port">
<value>${mail.port}</value>
</property>
<property name="defaultEncoding">
<value>${mail.encoding}</value>
</property>
<property name="protocol">
<value>smtp</value>
</property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
<!-- <prop key="mail.smtp.starttls.enable">true</prop> 取决于使用的邮件服务是否支持STARTTLS加密 -->
<!-- <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 取决于是否使用SSL端口发送邮件-->
<prop key="mail.smtp.socketFactory.fallback">false</prop>
<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
<!-- <prop key="mail.sendTo">${mail.sendTo}</prop> -->
<prop key="mail.debug">true</prop>
</props>
</property>
</bean> <!-- 异步线程 -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="30" />
</bean>
</beans>
(3)发送邮件
package com.jeecg.mail.controller; import javax.mail.MessagingException;
import javax.servlet.http.HttpServletRequest; import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import com.jeecg.mail.service.MailServiceImpl; @Scope("prototype")
@Controller
@RequestMapping("/MailController")
public class MailController extends BaseController
{
@Autowired
private MailServiceImpl mailService; @RequestMapping(params = { "mail", "page" })
public ModelAndView mail(@RequestParam("page") String page,HttpServletRequest request)
{
ModelAndView modelAndView = new ModelAndView(page);
return modelAndView;
} @RequestMapping(params = "sendTextMail", method = { RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public AjaxJson sendTextMail()
{
AjaxJson json = new AjaxJson();
try
{
mailService.sendTextMail("cac2020@163.com", "530589482@qq.com", "cac2020@126.com", "【测试】发送一个纯文本邮件",
"哈哈哈哈哈哈 这是一个纯文本邮件");
}
catch (Exception e)
{
json.setMsg(e.getMessage());
e.printStackTrace();
}
return json;
} @RequestMapping(params = "sendHTMLMail", method = { RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public AjaxJson sendHTMLMail()
{
AjaxJson json = new AjaxJson();
try
{
mailService.sendHTMLMail("cac2020@163.com", "530589482@qq.com", "cac2020@126.com", "【测试】发送一个HTML邮件",
"<html><head></head><body><h1>hello!!spring html Mail</h1></body></html>");
}
catch (MessagingException e)
{
e.printStackTrace();
json.setMsg(e.getMessage());
}
return json;
} @RequestMapping(params = "sendImageMail", method = { RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public AjaxJson sendImageMail(HttpServletRequest request)
{
AjaxJson json = new AjaxJson();
try
{
String jpgpath = request.getSession().getServletContext().getRealPath("/images/1.jpg");
mailService.sendImageMail("cac2020@163.com", "530589482@qq.com", "cac2020@126.com", "【测试】发送一个含图片邮件",
"<html><head></head><body><h1>hello!!spring image html mail</h1><img src=\"cid:1\"/></body></html>",
"1",
jpgpath);
}
catch (MessagingException e)
{
e.printStackTrace();
json.setMsg(e.getMessage());
}
return json;
} @RequestMapping(params = "sendAttachMail", method = { RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public AjaxJson sendAttachMail(HttpServletRequest request)
{
AjaxJson json = new AjaxJson();
try
{
String filepath = request.getSession().getServletContext().getRealPath("/images/测试.rar");
mailService.sendAttachMail("cac2020@163.com", "530589482@qq.com", "cac2020@126.com", "【测试】发送一个含附件邮件",
"",
"测试.rar",
filepath);
}
catch (MessagingException e)
{
e.printStackTrace();
json.setMsg(e.getMessage());
}
return json;
} }
注意:
1、Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer(或<context:property-placeholder/>),其余的会被Spring忽略掉
Spring 配置文件中<context:property-placeholder/>标签如果有多个properties文件 location='classpath:db.properties,classpath:default.properties,classpath:default3.properties,classpath:default2.properties'
参考:
http://blog.csdn.net/smcwwh/article/details/7095027
http://blog.csdn.net/zheng0518/article/details/50179213
http://www.oschina.net/code/snippet_2416648_55116
http://blog.csdn.net/zh921112/article/details/38397801
http://blog.csdn.net/houxuehan/article/details/52184736
http://www.zgxue.com/167/1677686.html
Java邮件服务学习之四:邮箱服务客户端Spring Mail的更多相关文章
- 搭建服务与负载均衡的客户端-Spring Cloud学习第二天(非原创)
文章大纲 一.Eureka中的核心概念二.Spring RestTemplate详解三.代码实战服务与负载均衡的客户端四.项目源码与参考资料下载五.参考文章 一.Eureka中的核心概念 1. 服务提 ...
- 微服务学习一 微服务session 管理
集群和分布式架构中: session管理有三种方法: 1: Cookie: 将Session对象保存在Cookie,保存在浏览器端.浏览器发送请求的时候,会把整个session放在请求里一起发送到se ...
- spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)
一,网站哪些情况下需要发送电子邮件? 作为一个电商网站,以下情况需要发邮件通知用户: 注册成功的信息 用邮箱接收验证码 找回密码时发链接 发送推广邮件 下单成功后的订单通知 给商户的对账单邮件 说明: ...
- 【Java语言特性学习之四】常用集合
java中常见的数据结构
- Springboot集成邮箱服务发送邮件
一.前言 Spring Email 抽象的核心是 MailSender 接口,MailSender 的实现能够把 Email 发送给邮件服务器,由邮件服务器实现邮件发送的功能. Spring 自带了一 ...
- Java邮件服务学习之三:邮箱服务客户端-Java Mail
一.java mail的两个JAR包 1.mail.jar:不在JDK中,核心功能依赖JDK4及以上,该jar包已经加入到java EE5: 下载地址:http://www.oracle.com/te ...
- Java邮件服务学习之一:邮件服务概述
java可以提供邮件服务:一般理解的邮件服务就是可以发送和接收邮件的客户端,另外就是使用java编写邮件服务端:两者区别在于客户端只负责给终端客户收发邮件,就相当于小区楼下的那一排排的铁皮邮箱盒,而邮 ...
- java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况
java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况 邮件短信微服务 spring boot 微服务 接收json格式参数 验证参数合 ...
- gRPC学习之四:实战四类服务方法
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- Pig简单入门
pig是hadoop客户端,使用类似于SQL的面向数据流的语言pig latin,这个语言可以完成排序,过滤,求和,关联等操作,可以支持自定义函数.Pig自动把pig latin 映射为Map-Red ...
- java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较
1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特 ...
- linux中压缩与解压缩命令小结
linux中压缩与解压操作非常常见,其命令参数也非常的多,这里只介绍最经常用的带打包文件的几种压缩和解压方式和几个最常用的参数. 现在最常用的压缩和解压工具是gzip和bzip2,这两种工具不能相互解 ...
- poj 1061 青蛙的约会(扩展gcd)
题目链接 题意:两只青蛙从数轴正方向跑,给出各自所在位置, 和数轴长度,和各自一次跳跃的步数,问最少多少步能相遇. 分析:(x+m*t) - (y+n*t) = p * L;(t是跳的次数,L是a青蛙 ...
- bzoj3140
首先考虑二维的情况 min(x,y)也就意味着确定最小后,另外一维肯定打满 然后最小那个如果是k的话就相当于用k*1次——这不就是行列覆盖吗,二分图秒之 三维呢?考虑到a*b*c<=5000也就 ...
- WDF模型驱动程序开发
WDF驱动程序开发 1. 引言 设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作.设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设 ...
- nginx - conf.d vs sites-available
自己理解: conf.d - 扩展配置文件,用户配置文件 sites-available - 配置 虚拟主机(nginx支持多个虚拟主机,sites-enabled(存放 软链接,指向sites-av ...
- 【C#学习笔记】List容器使用
using System; using System.Collections.Generic; namespace ConsoleApplication { class Program { stati ...
- P2P直播、点播技术学习经验
自8月份以来一直埋头学习P2P在音/视频直播.点播上的学习,受到不少网友的帮助,在此也留下自己学到的一点点的经验. 第一个接触的开源项目是peercast,应该说上手非常快,这必须感谢王浩聪的注释版, ...
- Oracle IO优化心得
很多的时侯,做Oracle DBA的我们,当应用管理员向我们通告现在应用很慢.数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各 ...