java實現郵件發送的工具類


1.准備工作

1)下載mail-1.4.jar

2)  下載activation-1.1.jar

如果是maven項目,引入依賴:

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.5.0-b01</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

2.工具類MailUtil.java

package com.syy.community._gaowenbin.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * 
 * 郵件發送的工具類
 * @author HUAWEI
 *
 */
public class MailUtil {

    /**
     * 創建簡單的文本郵件
     * @param session 
     * @param mailfrom 郵件發送方地址  eg.xx@qq.com
     * @param mailTo   郵件接收方地址,eg.xx@qq.com
     * @param mailTittle 郵件標題
     * @param mailText   郵件文本主體
     * @return
     * @throws Exception
     */
    public static MimeMessage createSimpleMail(Session session, String mailfrom, String mailTo, String mailTittle,
            String mailText) throws Exception {
        // 創建郵件對象
        MimeMessage message = new MimeMessage(session);
        // 指明郵件的發件人
        message.setFrom(new InternetAddress(mailfrom));
        // 指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
        // 郵件的標題
        message.setSubject(mailTittle);
        // 郵件的文本內容
        message.setContent(mailText, "text/html;charset=UTF-8");
        // 返回創建好的郵件對象
        return message;
    }
    
    /**
     * 創建圖文郵件
     * @param session
     * @param mailMap 郵件的所有內容的包裝
     * @param hasfujian 若為true,mailMap中必須包含相應的信息
     * @return
     * @throws MessagingException
     */
    public static MimeMessage imageMail(Session session,Map<String,Object> mailMap,boolean hasfujian) throws MessagingException {
        //消息的固定信息
        MimeMessage mimeMessage = new MimeMessage(session);
        //郵件發送人
        mimeMessage.setFrom(new InternetAddress(mailMap.get("from").toString()));
        //郵件接收人,可以同時發送給很多人
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(mailMap.get("to").toString()));
        mimeMessage.setSubject(mailMap.get("title").toString()); //郵件主題

        //圖片
        MimeBodyPart body1 = new MimeBodyPart();
        body1.setDataHandler(new DataHandler(new FileDataSource(mailMap.get("datasrc").toString())));
        body1.setContentID(mailMap.get("contentid").toString()); //圖片設置ID

        //文本
        MimeBodyPart body2 = new MimeBodyPart();
        body2.setContent(mailMap.get("content"),"text/html;charset=utf-8");
        
        if(hasfujian){
            List<Map<String,String>> listmap = (List<Map<String, String>>) mailMap.get("fujian");
            List<MimeBodyPart> fjlist = new ArrayList<MimeBodyPart>();
            for(Map<String, String> item:listmap){
                //附件
                MimeBodyPart body = new MimeBodyPart();
                body.setDataHandler(new DataHandler(new FileDataSource(item.get("filesrc").toString())));
                body.setFileName(item.get("filename")); //附件設置名字
                fjlist.add(body);
                //拼裝郵件正文內容
                MimeMultipart multipart1 = new MimeMultipart();
                multipart1.addBodyPart(body1);
                multipart1.addBodyPart(body2);
                multipart1.setSubType("related"); //文本和圖片內嵌成功!

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

                //拼接附件
                MimeMultipart allFile =new MimeMultipart();
                for(MimeBodyPart mbp:fjlist){
                     allFile.addBodyPart(mbp); //附件
                }
                allFile.addBodyPart(contentText);//正文
                allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有類型設置為mixed;

                //放到Message消息中
                mimeMessage.setContent(allFile);
                mimeMessage.saveChanges();//保存修改
            }
        }else{
             //拼裝郵件正文內容
            MimeMultipart multipart1 = new MimeMultipart();
            multipart1.addBodyPart(body1);
            multipart1.addBodyPart(body2);
            multipart1.setSubType("related"); //1.txt.文本和圖片內嵌成功!

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

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

            //放到Message消息中
            mimeMessage.setContent(allFile);
            mimeMessage.saveChanges();//保存修改
        }
        return mimeMessage;
    }
    
    /**
     * 發送郵件方法封裝
     * @param contentMap 郵件配置的map
     * @param imgmial 是否為帶圖郵件
     * @param hasfujian 是否有附件
     * @throws Exception
     */
    public static void sendMail(final Map<String, Object> contentMap,boolean imgmial,boolean hasfujian) throws Exception{
        Properties prop = new Properties();
        //設置QQ郵件服務器
        prop.setProperty("mail.host", contentMap.get("host").toString());
        //郵件發送協議
        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.txt、創建定義整個應用程序所需的環境信息的Session對象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //發件人郵件用戶名、授權碼
                return new PasswordAuthentication(contentMap.get("from").toString(),
                        contentMap.get("password").toString());
            }
        });
        //可以通過session開啟Dubug模式,查看所有的過程
        session.setDebug(true);

        //2.獲取連接對象,通過session對象獲得Transport,需要捕獲或者拋出異常;
        Transport tp = session.getTransport();
        //3.連接服務器,需要拋出異常;
        tp.connect(contentMap.get("host").toString(),contentMap.get("from").toString(),contentMap.get("password").toString());
        MimeMessage mimeMessage = null;
        //4.連接上之后我們需要發送郵件;
        if(imgmial){
            mimeMessage = imageMail(session,contentMap,hasfujian);
        }else{
            mimeMessage = createSimpleMail(session, contentMap.get("from").toString(), contentMap.get("to").toString(), contentMap.get("title").toString(), contentMap.get("content").toString());
        }
        //5.發送郵件
        tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
        //6.關閉連接
        tp.close();
    }
}
View Code

3.調用test.java

public static Map<String,Object> getMailMap(JSONObject jsondata){
        //發送方信息配置
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("host",jsondata.getString("host"));
        map.put("from",jsondata.getString("from"));
        map.put("password",jsondata.getString("password"));
        //發送內容配置
        map.put("datasrc","src/resource/fujian/dh.jpg");
        map.put("contentid","dh.jpg");
        map.put("content","請注意,我不是廣告<img src='cid:dh.jpg'>");
        map.put("to","xxx@qq.com");
        map.put("title","just a jok");
        //附件部分
        Map<String,String> mapfj = new HashMap<String, String>();
        mapfj.put("filesrc","src/resource/fujian/spring.xml");
        mapfj.put("filename","spring.xml");
        Map<String,String> mapfj1 = new HashMap<String, String>();
        mapfj1.put("filesrc","src/resource/fujian/1.txt");
        mapfj1.put("filename","1.txt");
        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
        list.add(mapfj);
        list.add(mapfj1);
        map.put("fujian", list);
        return map;
    }

    public static void main(String[] args) throws Exception {
        Map<String,Object> map = getMailMap(ConfigCenter.getMailSenderInfo());
        MailUtil.sendMail(map, true, true);
    }
View Code

4.發送方配置類ConfigCenter.java

package com.syy.community._gaowenbin.config;

import net.sf.json.JSONObject;

/**
 *
 * 配置中心
 * getMailSenderInfo 方法為email外發提供發送方配置
 * @author HUAWEI
 *
 */
public class ConfigCenter {

    private static String from = "xxx@163.com";
    private static String pass = "xxx";
    private static String host = "smtp.163.com";
    public static JSONObject getMailSenderInfo(){
        JSONObject obj = new JSONObject();
        obj.accumulate("from",from );
        obj.accumulate("password",pass );
        obj.accumulate("host",host );
        return obj;
    }
    
}
View Code

 


免責聲明!

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



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