JavaXMail发送邮件功能实现
2023-02-18 16:38:33 时间
原文:JavaXMail发送邮件功能实现 | Stars-One的杂货小窝
好久之前实现的邮件发送功能,一直没整理出来,考虑到之后有个项目需要,先整理一波
提示: 本文代码例子是使用Kotlin语言编写
基本使用
1.授权申请
第一步,首先得去邮箱开通对应的服务,这里建议使用QQ邮箱,网易的163邮箱测试很容易被官方拦截,官方认为你的邮件是垃圾邮件,不给你发,心烦,相比之下,QQ邮箱比较友好,不过给163邮箱,邮件会被当做垃圾邮件(服了)
授权去QQ邮箱设置里开启(设置->个人账户菜单)即可,如下面截图,要先把上方的几个服务开启之后,在申请授权码即可
2.依赖引入
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
3.发送邮件
//1.设置自己邮箱和授权码以及发送人
val pwd = "你的授权码"
val fromPerson = "你的邮箱地址"
//发送人邮箱地址
val toAddress = ""
//2.初始化邮箱的配置
val props = Properties()
//开启调试模式,会打印日志
props.setProperty("mail.debug", "true")
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true")
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com")
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp")
val sf = MailSSLSocketFactory()
sf.isTrustAllHosts = true
props["mail.smtp.ssl.enable"] = "true"
props["mail.smtp.ssl.socketFactory"] = sf
//3.创建邮件内容(邮件标题,邮件内容,收件人)
val session = Session.getInstance(props)
val msg = MimeMessage(session)
val multipart = MimeMultipart()
val mainContent = MimeBodyPart()
mainContent.setContent("你好,这是一封测试邮件", "text/html;charset=gb2312")
multipart.addBodyPart(mainContent)
msg.subject = "测试标题"
msg.setContent(multipart)
/**
* 设置收件人地址(可以增加多个收件人、抄送、密送),即下面这一行代码书写多行(即群发)
* PS:将收件人的地址改为自己即可实现给自己发送邮件
* MimeMessage.RecipientType.TO:发送
* MimeMessage.RecipientType.CC:抄送
* MimeMessage.RecipientType.BCC:密送
*/
msg.addRecipient(MimeMessage.RecipientType.TO, InternetAddress(toAddress))
msg.setFrom(InternetAddress(fromPerson))
msg.saveChanges()
//4.登录并发送邮件
val transport = session.transport
//登录
transport.connect("smtp.qq.com", fromPerson, pwd)
transport.sendMessage(msg, msg.allRecipients) //这个是要接受邮件的邮箱
transport.close()
PS:邮件可以群发,不过一般邮箱都是有限制,比如说QQ邮箱限制每次邮件发送邮件不能超过50个人(但不清楚是否包含抄送人和密送人的数量在内,有条件可以自己尝试)
效果图:
当然,邮件还可以发送网页内容、图片和附件,这里就没有过多深入研究,详情可以看末尾参考的文章
封装工具类
根据上面的基本的方法,我自己封装了一套邮件发送的简单工具类,各位可以参考
class MailUtil {
companion object {
//你的邮箱地址
private val fromPerson = ""
//这里看你用的邮箱改,如果是QQ邮箱,就是smtp.qq.com
private val mailHost = "smtp.qq.com"
//这里改成你的邮箱授权码
val pwd = ""
private val props = Properties()
/**
* 给指定邮箱发送邮件
*
* @param toAddress 指定邮箱地址
* @param title 邮件主题
* @param content 邮件内容(内容如果是网页也是可以的)
*/
fun sendEmail(toAddress: String, title: String, content: String) {
println("-----test---- sendEmail开始---")
val session = Session.getInstance(props)
val msg = MimeMessage(session)
val multipart = MimeMultipart()
val mainContent = MimeBodyPart()
mainContent.setContent(content, "text/html;charset=gb2312")
multipart.addBodyPart(mainContent)
msg.subject = title
msg.setContent(multipart)
/**
* 设置收件人地址(可以增加多个收件人、抄送、密送),即下面这一行代码书写多行
* MimeMessage.RecipientType.TO:发送
* MimeMessage.RecipientType.CC:抄送
* MimeMessage.RecipientType.BCC:密送
*/
msg.addRecipient(MimeMessage.RecipientType.TO, InternetAddress(toAddress))
msg.setFrom(InternetAddress(fromPerson))
msg.saveChanges()
val transport = session.transport
//登录
transport.connect(mailHost, fromPerson, pwd)
transport.sendMessage(msg, msg.allRecipients) //这个是要接受邮件的邮箱
transport.close()
}
}
init {
//开启调试模式,会打印日志
props.setProperty("mail.debug", "true")
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true")
// 设置邮件服务器主机名
props.setProperty("mail.host", mailHost)
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp")
val sf = MailSSLSocketFactory()
sf.isTrustAllHosts = true
props["mail.smtp.ssl.enable"] = "true"
props["mail.smtp.ssl.socketFactory"] = sf
}
}
参考
相关文章
- 创建使用windows虚拟机(WIN 2008)
- vSphere 6.5配置使用vMotion高级特性
- 最新CleanMyMac2023试用版有哪些免费功能?
- 使用PXE工具批量部署服务器
- 磁盘阵列——主流的RAID介绍
- 服务器制作RAID磁盘阵列并管理
- KVM虚拟化技术基础框架
- vSphere 6.5配置使用标准交换机
- vSphere 6.5配置使用分布式交换机
- 使用KVM服务创建虚拟机
- DNS服务器及其概述
- 邮件服务器的功能以及相关工作原理
- DHCP服务的安装以及配置,使主机IP地址自动获取
- 应用系统服务安装全过程(从基础搭建框架到部署运行)
- 腾讯云服务器数据备份怎么创建快照?
- Zabbix分布式监控系统从理论到实践
- 屏幕画笔工具pointofox安装过程
- 子网划分详细分析与习题操作详情
- 教你如何去除网页文字防复制粘贴的方法
- 配置使用console口连接三层交换机