java利用网易邮箱批量发送邮件(带附件)

java 专栏收录该内容
46 篇文章 0 订阅

前言

来个需求,需要给注册用户发送特定的邮件内容,所以就有了这篇博文咯。

 

准备条件(本文以网易邮箱为例)

邮箱账号必须要开启 SMTP 服务

 

设置授权码

 

编码实现

maven

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

 

EmailUtil

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * @Author 954
 * @create 2019/6/27 13:46
 */
public class EmailUtil {

    // 发送者别名
    private static final String SENDER_NAME = "XXX" ;

    // 发送邮箱地址
    private static final String SENDER_ADDRESS = "XXX@163.com" ;

    // 发送邮箱的授权码
    private static final String SENDER_PWD = "XXX" ;

    // 密送的邮箱地址
    private static final String PRIVATE_ADDRESS = "XXX@163.com" ;

    /**
     * 发送邮件的环境对象
     */
    private static final Session EMAIL_SESSION = getEmailSession();

    /**
     * 批量发送电子邮件
     * @param emailAddressList  邮箱地址
     * @param content           邮件内容
     * @param title             邮件标题
     * @param fileList          附件
     * @throws Exception
     */
    public synchronized void sendEmail(List<String> emailAddressList, String title, String content, List<File> fileList) throws Exception {
        MimeMessage mimeMessage = getMimeMessage(emailAddressList, title, content);
        if (!CollectionUtils.isEmpty(fileList)){
            // 处理附件
            Multipart multipart = getMultipart(fileList);
            mimeMessage.setContent(multipart);
            //  添加邮件内容
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setContent(content, "text/html;charset=UTF-8");
            // 将multipart对象放入message中
            multipart.addBodyPart(contentPart);
        }
        Transport.send(mimeMessage);
    }

    private MimeMessage getMimeMessage(List<String> emailAddressList, String title, String content) throws Exception {
        // 创建邮件消息
        MimeMessage message = new MimeMessage(EMAIL_SESSION);
        // 设置发件人
        message.setFrom(new InternetAddress(SENDER_ADDRESS, SENDER_NAME));
        // 设置收件人
        InternetAddress[] address = new InternetAddress[emailAddressList.size()] ;
        for (int i = 0; i < emailAddressList.size(); i++){
            address[i] = new InternetAddress(emailAddressList.get(i)) ;
        }
        message.setRecipients(Message.RecipientType.TO, address);
        // 设置密送
        message.setRecipient(Message.RecipientType.BCC, new InternetAddress(PRIVATE_ADDRESS));
        // 设置邮件标题
        message.setSubject(title, "UTF-8");
        // 设置邮件的内容体
        message.setContent(content, "text/html;charset=UTF-8");
        // 设置发送时间
        message.setSentDate(new Date());
        return message;
    }

    private Multipart getMultipart(List<File> fileList) {
        if (CollectionUtils.isEmpty(fileList)) return null;
        Multipart multipart = new MimeMultipart();
        // 添加附件的内容
        fileList.stream().parallel().forEach(file -> {
            try {
                BodyPart attachmentBodyPart = new MimeBodyPart();
                DataSource source = new FileDataSource(file);
                attachmentBodyPart.setDataHandler(new DataHandler(source));
                // MimeUtility.encodeWord可以避免文件名乱码
                attachmentBodyPart.setFileName(MimeUtility.encodeWord(file.getName()));
                multipart.addBodyPart(attachmentBodyPart);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return multipart ;
    }

    private static Session getEmailSession(){
        // 配置发送邮件的环境属性
        Properties props = new Properties();
        //设置用户的认证方式
        props.setProperty("mail.smtp.auth", "true");
        //设置传输协议
        props.setProperty("mail.transport.protocol", "smtp");
        //设置发件人的SMTP服务器地址
        props.setProperty("mail.smtp.host", "smtp.163.com");
        // 构建授权信息,用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
            // 用户名、密码
            return new PasswordAuthentication(SENDER_ADDRESS, SENDER_PWD);
            }
        };
        return Session.getInstance(props, authenticator);
    }

    public static void main(String[] args) throws Exception {
        sendEmail(Arrays.asList("XXX@qq.com", "XXX@163.com"), "我是标题", "我是内容", null);
    }

}

转载带地址,谢谢!

 

对你有帮助的话,右上角给个赞呗~

 

 

  • 2
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

本程序是使用Javamail API和Jacob Office操作库编写的批量发送实名邀请函的Java程序。 1、不仅可以提供全功能的邮件发送功能: - 发送常规邮件邮件主题、发送地址、接收地址、邮件正文) - 邮件群发 - 支持抄送 - 支持附件发送,可同时发送多个附件文件,附件的文件名可以为中文 - 支持秘送 - 支持已读回执 - 邮件服务器认证 - 等 2、还可以提供实名制的邮件批量发送邮件群发已经不是什么很了不起的功能了,但是实名制的邮件群发倒是迫切需要解决的事情, 特别是办公室工作人员需要发送实名制的邀请函,如果每发送一个电子邮件,都要打开附件(如果 附件是word的话,打开的速度又很慢,还容易死机)添加邀请人的姓名,并且还要在邮件的正文里 面再复制一次邀请人的姓名,我觉得如果让我干这个,还不如让我去死。 现在有了这个程序您只需要提供提供几个模板,配置好您的文件位置,所有的一切本程序可以 为您轻松搞定。人应该干人该干的事情,计算机应该干计算机该干的事情,人要是老干计算机干的事 情,不是人疯了就是世界末日来到了。 3、本程序是免费程序,虽然提供了非常实用的功能,但是本身还是有很多意想不到的bug,希望各 位可以多多提出意见,不吝赐教!如有任何问题请发邮箱:nicegiving@gmail.com,如果我 的网络没断的话我会在当天给您回复,谢谢您的支持。
©️2021 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值