JMail邮件发送

JMail邮件发送

import org.apache.commons.lang3.StringUtils;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.FileOutputStream;
import java.util.*;

/**
 * @auther: 张勇波
 * @date: 2019-05-10 16:40
 * @description: smtp邮件发送工具类
 */
public class SendEmailSMTP {
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        String[] fromEmail = {"***@yeah.net", "yeah的昵称"};
        String fromEmailPWD = "***";
        Map<String, String> toEmail = new HashMap<>();
        toEmail.put("***@foxmail.com", "foxmail昵称");
        Map<String, String> ccEmail = new HashMap<>();
        ccEmail.put("***@bis.com.cn", "bis昵称");
        String subject = "带附件和带图片的的邮件4";
        String content = "这是测试邮件发送<br/><img src='cid:Desert.jpg'>这是测试啊<br/><img src='cid:test.jpg'>";
        List<String> partList = new ArrayList<>();
        partList.add("D:\\测试附件.zip");
        partList.add("D:\\测试附件2asda.xlsx");
        Map<String, String> picMap = new HashMap<>();
        picMap.put("D:\\Desert.jpg", "Desert.jpg");
        picMap.put("D:\\测试图片.jpg", "test.jpg");
        String savePath = "D:\\";
        String host = "smtp.yeah.net";
        String port = "25";
        sendMixedMail(host, port, fromEmail, fromEmailPWD, toEmail, ccEmail, null, subject, content, partList, picMap, savePath);
//        sendMixedMail(host, port, fromEmail, fromEmailPWD, toEmail, subject, content, null, null, null);
    }

    /**
     * 发送邮件
     *
     * @param host      smtp地址mail.smtp.host
     * @param port      smtp端口mail.smtp.port
     * @param fromEmail 发送地址,第一个值为发送邮箱地址,第二个值为昵称,没有昵称的设置为地址
     * @param fromEmail 发送邮箱的pwd
     * @param toEmail   接收地址集合(支持批量发送,key为地址,value为昵称,没有昵称的设置为地址)
     * @param ccEmail   抄送地址集合(支持批量发送,key为地址,value为昵称,没有昵称的设置为地址)没有设置为null
     * @param bccEmail  密送地址集合(支持批量发送,key为地址,value为昵称,没有昵称的设置为地址)没有设置为null
     * @param subject   主题
     * @param content   正文html格式 正文内的图片添加格式为<img src='cid:Desert.jpg'> cid为图片的唯一标识
     * @param partList  附件集合。 如不需要设置为null即可
     * @param picMap    图片集合,地址为key ;value是邮件中使用该图片的cid,不能为中文 。如不需要设置为null即可
     * @param savePath  生成邮件物理保存地址,将会以邮件subject+时间命名。如不需要设置为null即可
     * @throws Exception
     */
    public static void sendMixedMail(String host, String port, String[] fromEmail, String fromEmailPWD, Map<String, String> toEmail, Map<String, String> ccEmail, Map<String, String> bccEmail, String subject, String content, List<String> partList, Map<String, String> picMap, String savePath) throws Exception {
        Properties prop = new Properties();
        prop.setProperty("mail.smtp.host", host);
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.port", port);
        prop.setProperty("mail.smtp.auth", "true");
        Session session = Session.getInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(fromEmail[0], fromEmailPWD);
            }
        });
//        session.setDebug(true);
        //创建邮件
        MimeMessage message = new MimeMessage(session);
        //设置邮件的基本信息
        message.setFrom(new InternetAddress(fromEmail[0], fromEmail[1], "UTF-8"));
        if (toEmail != null && toEmail.size() > 0) {
            //配置接收邮件的地址
            Address[] addr = new Address[toEmail.size()];
            int i = 0;
            for (Map.Entry<String, String> stringStringEntry : toEmail.entrySet()) {
                addr[i] = new InternetAddress(stringStringEntry.getKey(), stringStringEntry.getValue(), "UTF-8");
                i++;
            }
            message.setRecipients(Message.RecipientType.TO, addr);
            //处理抄送
            if (ccEmail != null && ccEmail.size() > 0) {
                int j = 0;
                Address[] addr2 = new Address[ccEmail.size()];
                for (Map.Entry<String, String> stringStringEntry : ccEmail.entrySet()) {
                    addr2[j] = new InternetAddress(stringStringEntry.getKey(), stringStringEntry.getValue(), "UTF-8");
                    j++;
                }
                message.setRecipients(Message.RecipientType.CC, addr2);
            }
            //处理密送
            if (bccEmail != null && bccEmail.size() > 0) {
                int j = 0;
                Address[] addr2 = new Address[bccEmail.size()];
                for (Map.Entry<String, String> stringStringEntry : bccEmail.entrySet()) {
                    addr2[j] = new InternetAddress(stringStringEntry.getKey(), stringStringEntry.getValue(), "UTF-8");
                    j++;
                }
                message.setRecipients(Message.RecipientType.BCC, addr2);
            }
            message.setSubject(subject);
            //描述关系:正文和附件
            MimeMultipart mp = new MimeMultipart();
            //描述关系:正文和图片
            MimeMultipart mp1 = new MimeMultipart();
            //正文
            MimeBodyPart text = new MimeBodyPart();
            text.setContent(content, "text/html;charset=UTF-8");
            mp1.addBodyPart(text);
            if (picMap != null && picMap.size() > 0)
                //图片处理
                for (Map.Entry<String, String> entry : picMap.entrySet()) {
                    MimeBodyPart image = new MimeBodyPart();
                    image.setDataHandler(new DataHandler(new FileDataSource(entry.getKey())));
                    image.setContentID(entry.getValue());
                    mp1.addBodyPart(image);
                }
            mp1.setSubType("related");//mixed 混合; related 关联; alternative 交替
            if (partList != null && partList.size() > 0)
                //处理附件
                for (String s : partList) {
                    MimeBodyPart attach = new MimeBodyPart();
                    DataHandler dh = new DataHandler(new FileDataSource(s));
                    attach.setDataHandler(dh);
                    attach.setFileName(MimeUtility.encodeText(dh.getName()));
                    mp.addBodyPart(attach);
                }
            MimeBodyPart contents = new MimeBodyPart();
            contents.setContent(mp1);
            mp.addBodyPart(contents);
            mp.setSubType("mixed");
            message.setContent(mp);
            message.saveChanges();
            if (StringUtils.isNotBlank(savePath))
                //将创建好的邮件写入到磁盘以文件的形式进行保存
                message.writeTo(new FileOutputStream(savePath + subject + IDUtil.getID() + ".eml"));
            Transport.send(message);
        } else {
            System.out.println("--sendMixedMail--邮箱接收人不能为空");
        }
    }
}

 上一篇
JMail收取邮件 JMail收取邮件
JMail收取邮件import org.apache.commons.lang3.StringUtils; import javax.mail.*; import javax.mail.internet.InternetAddress;
2019-08-19
下一篇 
JQGrid模版 JQGrid模版
JQGrid模版<!-- 需要js文件包jquery-ui-1.9.2、jquery.jqGrid-4.5.4 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//E
2019-08-19
  目录