Отправка электронной почты на самом деле является очень распространенным требованием. Она используется при регистрации пользователей, поиске пароля и т. д. Отправлять электронные письма с использованием кода JavaSE довольно обременительно. Spring Boot предоставляет соответствующие классы автоматической настройки для отправки электронной почты. Это делает отправку электронных писем очень простой, это статье мы узнаем! Ознакомьтесь с 5 позами для отправки электронных писем с помощью Spring Boot.
основы почты
Мы часто слышим о различных почтовых протоколах, таких как SMTP, POP3, IMAP, так что же делают эти протоколы и в чем отличия? Давайте сначала обсудим это.
SMTP — это протокол прикладного уровня, основанный на TCP/IP, и его состояние несколько похоже на HTTP.Номер порта прослушивания по умолчанию для SMTP-сервера — 25. Увидев это, вы можете подумать, что, поскольку протокол SMTP является протоколом прикладного уровня, основанным на TCP/IP, могу ли я также отправлять электронную почту через Socket? Ответ положительный.
В нашей повседневной жизни нам нужно пройти следующие шаги, чтобы доставить электронное письмо:
- Сяо Ван из Шэньчжэня сначала доставил почту в почтовое отделение Шэньчжэня.
- Почтовое отделение в Шэньчжэне доставляет почту в почтовое отделение в Шанхае.
- Сяо Чжан из Шанхая пришел на почту, чтобы забрать почту.
Это сокращенная версия процесса отправки электронной почты в жизни. Эти три шага могут соответствовать нашему процессу отправки электронной почты соответственно, предполагая, что электронная почта отправляется с aaa@qq.com на 111@163.com:
- aaa@qq.com сначала доставит почту на почтовый сервер Tencent.
- Почтовый сервер Tencent доставляет нашу почту на почтовый сервер NetEase.
- 111@163.com Войдите на почтовый сервер NetEase, чтобы проверить электронную почту
Доставка по почте Обычно это процесс, который будет включать более одного протокола, давайте посмотрим на каждый.
Протокол SMTP, называемый простым протоколом передачи почты, переводится как простой протокол передачи почты, который определяет между почтовым клиентом и SMTP-сервером и правила связи между SMTP-сервером и SMTP-сервером.
То есть пользователь aaa@qq.com сначала доставляет почту на SMTP-сервер Tencent, который использует протокол SMTP, а затем SMTP-сервер Tencent доставляет почту на SMTP-сервер Netease.Этот процесс по-прежнему использует протокол SMTP, и SMTP-сервер Только для приема почты.
Полное название протокола POP3 — Post Office Protocol, что переводится как Post Office Protocol, оно определяет правила связи между почтовым клиентом и сервером POP3, так в каких же сценариях будет использоваться этот протокол? После того, как почта поступает на SMTP-сервер NetEase, пользователю 111@163.com необходимо войти на сервер для просмотра почты.В это время используется протокол: поставщик почтовых услуг предоставляет каждому пользователю выделенное хранилище почты. пространство, и SMTP-сервер получит его.После отправки почты, почта сохраняется в хранилище почты соответствующего пользователя.Если пользователь хочет прочитать почту, это необходимо сделать через почтовый сервер POP3 поставщик почтовых услуг.
Наконец, некоторые друзья, возможно, слышали о протоколе IMAP.Этот протокол является расширением протокола POP3, с более сильными функциями и похожими функциями, поэтому я не буду здесь вдаваться в подробности.
Готов к работе
В настоящее время большинство отечественных поставщиков почтовых услуг не разрешают прямое использование имени пользователя/пароля для отправки электронных писем в коде.Все они должны сначала подать заявку на получение кода авторизации.Здесь мы берем почтовый ящик QQ в качестве примера, чтобы продемонстрировать процесс подачи заявки на код авторизации: сначала нам нужно войти в веб-версию почтового ящика QQ и нажать кнопку настроек выше:
Затем перейдите на вкладку «Учетные записи»:
Найдите параметр «Открыть POP3 / SMTP» на вкладке «Учетная запись» следующим образом:
Нажмите «Включить», чтобы включить соответствующие функции. Процесс открытия требует подтверждения номера мобильного телефона. Просто следуйте инструкциям и не будем вдаваться в подробности. После успешной активации вы можете получить код авторизации, сохранить номер и использовать его позже.
создание проекта
Далее мы можем создать проект.В Spring Boot для отправки почты предусмотрен класс автоматической настройки.Разработчикам нужно только добавить соответствующие зависимости, а затем настроить базовую информацию почтового ящика для отправки почты.
- Сначала создайте проект Spring Boot и введите зависимости для отправки почты:
После завершения создания зависимости проекта следующие:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- Настройте базовую информацию почтового ящика
После того, как проект будет успешно создан, настройте основную информацию почтового ящика в application.properties:
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=1510161612@qq.com
spring.mail.password=ubknfzhjkhrbbabe
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
Значения конфигурации следующие:
- Настроить адрес SMTP-сервера
- Порт SMTP-сервера
- Настроить имя пользователя электронной почты
- Настройте пароль, обратите внимание, что это не настоящий пароль, а код авторизации, который вы только что запросили
- Кодировка почты по умолчанию
- Аксессуары Фабрика шифрования SSL
- Указывает на то, что режим DEBUG включен, поэтому лог процесса отправки почты будет выводиться на консоль, что удобно для устранения неполадок
Если вы не знаете порт или адрес smtp-сервера, вы можете обратиться к документации по почтовому ящику Tencent.
После этого Spring Boot автоматически настроит для нас класс отправки электронной почты.org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
В классе часть исходного кода выглядит следующим образом:
@Configuration
@ConditionalOnClass({ MimeMessage.class, MimeType.class, MailSender.class })
@ConditionalOnMissingBean(MailSender.class)
@Conditional(MailSenderCondition.class)
@EnableConfigurationProperties(MailProperties.class)
@Import({ MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })
public class MailSenderAutoConfiguration {
}
Из этого кода видно, что импортируется другая конфигурацияMailSenderPropertiesConfiguration
Класс в этом классе предоставляет классы инструментов, связанные с отправкой почты:
@Configuration
@ConditionalOnProperty(prefix = "spring.mail", name = "host")
class MailSenderPropertiesConfiguration {
private final MailProperties properties;
MailSenderPropertiesConfiguration(MailProperties properties) {
this.properties = properties;
}
@Bean
@ConditionalOnMissingBean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
applyProperties(sender);
return sender;
}
}
Как видите, аJavaMailSenderImpl
пример,JavaMailSenderImpl
даJavaMailSender
Реализация, мы будем использоватьJavaMailSenderImpl
для завершения отправки почты.
После выполнения двух вышеуказанных шагов подготовка к отправке электронного письма завершена, после чего вы можете отправить электронное письмо напрямую.
Существует 5 различных способов отправки конкретных сообщений, давайте рассмотрим их один за другим.
Отправить простую почту
Простое электронное письмо означает, что содержимое электронного письма представляет собой обычный текстовый документ:
@Autowired
JavaMailSender javaMailSender;
@Test
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("这是一封测试邮件");
message.setFrom("1510161612@qq.com");
message.setTo("25xxxxx755@qq.com");
message.setCc("37xxxxx37@qq.com");
message.setBcc("14xxxxx098@qq.com");
message.setSentDate(new Date());
message.setText("这是测试邮件的正文");
javaMailSender.send(message);
}
Сверху вниз значения кодов следующие:
- создать почтовый объект
- установить тему письма
- установить отправителя электронной почты
- Настройте получателей электронной почты, получателей может быть несколько
- Установите человека с копией почты, у вас может быть несколько человек с копией
- Настройте слепую копию, их может быть несколько
- Установить дату отправки электронной почты
- Установите тело электронного письма
- отправить электронное письмо
Наконец, выполнив этот метод, электронное письмо может быть отправлено.Эффект отправки выглядит следующим образом:
Отправляйте электронные письма с вложениями
Вложения электронной почты могут быть изображениями или обычными файлами, оба из которых поддерживаются.
@Test
public void sendAttachFileMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("1510161612@qq.com");
helper.setTo("25xxxxx755@qq.com");
helper.setCc("37xxxxx37@qq.com");
helper.setBcc("14xxxxx098@qq.com");
helper.setSentDate(new Date());
helper.setText("这是测试邮件的正文");
helper.addAttachment("javaboy.jpg",new File("C:\\Users\\sang\\Downloads\\javaboy.png"));
javaMailSender.send(mimeMessage);
}
Обратите внимание, что конструкция почтового объекта отличается от предыдущей. Здесь сложный почтовый объект получается через javaMailSender, а затем для настройки почты используется MimeMessageHelper. MimeMessageHelper — вспомогательный класс инструментов для настройки почты. электронной почты, с MimeMessageHelper наша конфигурация для электронной почты выполняется MimeMessageHelper.
Наконец, добавьте вложение через метод Addattachment.
Выполните этот метод, эффект от отправки электронных писем будет следующим:
Отправить электронное письмо с изображениями
В чем разница между графическими ресурсами и вложениями? Ресурс изображения размещается в теле письма, то есть, как только письмо открывается, изображение можно увидеть. Но в целом этот метод не рекомендуется, и некоторые компании имеют ограничения на размер содержимого электронной почты (поскольку этот метод отправляет изображения вместе).
@Test
public void sendImgResMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("1510161612@qq.com");
helper.setTo("25xxxxx755@qq.com");
helper.setCc("37xxxxx37@qq.com");
helper.setBcc("14xxxxx098@qq.com");
helper.setSentDate(new Date());
helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true);
helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\sang\\Downloads\\javaboy.png")));
helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\sang\\Downloads\\javaboy2.png")));
javaMailSender.send(mimeMessage);
}
Текст электронной почты здесь представляет собой текст HTML, а задействованные ресурсы изображения сначала заняты заполнителем.Второй параметр true метода setText указывает, что первый параметр является текстом HTML.
После setText используйте метод addInline для добавления ресурсов изображения.
Наконец, выполните этот метод, чтобы отправить электронное письмо, и эффект будет следующим:
В реальном развитии компании ни первая, ни третья схема рассылки электронной почты не являются наиболее используемыми. Поскольку, как правило, содержание электронных писем относительно богато, поэтому большинство электронных писем представляются в формате HTML. Если вы напрямую объедините строки HTML, это будет сложно поддерживать в будущем. Чтобы решить эту проблему, будут отправляться обычные электронные письма. являются соответствующими шаблонами электронной почты. Два наиболее репрезентативных шаблона:Freemarker
шаблоны иThyemeleaf
шаблон тоже.
Используйте Freemarker в качестве шаблона электронной почты
Сначала вам нужно ввести зависимости Freemarker:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
затем вresources/templates
создать каталогmail.ftl
Отправить шаблон по электронной почте:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p>
<table border="1">
<tr>
<td>姓名</td>
<td>${username}</td>
</tr>
<tr>
<td>工号</td>
<td>${num}</td>
</tr>
<tr>
<td>薪水</td>
<td>${salary}</td>
</tr>
</table>
<div style="color: #ff1a0e">一起努力创造辉煌</div>
</body>
</html>
Затем преобразуйте шаблон электронной почты в HTML и отправьте его.
@Test
public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("1510161612@qq.com");
helper.setTo("25xxxxx755@qq.com");
helper.setCc("37xxxxx37@qq.com");
helper.setBcc("14xxxxx098@qq.com");
helper.setSentDate(new Date());
//构建 Freemarker 的基本配置
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
// 配置模板位置
ClassLoader loader = MailApplication.class.getClassLoader();
configuration.setClassLoaderForTemplateLoading(loader, "templates");
//加载模板
Template template = configuration.getTemplate("mail.ftl");
User user = new User();
user.setUsername("javaboy");
user.setNum(1);
user.setSalary((double) 99999);
StringWriter out = new StringWriter();
//模板渲染,渲染的结果将被保存到 out 中 ,将out 中的 html 字符串发送即可
template.process(user, out);
helper.setText(out.toString(),true);
javaMailSender.send(mimeMessage);
}
Следует отметить, что хотя введениеFreemarker
автоматическая настройка, но мы здесь напрямуюnew Configuration
перенастроитьFreemarker
, поэтому конфигурация Freemarker по умолчанию здесь не действует, поэтому при заполнении местоположения шаблона значение равноtemplates
.
Вызовите этот метод, чтобы отправить электронное письмо.Визуализация выглядит следующим образом:
Используйте Thymeleaf в качестве шаблона электронной почты
Рекомендуется использовать Thymeleaf для создания шаблонов электронной почты в Spring Boot. Поскольку автоматическая конфигурация Thymeleaf предоставляет TemplateEngine, шаблоны Thymeleaf можно легко преобразовать в HTML с помощью TemplateEngine.В то же время автоматическая конфигурация Thymeleaf по-прежнему действует здесь.
Сначала импортируйте зависимость Thymeleaf:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Затем создайтеThymeleaf
Шаблон электронной почты:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p>
<table border="1">
<tr>
<td>姓名</td>
<td th:text="${username}"></td>
</tr>
<tr>
<td>工号</td>
<td th:text="${num}"></td>
</tr>
<tr>
<td>薪水</td>
<td th:text="${salary}"></td>
</tr>
</table>
<div style="color: #ff1a0e">一起努力创造辉煌</div>
</body>
</html>
Далее отправьте электронное письмо:
@Autowired
TemplateEngine templateEngine;
@Test
public void sendThymeleafMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("1510161612@qq.com");
helper.setTo("25xxxxx755@qq.com");
helper.setCc("37xxxxx37@qq.com");
helper.setBcc("14xxxxx098@qq.com");
helper.setSentDate(new Date());
Context context = new Context();
context.setVariable("username", "javaboy");
context.setVariable("num","000001");
context.setVariable("salary", "99999");
String process = templateEngine.process("mail.html", context);
helper.setText(process,true);
javaMailSender.send(mimeMessage);
}
Вызовите этот метод, чтобы отправить электронное письмо.Визуализация выглядит следующим образом:
Что ж, это 5 поз для отправки электронной почты, о которых мы говорили сегодня. Интересно, вы уже освоили их?
Этот случай был загружен на GitHub:GitHub.com/Len VE/Java не….
Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение для обсуждения.
Обратите внимание на общедоступную учетную запись [Jiangnan A Little Rain], сосредоточьтесь на технологиях с полным стеком, таких как Spring Boot + микросервисы и разделение интерфейса и сервера, делитесь регулярными видеоуроками, отвечайте на Java после того, как уделите внимание, и получайте Сухие товары Java тщательно приготовлены Songge для вас!