-->

Java代码实现邮件发送

1. 概述

在一些项目里面如进销存系统,对一些库存不足发出预警提示消息,招聘网站注册用户验证email地址等都需要用到邮件发送技术。
发送邮件可能大家都觉得简单,打开浏览器,登录邮箱,写信,发送邮件?那么我们这里讲的可是直接使用Java代码实现邮件发送。

方案一:
可以直接使用SUN的JavaMail可以发送邮件,不过代码写起来很麻烦。
如果手写过JavaMail发送邮件,就会深知其api之繁琐。

方案二:
利用apache的Email,可以快捷的实现邮件的发送,
具体教程可以参考官网的: http://commons.apache.org/email/userguide.html。

方案三:
Spring也提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。
Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text。
包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层邮件系统异常的高级别抽象。

2. 实现

由于自己比较懒,发现用第一种实现较为复杂,正好看见hutool工具里有邮件发送,所以就直接用hutool实现了。。。。

2.1. 导入依赖

点击查看代码
	// 发送邮件
    implementation 'com.sun.mail:javax.mail:1.6.2'
	
	// hutool工具类
    implementation 'cn.hutool:hutool-all:5.8.11'

2.2. 邮件服务器配置

邮件服务器配置 (粗略------详细 访问_https://www.hutool.cn/ 查找邮件)
在gradle项目中在 (src/main/resources) 创建 mail.setting

点击查看代码
# 邮件服务器的SMTP地址
host = smtp.qq.com
# 邮件服务器的SMTP端口(默认25,不过25不好用,所以就用了465)
port = 465
# 发件人(必须正确,否则发送失败)
from = 123@qq.com
# 用户名,默认为发件人邮箱前缀
user = 123
# 密码(注意,某些邮箱需要为SMTP服务单独设置授权码,详情查看相关帮助)
pass = osfddcqtxqqrbbce
#使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
startttlsEnable = true

# 使用SSL安全连接
sslEnable = true
# 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
# 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
socketFactoryFallback = true
# 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
socketFactoryPort = 465

# SMTP超时时长,单位毫秒,缺省值不超时
timeout = 0
# Socket连接超时值,单位毫秒,缺省值不超时
connectionTimeout = 0

2.3. 接口调用

1.单发

@PostMapping("/test")
    public ReturnResult sendEmail(){
        return ReturnResult.buildSuccessResult(MailUtil.send("123@qq.com", "恭喜你中了五百万", "先僧,恭喜您中了我们五百万大奖", false));
    }

2.群发

点击查看代码
ArrayList<String> tos = CollUtil.newArrayList(
    "person1@bbb.com", 
    "person2@bbb.com", 
    "person3@bbb.com", 
    "person4@bbb.com");

MailUtil.send(tos, "测试", "邮件来自Hutool群发测试", false);-----------------------------------------------------

tos: 对方的邮箱地址,可以是单个,也可以是多个(Collection表示)
subject:标题
content:邮件正文,可以是文本,也可以是HTML内容
isHtml: 是否为HTML,如果是,那参数3识别为HTML内容
files: 可选:附件,可以为多个或没有,将File对象加在最后一个可变参数中即可

转载:https://www.cnblogs.com/Lazy-1bird/p/h1128.html

posted @ 2023-01-17 22:32  ꧁ʚ星月天空ɞ꧂  阅读(89)  评论(0)    收藏  举报