原文: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
}
}

参考

JavaXMail发送邮件功能实现的更多相关文章

  1. DEDECMS会员注册如何配置邮箱发送邮件功能

    网站邮件功能是一个非常基础和有效的通信工具,配合dede会员注册邮件验证功能可以大量的拒绝垃圾注册用户.那么如何配置DEDECMS会员注册邮箱发送邮件功能?   1:配置dedecms网站发信EMAI ...

  2. Python django实现简单的邮件系统发送邮件功能

    Python django实现简单的邮件系统发送邮件功能 本文实例讲述了Python django实现简单的邮件系统发送邮件功能. django邮件系统 Django发送邮件官方中文文档 总结如下: ...

  3. Jmeter发送邮件功能SMTP Sampler

    介绍Jmeter的发送邮件功能,使用的Sampler是SMTP Sampler,详细说明每个配置项的功能 从上往下介绍需要用到的配置项: Server settings Server: 服务器地址 P ...

  4. Redmine发布新闻,自动发送邮件功能失效恢复

    问题描述:操作数据库,修改项目公开状体后,创建新闻,自动发送邮件功能失效. 问题检查和恢复测试: 1.检查管理员权限 2.重新手动配置项目公开状态,覆盖数据操作 3.对比其他正常项目数据库状态,进行恢 ...

  5. centos6.9发送邮件功能

    centos6.9发送邮件功能       第一个里程碑 测试发邮件的功能 系统环境centos 6.9     #配置发邮件 /etc/mail.rc中追加 set bsdcompat set fr ...

  6. JavaMail实现邮箱之间发送邮件功能

    package com.minstone.message.util; import java.util.Date; import java.util.Properties; import javax. ...

  7. java实现发送邮件功能

    项目中实现发送邮件功能,先书写一个小Demo,记录如下: POM.XML中导入依赖 <!-- start java 提供的支持邮件发送相关业务的类 --> <dependency&g ...

  8. 一百零五:CMS系统之flask-mail使用和邮箱配置、发送邮件功能

    安装:pip install flask-mail 官方文档:https://pythonhosted.org/Flask-Mail/ 邮箱配置 MAIL_SERVER = 'smtp.qq.com' ...

  9. 使用 SpringBoot 配置发送邮件功能

    1.使用 SpringBoot 配置发送邮件功能 项目总体结构 用户表设计 SET FOREIGN_KEY_CHECKS=0; CREATE DATABASE sample; USE sample; ...

  10. Android开发之发送邮件功能的实现(源代码分享)

    Android开发中可能会碰到如何发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法,总共有3种把,我仔细阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰,我今天就来分享下我认为 ...

随机推荐

  1. 传统.NET应用向微服务架构迁移的实践经验--学习笔记

    摘要 在本次分享中,演讲嘉宾将基于真实项目案例,剖析 .NET 应用向微服务..NET Core 等技术栈迁移的具体收益,并且分享在迁移中技术和非技术的众多考量.以及保证业务连续性的一些方法论. 议题 ...

  2. 二进制安装Kubernetes(k8s) v1.27.1 IPv4/IPv6双栈 可脱离互联网

    二进制安装Kubernetes(k8s) v1.27.1 IPv4/IPv6双栈 可脱离互联网 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star ...

  3. JS LeetCode 1423. 可获得的最大点数简单题解

    壹 ❀ 引 最近也是浮躁的很,一篇redux的文章写了三千多字才算写了一半...写的泪目了.还是刷刷算法静下心,顺带记录下算法做题过程吧.今天的题来自LeetCode每日打卡,题目出自LeetCode ...

  4. Python Print 显示颜色

    1.顺序:显示方式,前景颜色,背景颜色 2.顺序非固定,但尽量按默认书写方式 3.也可以在input中输出使用 4.格式: print('\033[显示方式:前景颜色:背景颜色m .......... ...

  5. Swoole从入门到入土(16)——WebSocket服务器[事件]

    WIKI: 问:websocket协议虽然和http协议不同,但是兼容于http协议,如何判断客户端连接使用的是http协议? 答:通过使用 $server->connection_info($ ...

  6. Swoole从入门到入土(12)——HTTP服务器[Response]

    继上一节了解完请求对象之后,这一节我们着重了解响应对象(Response).响应对象主要用于将数据发现到客户端.当 Response 对象销毁时,如果未调用 end 发送 HTTP 响应,底层会自动执 ...

  7. Swoole从入门到入土(1)——入坑

    入坑一个话题,总得有入坑的理由.有好多话题可供选择,但是思来想去,对于PHPer进阶与其急着去掌握一门新的语言,匆忙地踏足一个新的知识体系,还不如先把php圈子的技能点攒齐了. 话说Swoole诞生之 ...

  8. Java 23种设计模式的分类和使用场景

    听说过GoF吧? GoF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为<设计模式-- ...

  9. FART 脱壳机原理分析

    FART是一个基于Android 源码修改的脱壳机 可以脱整体壳和抽取壳 FART脱壳的步骤主要分为三步: 1.内存中DexFile结构体完整dex的dump 2.主动调用类中的每一个方法,并实现对应 ...

  10. 【LeetCode动态规划#03】整数拆分(数学题)

    整数拆分 力扣题目链接(opens new window) 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 ...