1. 程式人生 > >給多個人傳送帶多附件郵件demo

給多個人傳送帶多附件郵件demo

package cn.zfs.commons.utils;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
 
 
/**
 * Java Mail 工具類
 *
 * @author XueQi
 * @version 1.0
 *
 */
public class SendMail {
    private static String host;
    private static String username;
    private static String password;
    private static String from;
    private static String nick;
 
    static {
        try {
            // Test Data
            host = "smtp.sports.cn";//smtp協議
            username = "12*****

[email protected]";//郵箱名稱
            password = "**********";//郵箱密碼
            from = "****@sports.cn";
            nick = "管理員";
            // nick + from 組成郵箱的發件人資訊
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 傳送郵件
     *
     * @param to
     *            收件人列表,以","分割
     * @param subject
     *            標題
     * @param body
     *            內容
     * @param filepath
     *            附件列表,無附件傳遞null
     * @return
     * @throws MessagingException
     * @throws AddressException
     * @throws UnsupportedEncodingException
     */
    public static boolean sendMail(String to, String subject, String body,
            List<String> filepath) throws AddressException, MessagingException,
            UnsupportedEncodingException {
        // 引數修飾
        if (body == null) {
            body = "";
        }
        if (subject == null) {
            subject = "無主題";
        }
        // 建立Properties物件
        Properties props = System.getProperties();
        // 建立信件伺服器
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.auth", "true"); // 通過驗證
        // 得到預設的對話物件
        Session session = Session.getDefaultInstance(props, null);
        // 建立一個訊息,並初始化該訊息的各項元素
        MimeMessage msg = new MimeMessage(session);
        nick = MimeUtility.encodeText(nick);
        msg.setFrom(new InternetAddress(nick + "<" + from + ">"));
        // 建立收件人列表
        if (to != null && to.trim().length() > 0) {
            String[] arr = to.split(",");
            int receiverCount = arr.length;
            if (receiverCount > 0) {
                InternetAddress[] address = new InternetAddress[receiverCount];
                for (int i = 0; i < receiverCount; i++) {
                    address[i] = new InternetAddress(arr[i]);
                }
                msg.addRecipients(Message.RecipientType.TO, address);
                msg.setSubject(subject);
                // 後面的BodyPart將加入到此處建立的Multipart中
                Multipart mp = new MimeMultipart();
                // 附件操作
                if (filepath != null && filepath.size() > 0) {
                    for (String filename : filepath) {
                        MimeBodyPart mbp = new MimeBodyPart();
                        // 得到資料來源
                        FileDataSource fds = new FileDataSource(filename);
                        // 得到附件本身並至入BodyPart
                        mbp.setDataHandler(new DataHandler(fds));
                        // 得到檔名同樣至入BodyPart
                        mbp.setFileName(new String(fds.getName().getBytes("gb2312"),"ISO8859-1"));
                        mp.addBodyPart(mbp);
                    }
                    MimeBodyPart mbp = new MimeBodyPart();
                    mbp.setText(body);
                    mp.addBodyPart(mbp);
                    // 移走集合中的所有元素
                    filepath.clear();
                    // Multipart加入到信件
                    msg.setContent(mp);
                } else {
                    // 設定郵件正文
                    msg.setText(body);
                }
                // 設定信件頭的傳送日期
                msg.setSentDate(new Date());
                msg.saveChanges();
                // 傳送信件
                Transport transport = session.getTransport("smtp");
                transport.connect(host, username, password);
                transport.sendMessage(msg,
                        msg.getRecipients(Message.RecipientType.TO));
                transport.close();
                return true;
            } else {
                System.out.println("None receiver!");
                return false;
            }
        } else {
            System.out.println("None receiver!");
            return false;
        }
    }
 
    public static void main(String[] args) throws AddressException,
            UnsupportedEncodingException, MessagingException {
        List<String> filepath = new ArrayList<>();
        filepath.add("C:\\網上申報系統修改~2018-7-30.doc");
        filepath.add(" ");
        sendMail("12*****
[email protected]
", "註冊資訊郵件", "註冊郵件,有附件",
                filepath);
    }
}