1. 程式人生 > 其它 >java-電子郵件傳送原始碼

java-電子郵件傳送原始碼

技術標籤:javajava

純文字郵件:

import com.sun.mail.util.MailSSLSocketFactory;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendEmail {

    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();
        prop.setProperty
("mail.host", "smtp.qq.com"); 設定QQ郵件伺服器 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傳送郵件的5個步驟 //建立定義整個應用程式所需的環境資訊的 Session 物件 Session session = Session.
getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //發件人郵件使用者名稱、授權碼 return new PasswordAuthentication("[email protected]", "授權碼"); } }); //開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態 session.setDebug(true); //2、通過session得到transport物件 Transport ts = session.getTransport(); //3、使用郵箱的使用者名稱和授權碼連上郵件伺服器 ts.connect("smtp.qq.com", "[email protected]", "授權碼"); //4、建立郵件 //建立郵件物件 MimeMessage message = new MimeMessage(session); //指明郵件的發件人 message.setFrom(new InternetAddress("[email protected]")); //指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發 message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); //郵件的標題 message.setSubject("只包含文字的簡單郵件"); //郵件的文字內容 message.setContent("你好啊!", "text/html;charset=UTF-8"); //5、傳送郵件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); } }

高階郵件(帶圖片和附件)

先認識兩個類一個名詞:

MIME(多用途網際網路郵件擴充套件型別)

MimeBodyPart類

javax.mail.internet.MimeBodyPart類 表示的是一個MIME訊息,它和MimeMessage類一樣都是從Part介面繼承過來。

MimeMultipart類

javax.mail.internet.MimeMultipart是抽象類 Multipart的實現子類,它用來組合多個MIME訊息。一個MimeMultipart物件可以包含多個代表MIME訊息的MimeBodyPart物件。
在這裡插入圖片描述

建立包含內嵌圖片的郵件
  • 前面的例子中是單獨的使用HTML或者是純文字內容,但是有時候我們需要在純文字中使用內嵌的方式顯示一些圖片,因此就要將純文字和內嵌圖片單獨存放在MimeBodyPart中然後再將其存放在一個Mimemultipart物件中即可。
    程式碼如下:
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 SendImageEmail {
    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.qq.com");  設定QQ郵件伺服器
        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傳送郵件的5個步驟

        //1、建立定義整個應用程式所需的環境資訊的 Session 物件
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //發件人郵件使用者名稱、授權碼
                return new PasswordAuthentication("[email protected]", "授權碼");
            }
        });


        //開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
        session.setDebug(true);

        //2、通過session得到transport物件
        Transport ts = session.getTransport();

        //3、使用郵箱的使用者名稱和授權碼連上郵件伺服器
        ts.connect("smtp.qq.com", "[email protected]", "授權碼");

        //4、建立郵件

        //建立郵件
        MimeMessage message = new MimeMessage(session);

        // 設定郵件的基本資訊
        //發件人
        message.setFrom(new InternetAddress("[email protected]"));
        //收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
        //郵件標題
        message.setSubject("帶圖片的郵件");

        // 準備郵件資料

        // 準備圖片資料
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
        image.setDataHandler(dh);
        image.setContentID("bz.jpg");

        // 準備正文資料
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("這是一封郵件正文帶圖片<img src='cid:bz.jpg'>的郵件", "text/html;charset=UTF-8");

        // 描述資料關係
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        mm.setSubType("related");

        //設定到訊息中,儲存修改
        message.setContent(mm);
        message.saveChanges();

        //5.傳送郵件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
    }
}

帶圖片和附件的複雜郵件傳送

程式碼如下:

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.security.GeneralSecurityException;
import java.util.Properties;

public class SendFileMail {
    public static void main(String[] args) throws MessagingException, GeneralSecurityException {

        //建立一個配置檔案儲存並讀取資訊
        Properties properties = new Properties();

        //設定qq郵件伺服器
        properties.setProperty("mail.host","smtp.qq.com");
        //設定傳送的協議
        properties.setProperty("mail.transport.protocol","smtp");
        //設定使用者是否需要驗證
        properties.setProperty("mail.smtp.auth", "true");


        //=================================只有QQ存在的一個特性,需要建立一個安全的連結
        // 關於QQ郵箱,還要設定SSL加密,加上以下程式碼即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);

        //=================================準備工作完畢

        //1.建立一個session會話物件;
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("[email protected]", "授權碼");
            }
        });

        //可以通過session開啟Dubug模式,檢視所有的過程
        session.setDebug(true);


        //2.獲取連線物件,通過session物件獲得Transport,需要捕獲或者丟擲異常;
        Transport tp = session.getTransport();

        //3.連線伺服器,需要丟擲異常;
        tp.connect("smtp.qq.com","[email protected]","授權碼");

        //4.連線上之後我們需要傳送郵件;
        MimeMessage mimeMessage = imageMail(session);

        //5.傳送郵件
        tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

        //6.關閉連線
        tp.close();

    }


    public static MimeMessage imageMail(Session session) throws MessagingException {

        //訊息的固定資訊
        MimeMessage mimeMessage = new MimeMessage(session);

        //郵件傳送人
        mimeMessage.setFrom(new InternetAddress("[email protected]"));
        //郵件接收人,可以同時傳送給很多人,我們這裡只發給自己;
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
        mimeMessage.setSubject("我也不知道是個什麼東西就發給你了"); //郵件主題


        /*
        編寫郵件內容
        1.圖片
        2.附件
        3.文字
         */

        //圖片
        MimeBodyPart body1 = new MimeBodyPart();
        body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/yhbxb.png")));
        body1.setContentID("yhbxb.png"); //圖片設定ID

        //文字
        MimeBodyPart body2 = new MimeBodyPart();
        body2.setContent("請注意,我不是廣告<img src='cid:yhbxb.png'>","text/html;charset=utf-8");

        //附件
        MimeBodyPart body3 = new MimeBodyPart();
        body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));
        body3.setFileName("log4j.properties"); //附件設定名字

        MimeBodyPart body4 = new MimeBodyPart();
        body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt")));
        body4.setFileName(""); //附件設定名字

        //拼裝郵件正文內容
        MimeMultipart multipart1 = new MimeMultipart();
        multipart1.addBodyPart(body1);
        multipart1.addBodyPart(body2);
        multipart1.setSubType("related"); //1.文字和圖片內嵌成功!

        //new MimeBodyPart().setContent(multipart1); //將拼裝好的正文內容設定為主體
        MimeBodyPart contentText =  new MimeBodyPart();
        contentText.setContent(multipart1);

        //拼接附件
        MimeMultipart allFile =new MimeMultipart();
        allFile.addBodyPart(body3); //附件
        allFile.addBodyPart(body4); //附件
        allFile.addBodyPart(contentText);//正文
        allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有型別設定為mixed;


        //放到Message訊息中
        mimeMessage.setContent(allFile);
        mimeMessage.saveChanges();//儲存修改


        return mimeMessage;

    }

}