javaWeb項目中集成發送郵件的功能

參考

Java 基於JavaMail實現向QQ郵箱發送郵件
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger for JUnit test case for Java mail

寫在前面

現在很多 Web 項目都集成了發送郵件給用戶,以便提醒用戶一些信息的功能,或者發送驗證碼給郵箱,來實現註冊功能。那麼這樣的功能要如何實現呢,其實非常簡單。

開啓管理員郵箱的 SMTP 功能

拿 QQ 郵箱舉例,首先管理員(也就是公司,網站服務端)需要開啓一個自己的郵箱中的 SMTP 服務。在計算機網絡中,SMTP 服務就是用於發送郵件的。

在 QQ 郵箱,設置-賬戶中,開啓 SMTP 功能。

開啓後,QQ 會提供給你一個授權碼,相當於一個 API 的 KEY,會在接下來的程序中使用到。

主要代碼

具體的代碼如下,但是特別注意,不同的郵箱具體的代碼會有些許的不同,比如 QQ 郵箱必須提供 SSL 加密操作,jar 使用 maven 管理

    <!-- 發送郵件依賴的 jar 包-->
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>javax.mail-api</artifactId>
      <version>1.5.6</version>
    </dependency>

    <!-- MailSSLSocketFactory 加密的 jar 包 -->
    <!-- 注意這裏的版本是 1.5.3 如果是低版本,比如我之前用的 1.4.4 ,那麼下面的核心代碼中有類不能使用 -->
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.5.3</version>
    </dependency>
package com.www.utils;

import com.sun.mail.util.MailSSLSocketFactory;
import org.junit.Test;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Properties;

public class MailUtil {

    public  void sendMail() throws GeneralSecurityException, MessagingException {
        Properties props = new Properties();

        // 開啓debug調試
        props.setProperty("mail.debug", "true");
        // 發送服務器需要身份驗證
        props.setProperty("mail.smtp.auth", "true");
        // 設置郵件服務器主機名
        props.setProperty("mail.host", "smtp.qq.com");
        // 發送郵件協議名稱
        props.setProperty("mail.transport.protocol", "smtp");

        // ssl 加密
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);

        Session session = Session.getInstance(props);

        Message msg = new MimeMessage(session);
        msg.setSubject("標題");
        StringBuilder builder = new StringBuilder();
        builder.append("內容");
        builder.append("\n內容");
        msg.setText(builder.toString());
        msg.setFrom(new InternetAddress("發送者郵箱"));

        Transport transport = session.getTransport();
        transport.connect("smtp.qq.com", "發送者郵箱", "授權碼");

        transport.sendMessage(msg, new Address[] { new InternetAddress("接收者郵箱") });
        transport.close();
    }
}

效果

在這裏插入圖片描述

存在的問題

不知道爲什麼原因,我發送的信息都被騰訊當作垃圾郵件存放在垃圾箱中了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章