Javaweb實現郵件發送

本文實例為大傢分享瞭Javaweb實現郵件發送的具體代碼,供大傢參考,具體內容如下

發送郵件使用的是SMTP協議:一般是smtp.xxx.com ,比如smtp.qq.com

接收郵件:POP3協議

附件:MIME

使用Java發送郵件需要準備JavaMail API 和 Java Activation Framework

得到兩個jar包

mail.jar

activation.jar

import com.sun.mail.util.MailSSLSocketFactory;
 
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;
 
public class Email {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        Properties prop = new Properties();
        //設置qq郵件服務器
        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發送郵件的5個步驟
        //1,創建定義整個應用程序所需的環境信息的Session對象
 
        //qq才有,其他郵箱就不用
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("[email protected]", "hnjwzkfilnnnbbig");
            }
        });
        //開啟session的debug模式,可以看到程序發送Email的運行狀態
        /*session.setDebug(true);*/
 
        //2,通過session得到transport對象
        Transport ts = session.getTransport();
        //3,使用郵箱的用戶名和授權碼連接上郵件服務器
        ts.connect("smtp.qq.com", "[email protected]", "hnjwzkfilnnnbbig");
        //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());
        //6,關閉連接
        ts.close();
    }
}

關於在郵件中添加附件 MIME(多用途互聯網郵件擴展類型)

MimeBodyPart類

javax.mail.internet.MimeBodyPart類表示的是一個MIME消息,它和MimeMesssage類一樣都是從Part接口結成過來

MimeMultipart類

javax.mail.internet.MimeMultipart是抽象類Multipart的實現子類,它用來組合多個MIME消息,一個MimeMultipart對象可以包含多個代表MIME消息的MimeBodyPart對象

帶圖片的郵件,其他的代碼與上面一樣,隻需要更改郵件的內容即可

//郵件的標題
message.setSubject("隻包含圖片的簡單郵件");
 //準備郵件數據
 
//準備圖片數據
MimeBodyPart image = new MimeBodyPart();
//圖片需要數據處理,DataHandler就是這樣的一個類
DataHandler dh = new DataHandler(new FileDataSource("src/main/resources/01.png"));
image.setDataHandler(dh);//在我們的body中放入這個處理的圖片數據
image.setContentID("01.png");
 
//準備正文數據
MimeBodyPart text = new MimeBodyPart();
text.setContent("這是一封帶圖片<img src='cid:01.png/>'的郵件", "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());

帶附件的郵件,操作基本沒差,隻需要創建一個附件的MimeBodyPart再添加到消息中即可

//準備圖片數據
MimeBodyPart image = new MimeBodyPart();
//圖片需要數據處理,DataHandler就是這樣的一個類
DataHandler dh = new DataHandler(new FileDataSource("src/main/resources/01.png"));
image.setDataHandler(dh);//在我們的body中放入這個處理的圖片數據
        image.setContentID("01.png");
 
//附件
MimeBodyPart accessory = new MimeBodyPart();
accessory.setDataHandler(new DataHandler(new FileDataSource("src/main/resources/hello.txt")));
accessory.setFileName("hello.txt");//設置附件的名字
//準備正文數據
MimeBodyPart text = new MimeBodyPart();
text.setContent("這是一封帶圖片<img src='cid:01.png'/>的郵件", "text/html;charset=UTF-8");
//描述數據關系
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");
 
//將圖片和文本封裝為一個MimeMultipart
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(mm);
 
//拼接附件
MimeMultipart allFile = new MimeMultipart();
allFile.addBodyPart(accessory);//附件
allFile.addBodyPart(contentText);
allFile.setSubType("mixed");//正文和附件都存在郵件中,所有類型設置為mixed
 
//設置到消息中,保存修改
message.setContent(allFile);//把最後編輯好的郵件放到消息當中
message.saveChanges();//保存修改
//5,發送郵件
ts.sendMessage(message,message.getAllRecipients());

註意點:

在一個web項目中:例如實現一個用戶註冊就給用戶發一封郵件的功能,但通過之前的代碼我們可以發現,發送一封郵件是需要時間的,這個時候考慮到用戶體驗我們不應該讓用戶等待,所以可以考慮使用多線程,為郵件發送單獨設置為一條線程,而不影響主線程的操作!

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: