package com.test;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

/**
 * 邮件管理器
 * java 实现邮件的发送, 抄送及多附件
 *
 * @author zmq
 * @version 1.0
 * @created at    (实现腾讯企业邮箱)
 */
public class EmailManager {

public static String username = "zhangmqt@dcfcs.com"; // 服务邮箱(from邮箱)
    public static String password = "xxxxxxxxxx"; // 邮箱密码(这里的密码为第三方授权码)
    public static String senderNick = "zhangmqt@dcfcs.com";   // 发件人昵称

private Properties props; // 系统属性
    private Session session; // 邮件会话对象
    private MimeMessage mimeMsg; // MIME邮件对象
    private Multipart mp;   // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

private static EmailManager instance = null;

public EmailManager() {
        props = System.getProperties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.transport.protocol", "smtp");
       // props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.host", "smtp.exmail.qq.com");
      //  props.put("mail.smtp.port", "25");
        props.put("mail.smtp.port", "587");
        props.put("username", username);
        props.put("password", password);
        // 建立会话
        session = Session.getDefaultInstance(props);
        session.setDebug(true);
    }

public static EmailManager getInstance() {
        if (instance == null) {
            instance = new EmailManager();
        }
        return instance;
    }

/**
     * 发送邮件
     *
     * @param from     发件人
     * @param to       收件人
     * @param copyto   抄送
     * @param subject  主题
     * @param content  内容
     * @param fileList 附件列表
     * @return
     */
    public boolean sendMail(String from, String[] to, String[] copyto, String subject, String content, String[] fileList) {
        boolean success = true;
        try {
            mimeMsg = new MimeMessage(session);
            mp = new MimeMultipart();

// 自定义发件人昵称
            String nick = "";
            try {
                nick = javax.mail.internet.MimeUtility.encodeText(senderNick);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            // 设置发件人
            mimeMsg.setFrom(new InternetAddress(from));
            //mimeMsg.setFrom(new InternetAddress(from, nick));
            // 设置收件人
            if (to != null && to.length > 0) {
                String toListStr = getMailList(to);
                mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toListStr));
            }
            // 设置抄送人
            if (copyto != null && copyto.length > 0) {
                String ccListStr = getMailList(copyto);
                mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccListStr));
            }
            // 设置主题
            mimeMsg.setSubject(subject);
            // 设置正文
            BodyPart bp = new MimeBodyPart();
            bp.setContent(content, "text/html;charset=utf-8");
            mp.addBodyPart(bp);
            // 设置附件
            if (fileList != null && fileList.length > 0) {
                for (int i = 0; i < fileList.length; i++) {
                    bp = new MimeBodyPart();
                    FileDataSource fds = new FileDataSource(fileList[i]);
                    bp.setDataHandler(new DataHandler(fds));
                    bp.setFileName(MimeUtility.encodeText(fds.getName(), "UTF-8", "B"));
                    mp.addBodyPart(bp);
                }
            }
            mimeMsg.setContent(mp);
            mimeMsg.saveChanges();
            // 发送邮件
            if (props.get("mail.smtp.auth").equals("true")) {
                Transport transport = session.getTransport("smtp");
                transport.connect((String) props.get("mail.smtp.host"), (String) props.get("username"), (String) props.get("password"));
//              transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); 
//              transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
                transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
                transport.close();
            } else {
                Transport.send(mimeMsg);
            }
            System.out.println("邮件发送成功");
        } catch (MessagingException e) {
            e.printStackTrace();
            success = false;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            success = false;
        }
        return success;
    }

public String getMailList(String[] mailArray) {
        StringBuffer toList = new StringBuffer();
        int length = mailArray.length;
        if (mailArray != null && length < 2) {
            toList.append(mailArray[0]);
        } else {
            for (int i = 0; i < length; i++) {
                toList.append(mailArray[i]);
                if (i != (length - 1)) {
                    toList.append(",");
                }

}
        }
        return toList.toString();
    }

public static void main(String[] args) {
         JavaMailWithAttachment se = new JavaMailWithAttachment(true);
     //    File affix = new File("D:\\项目管理old\\农商\\项目管理\\上汽安吉商业保理\\会议纪要\\周报\\上汽安吉商业保理有限公司对接人行二代征信系统一体化项目工作周报20220422.docx");
        // se.doSendHtmlEmail("邮件主题", "邮件内容", "1585958965@qq.com", affix);//
      //   se.doSendHtmlTwoEmail("邮件主题", "邮件内容", "1585958965@qq.com", affix, affix, affix);
        String from = username;               //发件人
        String[] to = {"1585958965@qq.com"};  //收件人账号
        String[] copyto = {"dongbingt@dcfcs.com","dongbing@swotech.com"};                //抄送
        String subject = "上汽安吉商业保理有限公司对接人行二代征信系统一体化项目工作周报";          //主题
        String content = "贾总,您好,附件是本周进度汇报,请您审阅!";   //内容
        String[] fileList = new String[3];             //附件列表
        fileList[0] = "D:\\项目管理old\\农商\\项目管理\\上汽安吉商业保理\\会议纪要\\周报\\上汽安吉商业保理有限公司对接人行二代征信系统一体化项目工作周报20220422.docx";
        fileList[1] = "D:\\项目管理old\\农商\\项目管理\\上汽安吉商业保理\\会议纪要\\周报\\安吉保理二代企业征信报送--征信实施计划——更新.xlsx";
        fileList[2] = "D:\\项目管理old\\农商\\项目管理\\上汽安吉商业保理\\会议纪要\\周报\\上汽安吉商业保理有限公司对接人行二代征信系统一体化项目待解决问题清单.xlsx";

EmailManager.getInstance().sendMail(from, to, copyto, subject, content, fileList);
    }
}

