java mail 群发(单发)邮件功能(腾讯企业邮箱)

2 篇文章 0 订阅

java 代码


import com.sun.mail.util.MailSSLSocketFactory;
import org.junit.Test;

import javax.mail.*;
import javax.mail.internet.*;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * 腾讯企业邮箱发送邮件功能
 * @author chenchbj
 */
public class MailQqController {

    /**
     * @param sendMailAccount 发送邮件
     * @param sendMailPassword 发送邮件密码
     * @param receiveMailAccount 收件邮件
     * @param subject 标题
     * @param content 内容
     */
    public static void sendMail(String sendMailAccount, String sendMailPassword, String receiveMailAccount, String subject, String content) {
        Properties prop = new Properties();
        //协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //服务器
        prop.setProperty("mail.smtp.host", "smtp.exmail.qq.com");
        //端口
        prop.setProperty("mail.smtp.port","465");
        //使用smtp身份验证
        prop.setProperty("mail.smtp.auth","true");
        //企业邮箱必须要SSL
        MailSSLSocketFactory sf = null;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
        } catch (GeneralSecurityException e1) {
            e1.printStackTrace();
        }
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);
        //获取Session对象
        Session s = Session.getDefaultInstance(prop, new Authenticator() {
            //此访求返回用户和密码的对象
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa = new PasswordAuthentication(sendMailAccount, sendMailPassword);
                return pa;
            }
        });
        //设置session的调试模式,发布时取消
        s.setDebug(true);
        MimeMessage mimeMessage = new MimeMessage(s);
        try {
            // 发信邮箱
            mimeMessage.setFrom(new InternetAddress(sendMailAccount));
            // 收信邮箱
            // 单个发送
            //mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(receiveMailAccount));
            // 群发
            mimeMessage.addRecipients(Message.RecipientType.TO,addressMails(receiveMailAccount));
            //设置主题
            mimeMessage.setSubject(subject);//邮件标题
            mimeMessage.setSentDate(new Date());
            //设置内容
            //mimeMessage.setText("内容");//邮件内容
            //设置内容
            /* 创建用于组合邮件正文和附件的MimeMultipart对象 */
            MimeMultipart multipart = new MimeMultipart();
            // 设置HTML内容
            MimeBodyPart content1 = createContent(content);
            multipart.addBodyPart(content1);
            // 将组合的MimeMultipart对象设置为整个邮件的内容,要注意调用saveChanges方法进行更新
            mimeMessage.setContent(multipart);
            mimeMessage.saveChanges();
            //发送
            Transport.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static InternetAddress[] addressMails(String receiveMails) {
        //多个接收账号
        //        String str = "xxx@xxx.com,xxx@xxx.com";
        InternetAddress[] address = null;
        try {
            List list = new ArrayList();//不能使用string类型的类型,这样只能发送一个收件人
            String[] median = receiveMails.split(",");//对输入的多个邮件进行逗号分割
            for (int i = 0; i < median.length; i++) {
                list.add(new InternetAddress(median[i]));
            }
            address = (InternetAddress[]) list.toArray(new InternetAddress[list.size()]);
        } catch (AddressException e) {
            e.printStackTrace();
        }
        return address;
    }

    /**
     * 创建HTML格式的邮件内容
     * @param body 邮件内容
     * @return 邮件内容实体
     * @throws Exception
     */
    public static MimeBodyPart createContent(String body) throws Exception {

        /* 创建代表组合MIME消息的MimeMultipart对象和该对象保存到的MimeBodyPart对象 */
        MimeBodyPart content = new MimeBodyPart();

        // 创建一个MImeMultipart对象
        MimeMultipart multipart = new MimeMultipart();

        // 创建一个表示HTML正文的MimeBodyPart对象,并将它加入到前面的创建的MimeMultipart对象中
        MimeBodyPart htmlBodyPart = new MimeBodyPart();
        htmlBodyPart.setContent(body, "text/html;charset=UTF-8");
        multipart.addBodyPart(htmlBodyPart);

        // 将MimeMultipart对象保存到MimeBodyPart对象中
        content.setContent(multipart);

        return content;
    }

    @Test
    public void Test(){
        sendMail("发送邮箱@midland.com.cn","密码","接收1@midland.com.cn,接收2@midland.com.cn","邮件标题","内容");
    }

maven项目pom.xml中引入jar

 <!--邮箱-->
    <dependency>
      <groupId>javax.activation</groupId>
      <artifactId>activation</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
    </dependency>
    <!--如果使用spring的发邮件,还需要添加依赖:-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

spring-context-support版本

<org.springframework.version>4.2.4.RELEASE</org.springframework.version>

1[^2]


  1. 备注:如果腾讯企业邮箱设置了只能接收功能,没有开启发送功能则会报错503或者511等,需要开启客户端登录密码,腾讯方面自动生成的密码。
    [^2] java 发送邮件 网易163邮箱:java 单发群发邮件功能 网易邮箱 ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperChen12356

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值