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
    }
}

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM