URL original: SpringBoot: el método para enviar correos electrónicos (con ejemplos)
Introducción
Este artículo presenta cómo SpringBoot envía correos electrónicos (con ejemplos).
confiar
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
configuración
163 configuración de buzón
aplicación.yml
spring:
mail:
default-encoding: UTF-8
# 发送邮件服务器主机名,定值,来自QQ邮箱官网
host: smtp.163.com
# 163邮箱账号,你自己的奥
username: [email protected]
# 来自163邮箱官网的授权码,不是163邮箱密码奥
password: yyyzzz
# 端口号465或944,经过我的测试,发现两个都能用
port: 465
# 使用SSL方式
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
163 Cómo obtener el código de autorización del buzón (correspondiente a spring.mail.password arriba)
Para habilitar el servicio IMAP/SMTP, es posible que deba usar su teléfono móvil para enviar un código de verificación, solo envíelo según sea necesario, de la siguiente manera:
Configuración del buzón QQ
aplicación.yml
spring:
mail:
default-encoding: UTF-8
# 发送邮件服务器主机名,定值,来自QQ邮箱官网
host: smtp.qq.com
# 163邮箱账号,你自己的奥
username: [email protected]
# 来自QQ邮箱官网的授权码,不是QQ邮箱密码奥
password: yyyzzz
# 端口号465或587,但是经过我的测试,发现只有587能用
port: 587
# 使用SSL方式
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
Cómo obtener el código de autorización del buzón QQ (correspondiente a spring.mail.password arriba)
Si necesita realizar la autenticación del teléfono móvil o el token del teléfono móvil de QQ Security Center durante el proceso de obtención del código de autorización, simplemente siga las instrucciones para verificarlo y lo siguiente no se lo recordará.
Busque "QQ Mailbox" en Baidu, ingrese al sitio web oficial e inicie sesión y haga clic en Configuración (también puede ingresar al buzón desde QQ)
Como se muestra abajo:
Haga clic en la cuenta, de la siguiente manera:
Desplácese hacia abajo en la página, busque "POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV Service" y habilite "POP3/SMTP Service" y "IMAP/SMTP Service", como se muestra a continuación:
Haga clic en Generar código de autorización y copie el código de autorización de la siguiente manera:
Interpretación de los nombres de host del servidor de correo saliente
Encuentre el lugar para iniciar el servicio mencionado anteriormente, haga clic en el enlace como se muestra a continuación:
enviar texto sin formato
el código
package com.example.knife.controller;
import com.example.knife.entity.User;
import freemarker.template.Template;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "发送邮件")
@RestController
@RequestMapping("mail")
public class MailController {
@Autowired
private JavaMailSender javaMailSender;
// 发件人邮箱账号
private String from = "[email protected]";
// 收件人邮箱账号
private String[] to = {"[email protected]"};
// 抄送人邮箱账号
private String[] cc = {"[email protected]"};
// 隐秘抄送人邮箱账号
private String[] bcc = {"[email protected]"};
@ApiOperation("发送简单邮件")
@PostMapping("sendSimpleMail")
public String sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
// 发件人,不能省略
message.setFrom(from);
// 收件人,可以是多个,不能省略
message.setTo(to);
// 邮件标题,可以省略,省略之后展示的是:<无标题>
message.setSubject("简单邮件");
// 邮件正文,一定不能少,不然会报错,不能省略
message.setText("你好,您的验证码是:" + "123456");
// 设置邮件抄送人,可以有多个,可以省略
message.setCc(cc);
// 设置隐秘抄送人,可以有多个,可以省略
message.setBcc(bcc);
// 发送时间,这样设置的目的:告诉你可以自由设置,可以省略
try {
message.setSentDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse("2028-06-06 00:00:00"));
} catch (ParseException e) {
e.printStackTrace();
}
// 发送
javaMailSender.send(message);
return "发送成功";
}
}
prueba
correo entrante:
enviar archivos adjuntos
el código
package com.example.knife.controller;
import com.example.knife.entity.User;
import freemarker.template.Template;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "发送邮件")
@RestController
@RequestMapping("mail")
public class MailController {
@Autowired
private JavaMailSender javaMailSender;
// 发件人邮箱账号
private String from = "[email protected]";
// 收件人邮箱账号
private String[] to = {"[email protected]"};
// 抄送人邮箱账号
private String[] cc = {"[email protected]"};
// 隐秘抄送人邮箱账号
private String[] bcc = {"[email protected]"};
@ApiOperation("发送附件邮件")
@PostMapping("sendAttachmentMail")
public String sendAttachmentMail() {
// 复杂邮件对象
MimeMessage message = javaMailSender.createMimeMessage();
try {
// MimeMessageHelper对象,用来组装复杂邮件
// 构建方法中第二个参数为true,代表支持替代文本、内联元素和附件
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 发件人,不能省略
helper.setFrom(from);
// 收件人,可以是多个,不能省略
helper.setTo(to);
// 邮件标题,可以省略,省略之后展示的是:<无标题>
helper.setSubject("附件邮件");
// 邮件正文,一定不能少,不然会报错,不能省略
helper.setText("正文");
// 添加附件,第一个参数是附件名称,第二个参数是附件对象
helper.addAttachment("附件1.png", new File("E:\\tmp\\222.png"));
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送
javaMailSender.send(message);
return "发送成功";
}
}
prueba
correo entrante:
HTML (plantilla de FreeMarker)
el código
Controlador
package com.example.knife.controller;
import com.example.knife.entity.User;
import freemarker.template.Template;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "发送邮件")
@RestController
@RequestMapping("mail")
public class MailController {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
// 发件人邮箱账号
private String from = "[email protected]";
// 收件人邮箱账号
private String[] to = {"[email protected]"};
// 抄送人邮箱账号
private String[] cc = {"[email protected]"};
// 隐秘抄送人邮箱账号
private String[] bcc = {"[email protected]"};
@ApiOperation("发送模板邮件")
@PostMapping("sendTemplateMail")
public String sendTemplateMail() {
// 复杂邮件对象
MimeMessage message = javaMailSender.createMimeMessage();
try {
// MimeMessageHelper对象,用来组装复杂邮件
// 构建方法中第二个参数为true,代表支持替代文本、内联元素和附件
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 发件人,不能省略
helper.setFrom(from);
// 收件人,可以是多个,不能省略
helper.setTo(to);
// 邮件标题,可以省略,省略之后展示的是:<无标题>
helper.setSubject("附件邮件");
User user = new User();
user.setName("托尼");
user.setNickName("钢铁侠");
user.setAge(30);
Map<String, Object> model = new HashMap<>();
model.put("user", user);
Template template = freeMarkerConfigurer.getConfiguration().getTemplate("email.ftl");
String emailHtml = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
// 邮件正文,一定不能少,不然会报错,不能省略。第二个参数表示是否是html
helper.setText(emailHtml, true);
} catch (Exception e) {
e.printStackTrace();
}
// 发送
javaMailSender.send(message);
return "发送成功";
}
}
plantilla
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title></title>
<style>
td {
border: black 1px solid;
}
</style>
</head>
<body>
<h1>用户的信息</h1>
<table style="border: black 1px solid;width: 750px">
<tr>
<td>姓名</td>
<td>昵称</td>
<td>年龄</td>
</tr>
<tbody>
<tr>
<td>${user.name}</td>
<td>${user.nickName}</td>
<td>${user.age}</td>
</tr>
</tbody>
</table>
</body>
</html>
prueba
correo entrante: