java mail发送邮件

支持发送多人、抄送,密送,多个附件

1、引入maven依赖

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

2、编写发送邮件工具类

package cn.ccb.qcy.common.utils;

import java.io.File;
import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
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;
import javax.mail.internet.MimeUtility;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Component
@Slf4j
public class MailPublish {

    private static final String smtpHost = "smtp.qq.com";// 主机名
    private static final String fromMail = "1047082173@qq.com";// 发件箱
    private static final String password = "mtklxmxinfnrbccg";// 授权码

    /**
     * 发送邮件,支持多个附件
     * 
     * @param toMails  主收件人,多个收件人用,分隔(必传)
     * @param ccMails  抄送人,多个收件人用,分隔(非必传)
     * @param bccMails 密送人,多个收件人用,分隔(非必传)
     * @param title    标题(必传)
     * @param content  内容(支持html文本)(必传)
     * @param path     单个附件传文件路径,多个附件传文件夹路径 (非必传)
     * @throws Exception
     */
    public static boolean sendMail(String toMails, String ccMails, String bccMails, String title, String content,
            String path) throws Exception {
        boolean result = false;
        try {
            Properties props = new Properties();
            props.setProperty("mail.transport.protocol", "SMTP");
            props.setProperty("mail.host", smtpHost);
            props.setProperty("mail.smtp.auth", "true");
            Authenticator auth = new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(fromMail, password);
                }
            };
            Session session = Session.getInstance(props, auth);
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(fromMail));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toMails));
            // Cc: 抄送(可选)
            if (StringUtils.isNotBlank(ccMails)) {
                message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccMails));
            }
            // Bcc: 密送(可选)
            if (StringUtils.isNotBlank(bccMails)) {
                message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bccMails));
            }

            message.setSubject(title);

            // 邮件正文
            MimeBodyPart body = new MimeBodyPart();
            body.setContent(content, "text/html;charset=utf-8");
            // 将正文和附件放入multipart
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(body);
            if (StringUtils.isNotBlank(path)) {
                File file = new File(path);
                if (file.isFile()) {// 单个附件
                    // 准备附件
                    DataSource source = new FileDataSource(new File(path));
                    DataHandler handler = new DataHandler(source);
                    // 添加附件
                    MimeBodyPart attachment = new MimeBodyPart();
                    attachment.setDataHandler(handler);
                    attachment.setFileName(MimeUtility.encodeText(handler.getName()));
                    multipart.addBodyPart(attachment);
                } else if (file.isDirectory()) {
                    for (File dFile : file.listFiles()) {
                        if (dFile.isFile()) {
                            // 准备附件
                            DataSource source = new FileDataSource(dFile);
                            DataHandler handler = new DataHandler(source);
                            // 添加附件
                            MimeBodyPart attachment = new MimeBodyPart();
                            attachment.setDataHandler(handler);
                            attachment.setFileName(MimeUtility.encodeText(handler.getName()));
                            multipart.addBodyPart(attachment);
                        }
                    }

                } else {
                    log.info("路径:", file.getAbsolutePath());
                }
            }
            message.setContent(multipart);
            // 发送邮件
            Transport.send(message);
            result = true;
            System.out.println("发送邮件成功");
        } catch (Exception e) {
            log.error("发送邮件失败", e);
            System.out.println("发送邮件异常:" + e);
            result = false;
        }
        return result;
    }

    /**
     * 校验邮箱格式
     * 
     * @param email
     * @return
     */
    public static boolean checkEmail(String email) {
        boolean flag = false;
        try {
            String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

    public static void main(String[] args) throws Exception {
        String content = "<p>\r\n"
                + "    <span class=\"content\" style=\"line-height: 26px; display: block; padding: 40px 20px;\">QQ邮箱APP,让高效触手可及。在这里,你可以登录多个邮箱账号、便捷存储微信邮件、多窗口编辑邮件......还有更多功能,等你探索!</span>\r\n"
                + "</p>\r\n" + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + "    01\r\n" + "</h1>\r\n"
                + "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + "    多帐号登录\r\n" + "</h2>\r\n"
                + "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    可以同时登录多个邮箱帐号\r\n" + "</p>\r\n"
                + "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    一站式灵活管理各类邮件信息\r\n" + "</p>\r\n" + "<p>\r\n"
                + "    <img src=\"https://rescdn.qqmail.com/qqmail/images/manyAccountLoginImg.png\" alt=\"\"/>\r\n"
                + "</p>\r\n" + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + "    02\r\n" + "</h1>\r\n"
                + "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + "    文件中转站\r\n" + "</h2>\r\n"
                + "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    把各类文件存在云端\r\n" + "</p>\r\n"
                + "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    还能便捷导入微信文件,过期烦恼不再有\r\n" + "</p>\r\n" + "<p>\r\n"
                + "    <img src=\"https://rescdn.qqmail.com/qqmail/images/fileTransferStation.png\" alt=\"\"/>\r\n"
                + "</p>\r\n" + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + "    03\r\n" + "</h1>\r\n"
                + "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + "    多窗口编辑\r\n" + "</h2>\r\n"
                + "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    写邮件、写记事、写日程都可收起为浮窗\r\n" + "</p>\r\n"
                + "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    编辑内容的同时不错过重要邮件\r\n" + "</p>\r\n" + "<p>\r\n"
                + "    <img src=\"https://rescdn.qqmail.com/qqmail/images/edit.png\" alt=\"\"/>\r\n" + "</p>\r\n"
                + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + "    04\r\n" + "</h1>\r\n"
                + "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + "    富文本信息一键添加\r\n" + "</h2>\r\n"
                + "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    日程邀请、地理位置、记事本、在线文档\r\n" + "</p>\r\n"
                + "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    这些重要内容可以一键加入邮件正文\r\n" + "</p>\r\n" + "<p>\r\n"
                + "    <img src=\"https://rescdn.qqmail.com/qqmail/images/language.png\" alt=\"\"/>\r\n" + "</p>\r\n"
                + "<h1 style=\"font-size: 30px; margin: 0px;\">\r\n" + "    05\r\n" + "</h1>\r\n"
                + "<h2 style=\"font-size: 20px; margin: 0px 0px 14px;\">\r\n" + "    灵活管理日程\r\n" + "</h2>\r\n"
                + "<p style=\"line-height: 22.1px; margin-bottom: 0px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    全新日历功能、日程列表更清晰,重要事件不错过\r\n" + "</p>\r\n"
                + "<p style=\"line-height: 22.1px; font-size: 13px; color: rgb(142, 142, 147);\">\r\n"
                + "    还可以邀请伙伴共同参与,提升合作效率\r\n" + "</p>\r\n" + "<p>\r\n"
                + "    <img src=\"https://rescdn.qqmail.com/qqmail/images/routin.png\" alt=\"\"/>\r\n" + "</p>\r\n"
                + "<p>\r\n"
                + "    <img class=\"bottomErweima\" src=\"https://rescdn.qqmail.com/qqmail/images/emailDownloadErweima.png\" alt=\"\"/>\r\n"
                + "</p>\r\n" + "<p>\r\n" + "    <br/>\r\n" + "</p>";
        MailPublish.sendMail("1047082173@qq.com,zhangliangqi@git.com.cn",null, null, new Date()+"【测试邮件】", content,
                "C:\\upload\\20220323");
        // System.out.println(checkEmail("104708;2173@qq.com"));
    }
}

功能比较全,细节有待完善。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值