Java Web郵件發送(感謝秦疆老師)


1、傳輸協議:

  • SMTP協議

    處理用戶郵件發送的請求。

  • POP3協議

    處理用戶郵件接收請的求。

2、導包:

mail-1.4.7.jar

activation-1.1.1.jar

3、過程:

4、代碼:

import com.sun.mail.util.MailSSLSocketFactory;

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

public class sendMail01 {
    //簡單郵件:純文本內容
    //復雜郵件:文本+圖片+附件

    //要發送郵件需要獲取協議,開啟POP3和SMTP服務
    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();//創建一封郵件
        //以下三項的Key的值都是固定的
        prop.setProperty("mail.host","smtp.qq.com");//設置郵件服務器
        prop.setProperty("mail.transport.protocol","smtp");//設置郵件發送協議
        prop.setProperty("mail.smtp.auth","true");//需要驗證用戶名和密碼

        //如果是QQ郵箱,還要設置SSL加密,加上以下代碼即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",sf);

        //==========使用JavaMail發送郵件的6個步驟======

        //1、創建定義整個應用程序所需要的環境信息的Session對象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication(){
                //發件人郵箱的用戶名和授權碼(只有qq是授權碼,其它的是密碼)
                return new PasswordAuthentication("1612893803@qq.com","授權碼");
            }
        });
        //開啟Session的debug模式,這樣就可以查看到程序發送Email的運行狀態
        session.setDebug(true);
        
        //2、通過Session得到transport對象
        Transport ts = session.getTransport();

        //3、使用郵箱的用戶名和授權碼連上郵件服務器
        ts.connect("SMTP.qq.com","1612893803@qq.com","授權碼");
        //4、創建郵件

        //創建郵件對象
        MimeMessage message = new MimeMessage(session);
        //指明郵件的發件人
        message.setFrom(new InternetAddress("1612893803@qq.com"));
        //指明郵件的收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com"));
        //郵件的標題
        message.setSubject("只是一個普通的純文本郵件");
        //郵件的文本內容
        message.setContent("你好哇,我來了!","text/html;charset=UTF-8");
        //5、發送郵件
        ts.sendMessage(message,message.getAllRecipients());
        //6、關閉連接
        ts.close();
    }
}

 

5、帶附件:

附件格式包含關系:

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;

public class sendMail02 {
    //簡單郵件:純文本內容
    //復雜郵件:文本+圖片+附件

    /*
    *MimeMessage類表示整封郵件。
    *MimeBodyPart類表示郵件的一個MIME消息。
    *MimeMultipart類表示一個由多個MIME消息組合成的組合MIME消息。
    */

    //要發送郵件需要獲取協議,開啟POP3和SMTP服務
    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();//創建一封郵件
        //以下三項的Key的值都是固定的
        prop.setProperty("mail.host","smtp.qq.com");//設置郵件服務器
        prop.setProperty("mail.transport.protocol","smtp");//設置郵件發送協議
        prop.setProperty("mail.smtp.auth","true");//需要驗證用戶名和密碼

        //如果是QQ郵箱,還要設置SSL加密,加上以下代碼即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",sf);

        //==========使用JavaMail發送郵件的6個步驟======
        
        //變量名字定義的有點亂,不想改了。將就下吧

        //1、創建定義整個應用程序所需要的環境信息的Session對象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication(){
                //發件人郵箱的用戶名和授權碼
                return new PasswordAuthentication("1612893803@qq.com","授權碼");
            }
        });
        //開啟Session的debug模式,這樣就可以查看到程序發送Email的運行狀態
        session.setDebug(true);

        //2、通過Session得到transport對象
        Transport ts = session.getTransport();

        //3、使用郵箱的用戶名和授權碼連上郵件服務器
        ts.connect("SMTP.qq.com","1612893803@qq.com","授權碼");
        //4、創建郵件

        //創建郵件對象
        MimeMessage message = new MimeMessage(session);
        //指明郵件的發件人
        message.setFrom(new InternetAddress("1612893803@qq.com"));
        //指明郵件的收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com"));
        //郵件的標題
        message.setSubject("這是一個有文本、圖片、附件的郵件");
        //郵件的內容
       //=================================================
       //准備圖片數據 DataHandler:處理除文本外的數據
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("C:\\Users\\Think\\Documents\\image-20200220200136289.png"));
        image.setDataHandler(dh);
        image.setContentID("xx.png");//設置圖片ID
        //ContentID用於為“multipart/related”組合消息中的內嵌資源指定一個唯一標識號,在HTML格式的正文中可以使用這個唯一標識號來引用該內嵌資源。
        //注意,在引用Content-ID頭字段標識的內嵌資源時,要在資源的唯一標識號前面加上“cid:”,以說明要采用唯一標識號對資源進行引用。

        //准備正文數據
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("這是一個帶圖片、文本、附件<img src='cid:xx.png'>的郵件","text/html;charset=UTF-8");

        //准備附件數據
        MimeBodyPart accessory = new MimeBodyPart();
        DataHandler dh2 = new DataHandler(new FileDataSource("C:\\Users\\Think\\Pictures\\Saved Pictures\\illust_70110900_20191209_012234.jpg"));
        accessory.setDataHandler(dh2);
        accessory.setFileName(MimeUtility.encodeText("yan"));//給附件一個名字,發過去顯示的就是這個設定的名字||MimeUtility.encodeText("")解決附件發送過去亂碼;

        //*****************************!!!!!!!**********************
            /*
                 MimeBodyPart:表示復雜郵件的一個組成部分,它可以表示文本,附件,圖片
                 DataHandler:表示可以讀取圖片或附件
                 MimeMultipart:表示二個郵件組成部分的關系,文本和圖片的關系是"related"關系
                 Content-ID:表示圖片的編號
                 related:圖片|| mixed:附件
             */
        //*****************************!!!!!!!**********************

        //拼接圖片和文本
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        mm.setSubType("related");

        //將文本+圖片封裝成郵件的組成部分,即將關系看作成一個部分
        MimeBodyPart context = new MimeBodyPart();
        context.setContent(mm);

        //把附件也加上
        MimeMultipart file = new MimeMultipart();
        file.addBodyPart(context);
        file.addBodyPart(accessory);
        file.setSubType("mixed");

        //放到消息中
        message.setContent(file);//把編輯好的內容放入消息中
        message.saveChanges();//保存修改!


        //=================================================
        //5、發送郵件
        ts.sendMessage(message,message.getAllRecipients());//message:發送的消息||message.getAllRecipients():獲取保存在里面的地址
        //6、關閉連接
        ts.close();
    }
     //對於,復雜類型的郵件,位置關系特別注意和加入的順利要一致
}

 


免責聲明!

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



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