原文: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. Go语言实现八大排序|排序算法|超详细保姆级别注释

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...

  2. 【STL源码剖析】list模拟实现 | 适配器实现反向迭代器【超详细的底层算法解释】

    今天博主继续带来STL源码剖析专栏的第三篇博客了! 今天带来list的模拟实现!话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://bl ...

  3. idea报错 Error running GctlBrpApplication. Command line is too long. Shorten the command line and rerun.解决方案

    idea新导入项目有时候会出现以下报错,解决方法如下: 一:报错截图,报错原因是命令行太长,让缩短命令长度再运行. 二:解决方法如下:在剪头标记位置加入代码: <property name=&q ...

  4. delphi 里 多用TArray 而不是 array of

    今天写代码发现个bug,是delphi 编译器 核心层面的: unit ddx.att; interface uses System.Generics.Collections, System.Rtti ...

  5. NC16681 [NOIP2003]加分二叉树

    题目链接 题目 题目描述 ​ 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tr ...

  6. Linux 中iostat 命令详解

    iostat命令详解 iostat 主要是统计 磁盘活动情况. iostat有以下缺陷: iostat的输出结果大多数是一段时间内的平均值,因此难以反映峰值情况iostat仅能对系统整体情况进行分析汇 ...

  7. 【Unity3D】边缘检测特效

    1 边缘检测原理 ​ 边缘检测的原理是:检测每个像素周围的像素亮度差,如果亮度差异较大,就将该像素识别为边缘,并进行边缘着色. ​ 本文完整资源见→Unity3D边缘检测特效. ​ 使用过卷积神经网络 ...

  8. 【Unity3D】相机

    1 简介 ​ 相机用于渲染游戏对象,每个场景中可以有多个相机,每个相机独立成像,每个成像都是一个图层,最后渲染的图层在最前面显示. ​ 相机的属性面板如下: Clear Flags:设置清屏颜色,Sk ...

  9. 谈谈Tomcat占用cpu高的问题

    目录 问题现场 线程死锁 vs 线程死循环 排查Java进程导致CPU持续高的方法 Tomcat的CPU占用高的原因总结 问题现场 测试环境tomcat进程占用CPU一直持续99%,但是通过jstac ...

  10. EasyExcel使用及自定义设置单元格样式

    EasyExcel使用及自定义设置单元格样式 https://www.cnblogs.com/Hizy/p/11825886.html easyexcel 自动设置列宽 https://www.man ...