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
  • 相关阅读:
    存储过程sql拼接
    收集 一个数字转大写金额的方法
    判断打印机是否可用
    TortoiseSVN解决冲突
    特殊符号
    [转]Winform用匿名方法新建线程的方法
    [转]利用SqlBulkCopy快速大批量导入数据(SqlBulkCopy强大)
    DevExpress GridControl使用
    GridView自动调整列宽
    'display','position'和'float'相互关系
  • 原文地址:https://www.cnblogs.com/stars-one/p/14775451.html
Copyright © 2011-2022 走看看