Java實現網易企業163郵箱傳送郵件

su1573發表於2020-12-17

前提:

本文介紹兩種郵件傳送,一個是網易163郵箱,另一個是網易企業163郵箱

專案地址:https://github.com/su1573/mail-send

一、登入郵箱設定

網易163郵箱
1、登入個人163郵箱,如圖選中POP3/SMTP/IMAP
在這裡插入圖片描述


2、開啟POP3/SMTP服務,根據提示獲取授權碼,授權要儲存好,一會兒要用到

在這裡插入圖片描述


網易企業163郵箱
這個我這裡是沒有上面的POP3/SMTP服務,在程式碼中用的直接是登入郵箱密碼


二、jar包引用

		<!-- javax.mai 核心包 -->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.2.11.RELEASE</version>
        </dependency>

三、程式碼演示

package com.su.mailsend.service;

import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.Properties;

/**
 * @program: program
 * @Date: 2020/12/16 19:26
 * @Author: Mr.SU
 * @Description:
 */
public class MailStmpSend {

    /**
     * @Description: 網易163郵箱,傳送郵件
     * @param: "[to, text, title]"
     * @Return: boolean
     * @Author: supenghui
     * @Date: 2020/12/16 16:54
     */
    private void sendMail(String to, String text, String title) throws Exception {

        String from = "xxx@163.com"; // 發件人郵箱地址
        String user = "xxx@163.com"; // 發件人稱號,同郵箱地址
        String password = "VHXCLTZDEOFFWNSA"; // 發件人郵箱客戶端授權碼

        // 一、建立引數配置, 用於連線郵件伺服器的引數配置
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.163.com"); // 設定傳送郵件的郵件伺服器的屬性(這裡使用網易的smtp伺服器)
        props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.auth", "true"); // 需要經過授權,也就是使用者名稱和密碼的校驗,這樣才能通過驗證(一定要有這一條)

        // 二、根據配置建立會話物件, 用於和郵件伺服器互動
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true); // true 在控制檯(console)上看到傳送郵件的過程

        // 三、 建立一封複雜郵件(文字+附件)

        try {
            // 3.1. 建立郵件物件
            MimeMessage message = new MimeMessage(session); // 載入發件人地址

            // 3.2. From: 發件人
            message.setFrom(new InternetAddress(from));

            // 3.3. To: 收件人(可以增加多個收件人)
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 載入收件人地址

            // 3.4. To: 收件人(可以增加多個抄送)
            message.addRecipient(Message.RecipientType.CC, new InternetAddress(to)); // 載入抄件人地址

            // 3.5. Subject: 郵件主題
            message.setSubject(title); // 載入標題

            // 3.6. 郵件內容
            MimeMultipart multipart = new MimeMultipart(); // 向multipart物件中新增郵件的各個部分內容,包括文字內容和附件
            MimeBodyPart contentPart = new MimeBodyPart(); // 設定郵件的文字內容
            contentPart.setContent(text, "text/html;charset=utf-8");
            multipart.addBodyPart(contentPart);

            // 3.7. 郵件附件
            String attPath = "D:\\data\\ftpUpload\\2020\\12\\10\\蓋章指令檔案.zip";
            MimeBodyPart attachment = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(attPath)); // 讀取本地檔案
            attachment.setDataHandler(dh); // 將附件資料新增到“節點”
            attachment.setFileName(MimeUtility.encodeText(dh.getName())); // 設定附件的檔名(需要編碼)
            multipart.addBodyPart(attachment);

            multipart.setSubType("mixed"); // 混合關係

            // 3.8. 設定整個郵件的關係(將最終的混合“節點”作為郵件的內容新增到郵件物件)
            message.setContent(multipart);

            // 3.9. 設定發件時間
            message.setSentDate(new Date());

            // 3.10. 儲存上面的所有設定
            message.saveChanges(); // 儲存變化

