Java邮件服务的集成

阿泽
阿泽
发布于 2024-07-24 / 12 阅读
0
0

Java邮件服务的集成

概述

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,代表邮件发送成功,也可以去对应的邮箱查看,到这里就结束了,我顺便把我的网站也配置了邮箱验证,这个邮件服务好像是免费的.


评论