当前位置: 移动技术网 > IT编程>开发语言>Java > spring mail借助qq邮箱服务器发送邮件

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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);

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网