首頁 > 軟體

基於JavaMail實現簡單郵件傳送

2022-08-10 18:02:07

本文範例為大家分享了JavaMail實現簡單郵件傳送的具體程式碼,供大家參考,具體內容如下

1.引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.5.5</version>
</dependency>

2.郵件傳送工具類

package com.test;

import lombok.Builder;
import lombok.Data;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

/**
 * 郵件工具
 * @author visy.wang
 * @date 2021/10/18 11:13
 */
public class MailUtil {
    private static final String USER = "發件人郵箱地址";
    private static final String PASS = "發件人郵箱密碼";
    private static final String HOST = "smtp.xxx.com"; //郵件伺服器地址
    private static final String PORT = "465"; //SSL連線埠:465,普通連線:25
    private static final Properties PROPERTIES = new Properties();

    //連線郵件伺服器的引數設定
    static {
        //設定使用者的認證方式
        PROPERTIES.setProperty("mail.smtp.auth", "true");
        //設定傳輸協定
        PROPERTIES.setProperty("mail.transport.protocol", "smtp");
        //設定發件人的SMTP伺服器地址
        PROPERTIES.setProperty("mail.smtp.host", HOST);
        //使用SSL安全連線(如果不使用SSL,以下設定可省略, 預設埠是25)
        PROPERTIES.setProperty("mail.smtp.port", PORT);
        PROPERTIES.setProperty("mail.smtp.socketFactory.port", PORT);
        PROPERTIES.setProperty("mail.smtp.socketFactory.fallback", "false");
        PROPERTIES.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    }

    @Data
    @Builder
    public static class MyMessage{
        private String to;
        private String subject;
        private String content;
    }

    public static void send(MyMessage message) throws Exception{
        //2、建立定義整個應用程式所需的環境資訊的 Session 物件
        Session session = Session.getInstance(PROPERTIES);
        //設定偵錯資訊在控制檯列印出來
        session.setDebug(true);
        //3、建立郵件的範例物件
        Message msg = getMessage(session, message);
        //4、根據session物件獲取郵件傳輸物件Transport
        Transport transport = session.getTransport();
        //設定發件人的賬戶名和密碼
        transport.connect(USER, PASS);
        //傳送郵件,並行送到所有收件人地址,message.getAllRecipients() 獲取到的是在建立郵件物件時新增的所有收件人, 抄送人, 密送人
        transport.sendMessage(msg, msg.getAllRecipients());

        //如果只想傳送給指定的人,可以如下寫法
        //transport.sendMessage(msg, new Address[]{new InternetAddress("xxx@qq.com")});

        //5、關閉郵件連線
        transport.close();
    }

    private static MimeMessage getMessage(Session session, MyMessage message) throws Exception{
        //建立一封郵件的範例物件
        MimeMessage msg = new MimeMessage(session);

        //設定發件人地址
        msg.setFrom(new InternetAddress(USER));

        /**
         * 設定收件人地址(可以增加多個收件人、抄送、密送),即下面這一行程式碼書寫多行
         * MimeMessage.RecipientType.TO:傳送
         * MimeMessage.RecipientType.CC:抄送
         * MimeMessage.RecipientType.BCC:密送
         */
        msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(message.getTo()));

        //設定郵件主題
        msg.setSubject(message.getSubject(),"UTF-8");

        //設定郵件正文
        msg.setContent(message.getContent(), "text/html;charset=UTF-8");

        //設定郵件的傳送時間,預設立即傳送
        msg.setSentDate(new Date());

        return msg;
    }
}

3.傳送測試

public static void main(String[] args) throws Exception{
    MailUtil.send(
          MailUtil.MyMessage.builder()
          .to("收件人郵箱地址")
          .subject("郵件主題")
          .content("郵件內容<b>支援HTML標籤</b>")
          .build()
    );
}

4.注意點

要使用某個郵件伺服器傳送郵件,需要先在郵箱中開通對用的服務:即開啟 SMTP服務。

本文並不是springboot的使用方式,springboot的方式更簡單,只需在application.yml中設定好,然後注入一個傳送者即可。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com