1. 程式人生 > >Java傳送郵件工具類

Java傳送郵件工具類

package com.blyl.util;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Properties;

/**
 * @author zzx
 * @Description: ${todo}
 * @date 2018/11/12 11:56
 */

public class sendMailUtil {

    /**
     *
     * @param filePath 傳送excel檔案的路徑
     * @param eamilUrl 接受郵件郵箱地址
     * @param sendSubject 郵件標題
     * @return
     */
    public static String sendMessage(String filePath, String[] eamilUrl, String sendSubject){

        //傳送郵件郵箱資訊
        String myEmailSMTPHost = "smtp.163.com";
        String myEmailAccount = "
[email protected]
"; String myEmailPassword = "zzx123"; String senderName = "傳送人暱稱"; //傳送人暱稱 // String[] eamilUrl = new String[] {"[email protected]"};//接受郵件郵箱 // String sendSubject = "郵件標題"; //郵件標題 String sendContent = "郵件內容"; //郵件內容 // String imgPath = request.getSession().getServletContext().getRealPath("/") + "mail\\img\\1.jpg";// 傳送圖片 // String filePath = request.getSession().getServletContext().getRealPath("/") + "mail\\file\\123.docx"; //傳送附件 // String filePath = request.getSession().getServletContext().getRealPath("/") + "mail\\file\\2018-11-09\\73f02f55-0109-4518-b108-ee01c1df93af.xlsx"; //傳送附件 Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); // 使用的協議(JavaMail規範要求) props.setProperty("mail.smtp.host", myEmailSMTPHost); // 發件人的郵箱的 SMTP 伺服器地址 props.setProperty("mail.smtp.auth", "true"); // 需要請求認證 Session session = Session.getDefaultInstance(props);// 根據配置建立會話物件, 用於和郵件伺服器互動 session.setDebug(true); try { //傳送複雜郵件 MimeMessage message = createComplicatedMessage(session, myEmailAccount, senderName, eamilUrl, sendSubject, sendContent,null, filePath, sendSubject); Transport transport = session.getTransport(); //獲取郵件傳輸物件 transport.connect(myEmailAccount, myEmailPassword); transport.sendMessage(message, message.getAllRecipients()); transport.close(); return "success"; } catch (Exception e) { e.printStackTrace(); return "fail"; } } /** * @Author: zzx * @Description: 建立郵件,圖片路徑可以為空 * @Date: 2018/11/8 14:33 * @Param: sendMail:傳送人的郵箱,senderName:傳送人的暱稱,receiveMail:接收郵件的郵箱,subject:郵件標題,msgContent:郵件內容,imgPath:圖片路徑,filePath:附件路徑,sendSubject:附件名字 * @Return */ public static MimeMessage createComplicatedMessage(Session session,String sendMail, String senderName, String[] receiveMail,String subject,String msgContent, String imgPath, String filePath, String sendSubject) throws Exception{ MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(sendMail,senderName,"UTF-8")); Address[] addr = new Address[receiveMail.length]; for(int i=0;i<addr.length;i++){ addr[i] = new InternetAddress(receiveMail[i], "", "UTF-8"); } message.addRecipients(Message.RecipientType.TO, addr); message.setSubject(subject); /* * 郵件內容的建立:圖片和附件 */ //建立文字節點 MimeBodyPart text = new MimeBodyPart(); //將文字和圖片節點結合 MimeMultipart text_image = new MimeMultipart(); if(imgPath != null) { //建立圖片節點 MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource(imgPath)); //讀取本地檔案 image.setDataHandler(dh); //將資料新增到節點 image.setContentID("image_id");// 為“節點”設定一個唯一編號(在文字“節點”將引用該ID) //將圖片包含到文字內容中 text.setContent(msgContent + "<br/><img src='cid:image_id'/>", "text/html;charset=UTF-8"); text_image.addBodyPart(text); text_image.addBodyPart(image); text_image.setSubType("related"); //關聯關係 有內嵌資源要定義related } else { text.setContent(msgContent, "text/html;charset=UTF-8"); text_image.addBodyPart(text); } //將混合節點封裝成普通節點BodyPart,郵件最終由多個BodyPart組成 MimeBodyPart text_image_body = new MimeBodyPart(); text_image_body.setContent(text_image); //新增附件節點 MimeBodyPart document = new MimeBodyPart(); DataHandler dhdoc = new DataHandler(new FileDataSource(filePath)); //讀取本地文件 document.setDataHandler(dhdoc); //將附件資料新增到節點 // document.setFileName(MimeUtility.decodeText(dhdoc.getName())); //設定附件檔名 document.setFileName(sendSubject + ".xlsx"); //設定附件檔名 //設定文字和圖片,附件的關係(混合大節點) MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text_image_body); mm.addBodyPart(document); mm.setSubType("mixed"); //有附件資源要定義mixed //最終節點新增到郵件中 message.setContent(mm); message.setSentDate(new Date()); message.saveChanges(); return message; } }