利用Java代码群发邮件

简介: 利用Java代码群发邮件

利用java代码发送邮件,结合网上搜来的资料,我适当进行了改造,改为利用java代码群发邮件.现将代码复制整理如下:


注意事项:


纯java开发的话,JDK1.6以外,需要导入这里自己打包的mail.jar.另外前三个类必须放同一包中。当然如果是javaEE,你完全不用担心了,直接建类复制,或者下载用都行)。


第一个类 : 邮件发送类

package com.crt.settlement.service.test;
import java.util.Properties;
/**
 * 邮件发送类
 *
 */
public class MailSenderInfo {
     // 发送邮件的服务器的IP(或主机地址)
     private String mailServerHost;
     // 发送邮件的服务器的端口
     private String mailServerPort;
     // 发件人邮箱地址
     private String fromAddress;
     // 收件人邮箱地址
     private String toAddress;
     // 登陆邮件发送服务器的用户名
     private String userName;
     // 登陆邮件发送服务器的密码
     private String password;
     // 是否需要身份验证
     private boolean validate = false;
     // 邮件主题
     private String subject;
     // 邮件的文本内容
     private String content;
     // 邮件附件的文件名
     private String[] attachFileNames;
     public Properties getProperties() {
      Properties p = new Properties();
      p.put("mail.smtp.host", this.mailServerHost);
      p.put("mail.smtp.port", this.mailServerPort);
      //设置是否安全验证,默认为false,一般情况都设置为true
      p.put("mail.smtp.auth", validate ? "true" : "false");  
      return p;
     }
     public String getMailServerHost() {
      return mailServerHost;
     }
     public void setMailServerHost(String mailServerHost) {
      this.mailServerHost = mailServerHost;
     }
     public String getMailServerPort() {
      return mailServerPort;
     }
     public void setMailServerPort(String mailServerPort) {
      this.mailServerPort = mailServerPort;
     }
     public boolean isValidate() {
      return validate;
     }
     public void setValidate(boolean validate) {
      this.validate = validate;
     }
     public String[] getAttachFileNames() {
      return attachFileNames;
     }
     public void setAttachFileNames(String[] fileNames) {
      this.attachFileNames = fileNames;
     }
     public String getFromAddress() {
      return fromAddress;
     }
     public void setFromAddress(String fromAddress) {
      this.fromAddress = fromAddress;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
     public String getToAddress() {
      return toAddress;
     }
     public void setToAddress(String toAddress) {
      this.toAddress = toAddress;
     }
     public String getUserName() {
      return userName;
     }
     public void setUserName(String userName) {
      this.userName = userName;
     }
     public String getSubject() {
      return subject;
     }
     public void setSubject(String subject) {
      this.subject = subject;
     }
     public String getContent() {
      return content;
     }
     public void setContent(String textContent) {
      this.content = textContent;
     }
}


第二个类 : 发送邮件类

package com.crt.settlement.service.test;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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;
/**
 * 发送邮件的类
 * 
 *
 */
public class SimpleMailSender {
    public boolean sendTextMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            // 如果需要身份认证,则创建一个密码验证器
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中
            // 发送给多人
            String toList = getMailList(mailInfo.getToAddress().split(","));
            InternetAddress[] iaToList = new InternetAddress().parse(toList);
            // Message.RecipientType.TO属性表示接收者的类型为TO
            mailMessage.setRecipients(Message.RecipientType.TO, iaToList);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // 设置邮件消息的主要内容
            String mailContent = mailInfo.getContent();
            mailMessage.setText(mailContent);
            mailMessage.saveChanges();
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
    public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        // 如果需要身份认证,则创建一个密码验证器
        if (mailInfo.isValidate()) {
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中
            // 发送给多人
            String toList = getMailList(mailInfo.getToAddress().split(","));
            InternetAddress[] iaToList = new InternetAddress().parse(toList);
            // Message.RecipientType.TO属性表示接收者的类型为TO
            mailMessage.setRecipients(Message.RecipientType.TO, iaToList);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容
            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            // 将MiniMultipart对象设置为邮件内容
            mailMessage.setContent(mainPart);
            mailMessage.saveChanges();
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
    private static 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();
    }
}


第三个类 : 邮件认证器

package com.crt.settlement.service.test;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
 * 邮件用户名和密码认证器
 *
 */
public class MyAuthenticator extends Authenticator{
     String userName = null;
     String password = null;
     public MyAuthenticator() {
     }
     public MyAuthenticator(String username, String password) {
      this.userName = username;
      this.password = password;
     }
     protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(userName, password);
     }
}


