ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java实现QQ邮件群发功能

2022-01-04 18:02:56  阅读:209  来源: 互联网

标签:QQ Java String 发送 发件人 邮箱 email 邮件 群发


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

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

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

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

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

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

<?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 文本文件中读取收件人的邮箱,然后发送。发件人则是固定的。大家在写这个代码时,有兴趣的可以将发件人也使用文件的方式读取,更可以将主题和内容也使用文件读取后发送。

 程序运行结果:

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

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

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

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

标签:QQ,Java,String,发送,发件人,邮箱,email,邮件,群发
来源: https://blog.csdn.net/m0_52066789/article/details/122286079

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有