概述
SMTP电子邮件传输的协议:
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
第一步:配置邮箱服务
这里我使用的是QQ邮箱,进入邮箱-设置-账号-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启SMTP服务.
这是QQ邮箱的一些配置信息.
第二步:集成邮件依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
我使用的是SpringBoot项目,这里直接引入starter就行.
第三步:配置文件集成邮箱配置参数
spring:
mail:
host: smtp.qq.com
username: dengweizeemail@qq.com
password: jzu******nkddiae
properties:
mail:
transport:
protocol: smtp
smtp:
port: 587
auth: true
starttls:
enable: true
required: true
mail:
send:
from: 197****829@qq.com
第四步:编写邮件发送客户端MessageClient
package com.xxxxx.utils;
import org.apache.commons.lang3.StringUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
@Slf4j
@Component
public class MessageClient {
public final static MessageSendResponse serverNotAvailable = new MessageSendResponse(false, "Oops, Email could not be delivered.");
public final static MessageSendResponse sendSuccessful = new MessageSendResponse(true, "");
/**
* 邮件发送方
*/
@Value("${mail.send.from}")
public String mailSendFrom;
@Resource
private JavaMailSender mailSender;
public MessageSendResponse sendEmailMessageNoRequest(String title, String content, String receiver) {
if (StringUtils.isBlank(receiver)) {
throw new RuntimeException("email receivers can't be empty");
}
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(mailSendFrom);
helper.setTo(receiver);// 接收者
helper.setSubject(title);// 邮件主题
helper.setText(content, true);// 邮件内容, 不是html也没关系
long t1 = System.currentTimeMillis();
mailSender.send(mimeMessage);// 发送邮件
long t2 = System.currentTimeMillis();
log.debug("email send to {} successful, take {} seconds", receiver, (t2 - t1) / 1000);
return sendSuccessful;
} catch (Exception e) {
log.error("send email to {} direct got error {}", receiver, e);
return serverNotAvailable;
}
}
@AllArgsConstructor
public static class MessageSendResponse {
private Boolean success;
private String reason;
public Boolean isSuccessful() {
return success;
}
public String getReason() {
return reason;
}
}
}
第五步:测试
@Autowired
private MessageClient messageClient;
@Test
public void testEmail(){
MessageClient.MessageSendResponse messageSendResponse = messageClient.sendEmailMessageNoRequest("测试邮件", "这是一封测试邮件请勿回复!!!", "178****0629@163.com");
if (!messageSendResponse.isSuccessful()) {
log.error("messageSendResponse fail");
}
}
可以在控制台看见:2024-07-24 11:04:00 [main] DEBUG - email send to 178****0629@163.com successful, take 1 seconds,
代表邮件发送成功,也可以去对应的邮箱查看,到这里就结束了,我顺便把我的网站也配置了邮箱验证,这个邮件服务好像是免费的.