            // 四、 根據 Session 獲取郵件傳輸物件
            Transport transport = session.getTransport("smtp");

            // 五、 使用 郵箱賬號 和 授權碼 連線郵件伺服器
            transport.connect("smtp.163.com", user, password);

            // 六、 傳送郵件,
            transport.sendMessage(message, message.getAllRecipients());

            // 七、 關閉連線
            transport.close();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description: 網易企業163郵箱傳送郵件
     * @param: "[]"
     * @Return: void
     * @Author: supenghui
     * @Date: 2020/12/17 13:55
     */
    public void sendHtmlMail() {
        try {

            String from = "職業年金受託";//發件人暱稱展示
//            String[] to = {"supenghui@sinosoft.com.cn", "supenghui@sinosoft.com.cn"};//接收郵箱
            String to = "xxx@163.com";//接收郵箱
//            String[] copy = {"supenghui@sinosoft.com.cn", "supenghui@sinosoft.com.cn"};//抄送郵箱
            String copy = "xxx@163.com";//抄送郵箱
            String subject = "測試郵件";//郵件主題
            String text = "你好,這是一封測試郵件,無需回覆。";
            String host = "smtphz.qiye.163.com";//163企業郵箱smtp
            String username = "xxx@su-abc.com.cn";//企業郵箱 @後面是域名
            String password = "123456";//企業郵箱密碼

            // 一、建立引數配置, 用於連線郵件伺服器的引數配置
            Properties prop = new Properties();
            prop.setProperty("mail.smtp.auth", "true"); // 需要經過授權,也就是使用者名稱和密碼的校驗,這樣才能通過驗證(一定要有這一條)
            prop.setProperty("mail.smtp.timeout", "994"); // 加密埠(ssl)  可通過 https://qiye.163.com/help/client-profile.html 進行查詢

            MailSSLSocketFactory sf = new MailSSLSocketFactory();// SSL加密
            sf.setTrustAllHosts(true); // 設定信任所有的主機
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);

            //二、建立一封複雜郵件(文字+附件)
            JavaMailSenderImpl javaMailSend = new JavaMailSenderImpl();

            // 3.1. 建立郵件物件
            MimeMessage message = javaMailSend.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "utf-8");

            // 3.2. From: 發件人
            String nick = MimeUtility.encodeText(from);//設定暱稱
            messageHelper.setFrom(new InternetAddress(nick + " <" + username + ">"));// 郵件傳送者

            // 3.3. To: 收件人(可以增加多個收件人)
            messageHelper.setTo(to);  //收件人

            // 3.4. To: 收件人(可以增加多個抄送)
            messageHelper.setCc(copy); //抄送人

            // 3.5. Subject: 郵件主題
            messageHelper.setSubject(subject); //郵件標題

            // 3.6. 郵件內容
            messageHelper.setText(text, true); //文字中,如需換行,要用<br>,不能用\n換行

            // 3.7. 郵件附件
            File file = new File("D:\\data\\ftpUpload\\2020\\12\\10\\蓋章指令檔案.zip");
            messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
            // 3.8. 設定郵件伺服器登入資訊
            javaMailSend.setHost(host);
            javaMailSend.setUsername(username);
            javaMailSend.setPassword(password);
            javaMailSend.setJavaMailProperties(prop);

            // 六、 傳送郵件,
            javaMailSend.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            MailStmpSend ds = new MailStmpSend();
//          ds.sendMail("xxx@qq.com", "你好,這是一封測試郵件,無需回覆。", "測試郵件");
//          ds.sendMail("xxxx@163.com", "你好,這是一封測試郵件,無需回覆。", "測試郵件");
            ds.sendHtmlMail();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}


四、效果展示

網易163郵箱傳送郵件:
因篇幅問題,附件在最下面,這裡就不截了
在這裡插入圖片描述


網易企業163郵箱傳送郵件:
在這裡插入圖片描述

相關文章