第四个类 : 测试类:


需要注意,当中需要自己修改的地方都已经做了配置,值的一提的事:


  1. 服务器的ip和port是在网上可以轻松查到的,您需要用什么邮箱发,就设置成对应邮箱的服务器。


  1. 发邮件别用刚申请的邮箱,一般刚申请的邮箱是不会给你这个权限的,要不就是需要绑定,要不就是有一定期限。建议测试时用自己已经用过很久的qq邮箱或者163等其他邮箱。


  1. 对于使用qq邮箱发送,需要在QQ邮箱中进行如下设置上的更改:在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:


网络异常,图片无法展示
|

QQ 邮箱通过生成授权码来设置密码:
网络异常,图片无法展示
|

package com.crt.settlement.service.test;
/**
 * 设置数据,开始发送
 *
 */
public class SendMailDemo {
     public static void main(String[] args) {
          // 设置邮件服务器信息
          MailSenderInfo mailInfo = new MailSenderInfo();
          mailInfo.setMailServerHost("smtp.qq.com");// 发送邮件的服务器的IP(或主机地址)
          mailInfo.setMailServerPort("587");
         // mailInfo.setMailServerHost("smtp.163.com");// 发送邮件的163服务器的IP(或主机地址)
         // mailInfo.setMailServerPort("25");
          mailInfo.setValidate(true);
          // 邮箱用户名(根据自己情况设置)
          mailInfo.setUserName("91***01183@qq.com");
          // 邮箱密码(根据自己情况设置)(注意此处密码为授权码)
          mailInfo.setPassword("rueqjpdgcvrgbbje");
          // 发件人邮箱(根据自己情况设置,如果你没对邮箱进行特别设置,应该和邮箱用户名一致)
          mailInfo.setFromAddress("91***01183@qq.com");
          // 收件人邮箱(根据自己情况设置)
          //设置为发送给多人
          mailInfo.setToAddress("xidahuanghui@163.com,7633434534@qq.com");
          // 邮件标题
          mailInfo.setSubject("测试Java发送邮件");
          // 邮件内容
          StringBuffer buffer = new StringBuffer();
          buffer.append("地址:");
          buffer.append("测试测试测试");
          mailInfo.setContent(buffer.toString());
          // 发送邮件
          SimpleMailSender sms = new SimpleMailSender();
          // 发送文体格式
          sms.sendTextMail(mailInfo);
          // 发送html格式
          SimpleMailSender.sendHtmlMail(mailInfo);
          System.out.println("邮件发送完毕");
         }
}


参考文档:
  1. java发送邮件   http://www.cnblogs.com/AK-BB/p/java_sender_email.html


  1. javamail向多人发送邮件例子代码  http://itspace.iteye.com/blog/558992


  1. java发送邮件  http://www.runoob.com/java/java-sending-email.html
相关文章
|
22小时前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
18天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
42 3
|
2月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
60 24
|
25天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
62 2
|
1月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
84 5
|
1月前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
62 5
|
2月前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
2月前
|
Java API Maven
商汤人像如何对接?Java代码如何写?
商汤人像如何对接?Java代码如何写?
53 5
|
1月前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
2月前
|
Java
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
44 0