Java实现QQ邮件群发功能

在生活中,我们在编写 java 代码时,一般都会 try...catch 包裹住可能会出现异常的代码块。但如果在一个java项目过大,同时又出现了bug时,这很不利于我们来查错。

所以我们就可以使用邮件,可以自己写一个邮件工具类,使用 try...catch 处理时,就可以使用邮件类每次发现问题时,向指定的邮箱发送一封邮件。

邮件工具类除了以上的用法,我们也可以自己写个QQ邮件群发。

首先是需要把邮件工具类给写出来:

这里使用IDEA,首先创建一个 Maven 项目:

Java实现QQ邮件群发功能

然后,就会出现一个工程目录。找到 pom.xml 这个文件,打开它,并在其中添加一段代码:

Java实现QQ邮件群发功能

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>e-mailSystem</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

<!--添加下面这段代码-->
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.5</version>
        </dependency>
    </dependencies>

</project>

当代码添加完成之后,就可以编写自己的邮件发送工具类了。

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
/**
 * 自定义发送邮件工具类
 */
public class SendMailTools {
    /**
     *
     * @param toUser    收件邮箱
     * @param fromUser  发件邮箱
     * @param fromUserPassWord  发件邮箱的POP3/SMTP服务密码
     * @param theme     邮件主题
     * @param content   邮件内容
     * @return    返回一个提示,是否发送成功(true/false)
     */
    public static boolean sendMail(String toUser, String fromUser,
                                   String fromUserPassWord, String theme, 
                                   String content){
        //实例化邮件资源
        SimpleEmail email = new SimpleEmail();
        //设置qq邮件服务器的端口号
        email.setSslSmtpPort("465");
        //使用QQ邮箱的固定写法
        email.setHostName("smtp.qq.com");
        //设置发件人的账户和POP3/SMTP服务密码
        email.setAuthentication(fromUser, fromUserPassWord);
        //编码方式
        email.setCharset("UTF-8");
        try {
            //收件人
            email.addTo(toUser);
            //发件人
            email.setFrom(fromUser);
            //邮件主题
            email.setSubject(theme);
            //邮件内容
            email.setMsg(content);
            //发送
            email.send();
            return true;
        } catch (EmailException e) {
            e.printStackTrace();
            return false;
        }
    }
}

最后就是测试使用我们这个邮件工具类了。

import java.io.BufferedReader;
import java.io.FileReader;
/**
 * 使用自定义邮件发送工具类实现群发消息
 */
public class Test {
    public static void main(String[] args) {
        String toFrom = "xxxxxxxxxx@qq.com";         //发件人
        String toFromPassWord = "xxxxxxxxxxxxxxxx";  //发件人邮箱POP3/SMTP服务密码
        String theme = "这是一封测试邮件";             //邮件主题
        String content = "hello word!~~~";           //邮件具体内容
        try(
             FileReader fs = new FileReader("toUser.txt");//字符流,默认当前项目下的文本文件
             BufferedReader br = new BufferedReader(fs);  //字符装饰流
                ){
            String ret = null;
            //循环读取,每次读一行
            while((ret = br.readLine())!=null){
                //发送成功提示一下
                if(SendMailTools.sendMail(ret,toFrom,toFromPassWord,theme,content)){
                    System.out.println("发送成功》》》");
                }else{
                    System.out.println("失败!!!");
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

这里我使用的是从一个 txt 文本文件中读取收件人的邮箱,然后发送。发件人则是固定的。大家在写这个代码时,有兴趣的可以将发件人也使用文件的方式读取,更可以将主题和内容也使用文件读取后发送。

Java实现QQ邮件群发功能

 程序运行结果:

Java实现QQ邮件群发功能

Java实现QQ邮件群发功能

 注意:由于我们这里使用的是QQ邮箱的服务区,所以在同一时间这里可能发送成功了,但是收件人有的可能会收不到,而想要避免这个Bug,两个方法:

1.在同一时间内发送邮件的数量尽量减少

2.使用自己的服务器或者是第三方的服务器

最后说一下邮箱POP3/SMTP服务密码在哪儿?

Java实现QQ邮件群发功能

Java实现QQ邮件群发功能

Java实现QQ邮件群发功能

Java实现QQ邮件群发功能

Java实现QQ邮件群发功能

上一篇:拒绝做思想的巨人,行动上的矮子


下一篇:2015年br运维操作归档