spring mail借助qq邮箱服务器发送邮件

 更新时间:2016年12月12日 17:07:17   作者:凌承一  
这篇文章主要介绍了spring mail借助qq邮箱服务器发送邮件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件

配置qq邮箱,“设置”——“账户”,打开smtp服务,生成授权码

生成授权码需要验证手机,接下来用qq邮箱账号和授权码就可以发送邮件了,不需要qq密码

spring mail服务在spring-context-support中,配置依赖,然后就可以借助qq邮箱提供的发件服务器发送邮件了

<dependency>
 <groupId>javax.mail</groupId>
 <artifactId>mail</artifactId>
 <version>1.4.7</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-support</artifactId>
 <version>3.2.17.RELEASE</version>
</dependency>

普通文本邮件

首先测试的是普通文本邮件

package com.xmyself.mail;
 
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
 
public class Main {
 public static void main(String[] args) {
  JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
  mailSender.setHost("smtp.qq.com");
  mailSender.setPort(587);
  mailSender.setUsername("573215750@qq.com");
  mailSender.setPassword("dsruklozelxcbdba");//授权码
   
  SimpleMailMessage mail = new SimpleMailMessage();
  mail.setTo("573215750@qq.com");
  mail.setFrom("573215750@qq.com");
  mail.setSubject("test mail");
  mail.setText("test mail content");
   
  mailSender.send(mail);
  System.out.println("success");
 }
}

运行,即可发送一封email,注意:授权码而不是密码,端口并不是25而是587

接下来,保持mailSender不变,修改mail类型,发送内容丰富的邮件

简单html邮件

让邮件内容以html格式展现,只需要修改如下

MimeMessage mail = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mail, true);//true用来打开multipart模式,添加图片或附件
 
helper.setTo("573215750@qq.com");
helper.setFrom("573215750@qq.com");
helper.setSubject("test mail");
helper.setText("<html><head></head><body>"
  + "<h1>hello!!spring html Mail</h1>"
  + "</body></html>"
  , true);

依然使用mailSender发送这个mail

mailSender.send(mail);

带图片的html邮件

在邮件的html内容中插入图片显示,修改text内容即可

helper.setText("<html><head></head><body>"
  + "<h1>hello!!spring html Mail</h1>"
  + "<img src=\"cid:image\" />"
  + "</body></html>"
  , true);
FileSystemResource image = new FileSystemResource(new File("d:/test.jpg"));
helper.addInline("image", image);

带附件的html邮件

为邮件添加附件,text内容不变,只需要修改如下

helper.setText("<html><head></head><body>"
  + "<h1>hello!!spring html Mail</h1>"
  + "</body></html>"
  , true);
FileSystemResource image = new FileSystemResource(new File("d:/test.jpg"));
helper.addAttachment("test.jpg", image);

freemarker模板邮件

html内容通常非常丰富,直接写在setText()方法中实在太乱了,所以,应该将html作为一个文件单独管理,然后用工具将其内容转换为字符串,作为setText()的参数,下面以freemarker模板引擎为例

在工程src/main/resources目录下新建templates目录,里面放一个test.ftl文件,内容如下

<html>
 <head></head>
 <body>
  <p>test freemarker template, welcome ${username}</p>
  <img src="cid:image" />
 </body>
</html>

然后,用freemarker和spring提供的工具将内容转换为字符串,这当然需要依赖新的jar

<dependency>
 <groupId>org.freemarker</groupId>
 <artifactId>freemarker</artifactId>
 <version>2.3.23</version>
</dependency>

新建FreemarkerParser.java

package com.xmyself.mail;
 
import java.util.Map;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import freemarker.template.Configuration;
import freemarker.template.Template;
 
public class FreemarkerParser {
 public String toHtmlString(String name, Map<String, String> data) {
  @SuppressWarnings("deprecation")
  Configuration config = new Configuration();
  config.setClassForTemplateLoading(this.getClass(), "/templates/");
  try {
   Template template = config.getTemplate(name);
   return FreeMarkerTemplateUtils.processTemplateIntoString(template, data);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return "fail";
 }
}

用map中的值替换掉模板中的${}内容,将模板文件转换为String字符串

注意:过程中模板路径的配置与读取是个麻烦事,暂时以这种方式处理

发送邮件的代码只需要非常小的变化

Map<String, String> data = new HashMap<String, String>();
data.put("username", "chengyi");
String text = new FreemarkerParser().toHtmlString("test.ftl", data);
 
helper.setText(text, true);
FileSystemResource image = new FileSystemResource(new File("d:/test.jpg"));
helper.addInline("image", image);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 全面系统介绍反射的运用

    Java 全面系统介绍反射的运用

    准备入手学习java的安全了,感觉这也是一个大的趋势,想着尽早进入到java安全的探索中,在反序列化链的学习之前,需要先学习反射,不多说了,开干吧
    2022-03-03
  • JAVA设计模式中的策略模式你了解吗

    JAVA设计模式中的策略模式你了解吗

    这篇文章主要为大家详细介绍了JAVA设计模式中的策略模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • RandomAccessFile简介_动力节点Java学院整理

    RandomAccessFile简介_动力节点Java学院整理

    RandomAccessFile 是随机访问文件(包括读/写)的类。它支持对文件随机访问的读取和写入,即我们可以从指定的位置读取/写入文件数据。这篇文章主要介绍了RandomAccessFile简介,需要的朋友可以参考下
    2017-05-05
  • Java字节流与基本数据类型的转换实例

    Java字节流与基本数据类型的转换实例

    本篇文章主要介绍了Java字节流与基本数据类型的转换实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringBoot+SpringSecurity实现基于真实数据的授权认证

    SpringBoot+SpringSecurity实现基于真实数据的授权认证

    Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,Spring Security主要做两个事情,认证、授权。这篇文章主要介绍了SpringBoot+SpringSecurity实现基于真实数据的授权认证,需要的朋友可以参考下
    2021-05-05
  • Java实战之用hutool-db实现多数据源配置

    Java实战之用hutool-db实现多数据源配置

    在微服务搭建中经常会使用到多数据库情形这个时候,下面这篇文章主要给大家介绍了关于Java实战之用hutool-db实现多数据源配置的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Java中spring boot 字符串判断是否为空方法小结

    Java中spring boot 字符串判断是否为空方法小结

    这篇文章主要介绍了Java中spring boot字符串判断是否为空,通过安装依赖,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Scala求和示例代码

    Scala求和示例代码

    这篇文章主要介绍了Scala求和示例代码,需要的朋友可以参考下
    2019-06-06
  • idea2023.3安装及配置详细图文教程

    idea2023.3安装及配置详细图文教程

    IDEA全称IntelliJ IDEA,是Java语言对的集成开发环境,IDEA在业界被认为是公认最好的Java开发工具,这篇文章主要给大家介绍了关于idea2023.3安装及配置的相关资料,需要的朋友可以参考下
    2023-11-11
  • SpringBoot3结合gRpc实现远程服务调用的流程步骤

    SpringBoot3结合gRpc实现远程服务调用的流程步骤

    gRPC是一个现代开源高性能远程过程调用(RPC)框架,可以在任何环境中运行,它由Google开发,旨在帮助开发人员更轻松地构建分布式应用,特别是当代码可能在不同地方运行的时候,本文介绍了SpringBoot3结合gRpc实现远程服务调用的流程步骤,需要的朋友可以参考下
    2024-07-07

最新评论