前言

整个项目打包( 包括用java实现邮件发送,smtp服务器):

链接: https://pan.baidu.com/s/1yjzsDVV4LlbOqx7VvpVuKQ?pwd=1kn8 提取码: 1kn8
–来自百度网盘超级会员v5的分享

用java实现邮件发送,smtp服务器,Blog跳转:https://gryffinbit.top/2022/08/17/%E7%94%A8java%E5%AE%9E%E7%8E%B0%E9%82%AE%E4%BB%B6%E5%8F%91%E9%80%81%EF%BC%8Csmtp%E6%9C%8D%E5%8A%A1%E5%99%A8/

获取钉钉开发资格

登陆钉钉管理后台

钉钉管理后台- 钉钉统一身份认证

注册企业资格的时候忘了截图了。。。总之步骤登陆管理后台,它会告知你没有管理员身份的账号,你选择注册一个,按照流程提示注册完了之后就有权限了。这时候钉钉就会生成一个群。在这个群里添加机器人。

  1. 点群的设置,选择群助手,添加机器人

  2. 添加自定义机器人

  3. 设定参数

    安全设定,一共有三个,根据需要勾选。比如选择了定制的关键词,那么发送消息的时候,只有当消息中存在这个关键词,才能发送成功

  4. 机器人添加成功后,会生成一个webhook,将它复制保存,代码中需要用到它

代码

DingNotice.java

package main.controller;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DingNotice {
    public static void main(String[] args){

        // 钉钉的webhook
        String dingDingToken="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx";
        // 请求的JSON数据,这里我用map在工具类里转成json格式
        Map<String,Object> json = new HashMap();
        Map<String,Object> text = new HashMap();

        Map<String,List<String>> phone = new HashMap();
        String [] mobile = {};
        List mob = new ArrayList<String>();
        // 数据库填入注册用户的手机号
        mob.add("186xxxxxxx");//要@的人的手机号码
        json.put("msgtype","text");//指定消息类型是text
        text.put("content","文字内容");//
        phone.put("atMobiles", mob);//将手机号码放进参数中
        json.put("text",text);
        json.put("at", phone);
        // 发送post请求
        String response = DingNoticeTest.sendPostByMap(dingDingToken, json);
        System.out.println("响应结果:"+response);

    }
}

DingNoticeTest.java

package main.controller;

import com.alibaba.fastjson.JSON;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class DingNoticeTest {
    /**
     * 发送POST请求,参数是Map, contentType=x-www-form-urlencoded
     *
     * @param url
     * @param mapParam
     * @return
     */
    public static String sendPostByMap(String url, Map<String, Object> mapParam) {
        Map<String, String> headParam = new HashMap();
        //指定http的内容类型为JSON数据格式
        headParam.put("Content-type", "application/json;charset=UTF-8");
        return sendPost(url, mapParam, headParam);
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url   发送请求的 URL
     * @param param 请求参数,
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, Map<String, Object> param, Map<String, String> headParam) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);//通过此对象可以解析出url中的所有信息,比如协议,验证信息,端口,请求参数,定位位置等
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性 请求头
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Fiddler");

            if (headParam != null) {

                for (Entry<String, String> entry : headParam.entrySet()) {
                    conn.setRequestProperty(entry.getKey(), entry.getValue());
                }
            }
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(JSON.toJSONString(param));
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
//            logger.info("发送 POST 请求出现异常!" + e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

结果

参考文章

https://www.cnblogs.com/barrywxx/p/10716593.html#/publishEapp

评论