javaMail SSL发送邮件

/*
     * host  发送服务器qq邮箱为smtp.qq.com
     * from  发件人邮箱
     * fromNick  发件人昵称
     * tos  收件人集合,多个用,间隔
     * ccs  抄送人集合,多个用,间隔
     * bccs  密送人集合,多个用,间隔
     * subject 邮件主题
     * content  正文,支持html
     * password  密码或授权码(修改密码后,授权码需要重新获取)
     * files  附件集合
     */
    public static void sendMail(String subject, String contentHtml, List<File> files, String host, String from,
        String password, String fromNick, String tos, String ccs, String bccs)
        throws UnsupportedEncodingException, MessagingException {
        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties(); // 参数配置
        props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", host); // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
        props.setProperty("mail.smtp.port", "465");// 端口

        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.socketFactory.port", "465");
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props);
        // 设置为debug模式, 可以查看详细的发送 log
        // session.setDebug(true);
        // 3. 创建一封邮件
        MimeMessage message = new MimeMessage(session);

        // 4. From: 发件人
        message.setFrom(new InternetAddress(from, fromNick, "UTF-8"));
        // 5. To: 收件人(可以增加多个收件人、CC抄送、BCC密送)
        InternetAddress[] address = null;
        StringBuilder sb = new StringBuilder();
        if (!ValidateUtil.isNull(tos)) {
            address = InternetAddress.parse(tos);// 多个收件人用逗号间隔
            message.setRecipients(MimeMessage.RecipientType.TO, address);
            sb.append(tos);
        }
        // Cc: 抄送(可选)
        if (!ValidateUtil.isNull(ccs)) {
            address = InternetAddress.parse(ccs);
            message.setRecipients(MimeMessage.RecipientType.CC, address);
            sb.append("," + tos);
        }
        // Bcc: 密送(可选)
        if (!ValidateUtil.isNull(bccs)) {
            address = InternetAddress.parse(bccs);
            message.setRecipients(MimeMessage.RecipientType.BCC, address);
            sb.append("," + tos);
        }
        // 回复人
        address = InternetAddress.parse(sb.toString());
        message.setReplyTo(address);
        // 6. 邮件主题
        message.setSubject(subject, "UTF-8");

        // 整封邮件的MINE消息体
        MimeMultipart msgMultipart = new MimeMultipart("mixed");// 混合的组合关系
        // 设置邮件的MINE消息体
        message.setContent(msgMultipart);

        // 附件内容
        for (int i = 0; i < files.size(); i++) {
            MimeBodyPart attch1 = new MimeBodyPart();
            // 把内容,附件1,附件2加入到 MINE消息体中
            msgMultipart.addBodyPart(attch1);
            // 把文件,添加到附件
            // 数据源
            DataSource ds1 = new FileDataSource(files.get(i));
            // 数据处理器
            DataHandler dh1 = new DataHandler(ds1);
            // 设置第一个附件的数据
            attch1.setDataHandler(dh1);
            // 设置第一个附件的文件名
            attch1.setFileName(MimeUtility.encodeText(files.get(i).getName()));
            //
            // // 把文件,添加到附件2中
            // DataSource ds2 = new FileDataSource(file1);
            // DataHandler dh2 = new DataHandler(ds2);
            // attch2.setDataHandler(dh2);
            // attch2.setFileName(MimeUtility.encodeText("文件"));
        }

        // 正文内容
        if (!ValidateUtil.isNull(contentHtml)) {
            MimeBodyPart content = new MimeBodyPart();
            msgMultipart.addBodyPart(content);

            // 正文(图片和文字部分)
            MimeMultipart bodyMultipart = new MimeMultipart("related");
            // 设置内容为正文
            content.setContent(bodyMultipart);

            // html代码部分
            MimeBodyPart htmlPart = new MimeBodyPart();
            // html中嵌套的图片部分
            // MimeBodyPart imgPart = new MimeBodyPart();

            // 正文添加图片和html代码
            bodyMultipart.addBodyPart(htmlPart);
            // bodyMultipart.addBodyPart(imgPart);

            // 把文件,添加到图片中
            // DataSource imgds = new FileDataSource(file2);
            // DataHandler imgdh = new DataHandler(imgds);
            // imgPart.setDataHandler(imgdh);
            // 说明html中的img标签的src,引用的是此图片
            // imgPart.setHeader("Content-Location", "http://sunteam.cc/logo1.jsg");
            // html代码
            // htmlPart.setContent("<span style='color:red'>中文呵呵</span><img src=\"http://sunteam.cc/logo1.jsg\">",
            // "text/html;charset=utf-8");

            // imgPart.setContentID("my");
            // html代码
            // htmlPart.setContent("<span style='color:red'>中文呵呵</span><img src=\"cid:my\">",
            // "text/html;charset=utf-8");
            // html代码
            htmlPart.setContent(contentHtml, "text/html;charset=utf-8");
        }

        // 6. 设置发件时间
        message.setSentDate(new Date());

        // 7. 保存设置
        message.saveChanges();

        // 4. 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();

        // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
        transport.connect(from, password);

        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());

        // 7. 关闭连接
        transport.close();

    }

版权声明:本文为qq_44872773原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。