发送邮件+抄送+附件相关推荐

  1. (转载)SpringBoot 发送邮件和附件

    什么是SMTP? SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP认证要 ...

  2. python发送邮件和附件

    发送邮件的时候,需要发送人,收件人,和一台邮件服务器,这里使用python发送一个邮件,主要需要引入smtplib和email库. 下面是源码,粘贴即可用: #!/usr/bin/env python ...

  3. Python 使用 smtp ssl 模式 发送邮件与附件

    参考 :         发送邮件简单入门 ( 以qq邮箱,163邮箱为例 ) :https://blog.csdn.net/qq_38661599/article/details/81013834 ...

  4. python3发送qq邮件_python3通过qq邮箱发送邮件以及附件

    本文实例为大家分享了python3通过qq邮箱发送邮件以及附件的具体代码,供大家参考,具体内容如下ZLP免费资源网 开启qq邮箱的smtp服务ZLP免费资源网 ZLP免费资源网 代码:ZLP免费资源网 ...

  5. python3通过qq邮箱发送邮件以及附件

    本文实例为大家分享了python3通过qq邮箱发送邮件以及附件的具体代码,供大家参考,具体内容如下 开启qq邮箱的smtp服务 代码: 在学习过程中有什么不懂得可以加我的 python学习qun,85 ...

  6. phpmailer 私密抄送_phpmailer发送邮件(附件)

    以前一直都在用发送邮件 但是没有用过发送附件 刚接到需求头大 在网上找了半天但是还是都是没有附件的 现在整理一份 设置smtp什么的我就不说了 直接贴代码 common里面的代码 需要use一下 us ...

  7. Linux 发送邮件,抄送+附件,多收件人

    随人Linux自带了功能强大的sendmail服务器,但是这样发送的邮件往往被视为垃圾邮件.以下代码可以登录你的邮箱发送邮件,并且可以添加抄送人,添加附件,可以发给多个收件人.其中: 邮件的正文在/a ...

  8. linux发送邮件带多个附件,Linux 发送邮件,抄送+附件,多收件人

    DECLARE pass VARCHAR2(20) := 'Z1234';--???? BEGIN FOR c IN (select a.username from dba_users a,icaps ...

  9. sql 发送邮件网络附件_利用VBA发送附件电子邮件

    大家好,我们今日讲解"利用VBA发送附件电子邮件",这节内容是"VBA信息获取与处理"教程中第五个专题"利用VBA发送电子邮件"的第一节. ...

最新文章

  1. 使用Masonry实现UILabel和UIIMageView自适应长度居中
  2. 从csv文件批量创建AD用户,带源码。
  3. h5活动是什么意思_深度|场景赋能H5,365天让保险线上拓客更广更容易
  4. Linux执行定时任务(crontab)遇到的坑
  5. 英特尔 超核芯显卡 620mac_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少
  6. 二叉树C++ | 深度优先遍历(前序、中序、后序)_3
  7. ndnsim r语言 ubuntu_Python语言---数据库
  8. 讨论一下c++中由外部os向主线程中传入参数的问题
  9. 如何优雅的在微信小程序使用 SVG 字体图标
  10. 厦门大学2019年高等代数考研试题
  11. 2-5.多进程、多线程、异步携程
  12. python与数据挖掘 分类和预测
  13. pathon包傻瓜升级
  14. VScode代码格式化及语法检测
  15. 关于学习软件逆向分析意义的阐述
  16. Hadoop 安全模式永久退出的方法
  17. SaltStack简介
  18. JavaSE--Set接口
  19. 2021年岳阳市一中高考成绩查询,岳阳2021高考最高分多少分,岳阳历年高考状元资料...
  20. k8s之Horizontal Pod Autoscaler(Pod水平自动伸缩)

热门文章

  1. 滤波电容、去耦电容、旁路电容
  2. STM8L的EEPROM读写原理及例程
  3. Android 修改默认输入法
  4. 涨知识!住建局如何利用“千里眼”实现对建筑工地的远程监管?
  5. Python入门(九)正则
  6. 倩女幽魂java_聊斋言谭之倩女幽魂
  7. 20230408英语学习
  8. 云原生架构下复杂工作负载混合调度的思考与实践
  9. ROBOGUIDE软件:机器人输送带上下料虚拟仿真操作方法
  10. 【FPGA-Spirit_V2】小精灵V2开发板初使用