zoukankan      html  css  js  c++  java
  • JavaXMail发送邮件功能实现

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

    参考


    提问之前,请先看提问须知 点击右侧图标发起提问 联系我 或者加入QQ群一起学习 Stars-One安卓学习交流群 TornadoFx学习交流群:1071184701
  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/stars-one/p/14775451.html
Copyright © 2011-2022 走看看