这块还是属于自动发邮件项目的范畴,昨天为了解决邮件群发的问题一时间没有想到合适的解决方案。
邮件内容可以写死在项目里面,毕竟是固定的。但是收件邮箱并不一定是固定的,这次是利用到公司线上项目里面,每天都有大量的人在使用。总不能每次修改东西都打包重启项目吧?所以如果不单独建表的话存在外部文件里面无疑是一个很好的选择。于是考虑过自定义配置文件,用注解的方式去识别list,然后遍历。结果好像有点不尽人意,最终考虑是用txt文本。
原理是:接口被定时任务远程访问的时候(没错,我把项目里面原有的定时任务也干掉了。改成用云函数Http触发器按照设置的时间节点去Get请求对应接口。问就是方便随时控制执行时间……),去设置好的指定目录下读取txt文本识别你要发送的邮件列表。
这个工具类经过我稍微改造了一下,现在应该可以通用。

Txt2ListUtil

package com.demo.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

/**
 * @Author zf
 * @ClassName Txt2ListUtil.java
 * @ProjectName demo
 */
public class Txt2ListUtil {

    /**
     * @param filePath 文件路径
     * @param encoding 文件编码
     * @Description 读取文本内容
     */
    public static ArrayList<String> readTxt(String filePath, String encoding) {
        List<String[]> list = new LinkedList<>();
        //组合字符串列表
        ArrayList<String> StrList = new ArrayList<>();
        String[] outArray = null;
        try {
            File file = new File(filePath);
            String lineInfo = "";
            if (file.isFile() && file.exists()) {
                InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
                BufferedReader bufferReader = new BufferedReader(read);
                while ((lineInfo = bufferReader.readLine()) != null) {
                    //被读取的文件的字段以"#"分隔
                    StringTokenizer stk = new StringTokenizer(lineInfo, "#");
                    String[] strArray = new String[stk.countTokens()];
                    int i = 0;
                    while (stk.hasMoreTokens()) {
                        strArray[i++] = stk.nextToken();
                    }
                    list.add(strArray);
                }
                read.close();
            }
        } catch (Exception e) {
            System.out.println("读取文件内容出错!");
            e.printStackTrace();
        }
        for (int i = 0; i < list.size(); i++) {
            outArray = (String[]) list.get(i);
        }
        for (int j = 0; j < outArray.length; j++) {
            StrList.add(outArray[j]);
        }
        return StrList;
    }
    //测试方法
    public static void main(String[] args) {
        ArrayList<String> strings = readTxt("F:\\forMailList.txt", "utf-8");
        System.out.println(strings);
    }
}


测试文本(多个收件人用#隔开。):

a@1.com#b@1.com#c@1.com
最后修改:2022 年 05 月 25 日
给我一点小钱钱也很高兴啦!o(* ̄▽ ̄*)ブ