企业微信第三方应用发邮件流程及java代码

news2024/11/15 19:38:12

具体思路:

1、申请企业微信。

2、在企业微信创建一个邮箱。

3、自建第三方应用。

4、从第三方应用,获取“Secret”值。

5、在第三方应用中,建立企业可信IP。

6、获取企业corpid。

7、写java代码,获取access_token。 参考:开始开发 - 接口文档 - 企业微信开发者中心

8、继续写代码,或者postman调用,发邮件。

具体内容:

1、申请企业微信。

 

2、在企业微信创建一个邮箱。

 

3、自建第三方应用。

 

4、从第三方应用,获取“Secret”值。

 

5、在第三方应用中,建立企业可信IP,这个就是发邮件的服务器的IP,或者Java代码运行的ip,一般开发环境,采取获取本机IP即可。注意,先要设置一个域名,然后再设置IP白名单。 这里很重要!没这个,发邮件调用没用。

 

6、获取企业corpid。

 

 7、写java代码,获取access_token。 参考:开始开发 - 接口文档 - 企业微信开发者中心


//package com.test;

import com.mysql.cj.xdevapi.JsonParser;

import javax.net.ssl.HttpsURLConnection;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.URL;

import java.security.KeyManagementException;

import java.security.NoSuchAlgorithmException;



/**

 * 基于HttpsURLConnection实现客户端https请求

 *

 */

public class Main {

    private static final String METHOD_GET = "GET";

    private static final String METHOD_POST = "POST";

    /**

     * doGet

     */

    private static void httpsGet(String url) throws NoSuchAlgorithmException, KeyManagementException, IOException {

// 创建连接对象

        HttpsURLConnection connection = getHttpsURLConnection(url, METHOD_GET);

        connection.addRequestProperty("","");

        connection.connect();

//        System.out.println("cipersuit used:>>" + connection.getCipherSuite()+"<<");


// 读取连接响应内容

        getresponse(connection);

    }

    /**

     * doPost

     */

    private static void httpsPost(String url, String params) throws NoSuchAlgorithmException, IOException, KeyManagementException {

// 创建连接对象

        HttpsURLConnection connection = getHttpsURLConnection(url, METHOD_POST);

// 发送POST请求必须设置如下两行

        connection.setDoOutput(true);

        connection.setDoInput(true);

        connection.connect();

// 获取URLConnection对象对应的输出流

        PrintWriter out = null;

        try {

            out = new PrintWriter(connection.getOutputStream());

// 发送请求参数

            out.print(params);

            out.flush();

        } finally {

            if (out != null) {

                out.close();

            }

        }

        getresponse(connection);

    }

    /**

     * 读取连接响应内容

     */

    private static void getresponse(HttpsURLConnection connection) throws IOException {

        BufferedReader br = null;

        try {

            br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

            String inputLine;

            StringBuilder sb = new StringBuilder();

            while ((inputLine = br.readLine()) != null) {

                sb.append(inputLine);

            }

            System.out.println("response:>>>"+sb.toString()+"<<<");

            System.out.println("responseMsg:>>" + connection.getResponseMessage() + "<<");
            System.out.println("responseCode:" + connection.getResponseCode());

        } finally {

            if (br != null) {

                br.close();

            }

        }

    }

    private void parseJSONWithJSONObject(String JsonData) {
        try {
//            JsonParser parse =new JsonParser();  //创建json解析器
//            try {
//                JsonObject json=(JsonObject) parse.parse(new FileReader("weather.json"));  //创建jsonObject对象
//                System.out.println("resultcode:"+json.get("resultcode").getAsInt());  //将json数据转为为int型的数据
//                System.out.println("reason:"+json.get("reason").getAsString());     //将json数据转为为String型的数据
//
//                System.out.println("id" + id + ";name" + name + ";version" + version);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    /**

     * 获取连接对象

     */

    private static HttpsURLConnection getHttpsURLConnection(String url, String method) throws IOException, NoSuchAlgorithmException, KeyManagementException {

        URL myUrl = new URL(url);

// 创建连接对象

        HttpsURLConnection connection = (HttpsURLConnection) myUrl.openConnection();

        connection.setRequestMethod(method);

// 设置SSLSocketFactory对象(若不指定算法套,getSslContext().getSocketFactory()即可)

        connection.setSSLSocketFactory(new MySSLSocketFactory());

// 验证hostname,全部允许

        connection.setHostnameVerifier((hostname, sslSession) -> true);

// 设置通用请求属性

        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36");

        connection.setRequestProperty("Connection", "Keep-Alive");

        connection.setRequestProperty("Charset", "UTF-8");

        return connection;

    }

    public static void main(String[] args) throws Exception {

        String corpid="wwc8c90a0acd";
        String corpsecret="6jvihNh6un_nx8rtnjo";
        String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+corpsecret;

//        String access_token = "";
//        String url = "https://qyapi.weixin.qq.com/cgi-bin/exmail/app/compose_send?access_token="+access_token;



        httpsGet(url);

    }

}

运行结果:

8、继续写代码,或者postman调用,发邮件。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为开源自研AI框架昇思MindSpore应用案例:ResNet50迁移学习

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 AI融合计算的蓬勃发展&#xff0c;对框架能力提出了新的需求和挑战。问题场景和模型设计逐渐复杂化&#xff0c;使得业务数据的维度和计算逻辑的嵌套深度也相应增长。结合向量化优化手段可以有效优化性能瓶…

Delving into Localization Errors for Monocular 3D Object Detection 论文学习

论文地址&#xff1a;Delving into Localization Errors for Monocular 3D Object Detection Github地址&#xff1a;Delving into Localization Errors for Monocular 3D Object Detection 1. 解决了什么问题&#xff1f; 从单目图像准确地估计 3D 框是自动驾驶领域的重要功…

图像去模糊中的均值滤波、高斯滤波、双边滤波简单介绍及代码演示

文章目录 图像去模糊中的均值滤波、高斯滤波和双边滤波简单介绍均值滤波高斯滤波双边滤波总结 图像去模糊中的均值滤波、高斯滤波和双边滤波简单介绍 图像模糊是指图像中的细节和边缘被平滑和模糊化&#xff0c;通常是由于图像采集设备或者图像传输过程中的噪声和抖动引起的。…

SQL 执行顺序

数据的关联过程 from&join&where group by having&where select order by limit 这是一条标准的查询语句: 这是我们实际上SQL执行顺序&#xff1a; 我们先执行from,join来确定表之间的连接关系&#xff0c;得到初步的数据 where对数据进行普通的初步的筛选 …

低代码开发重要工具:jvs列表页中如何实现左树右表的配置

左树右表是一种数据查询展示方式&#xff0c;通常用于处理带有层级关系的查询条件的数据展示。它的基本思想是将一个大表分成左树和右表&#xff0c;左树是一个树形结构&#xff0c;右表是一个扁平的表。通过在左树上建立索引&#xff0c;可以大大提高查询效率。 左树右表的实…

C/C++每日一练(20230504)

目录 1. 将数据流变为多个不相交区间 &#x1f31f;&#x1f31f;&#x1f31f; 2. 冒泡法排序大小 &#x1f31f; 3. Pow(x, n) &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专…

使用机器人为无线传感器网络提供服务(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 无线传感器网络是一种无线网络&#xff0c;包括大量循环的、自定向的、微小的、低功耗的设备&#xff0c;称为传感器节点&…

MySQL存储引擎对比总结

文章目录 一、存储引擎是什么二、存储引擎有哪些三、常用存储引擎介绍1、InnoDB2、MyISAM3、MEMORY4、MRG_MYISAM &#xff08;MERGE&#xff09;5、ARCHIVE6、BLACKHOLE7、FEDERATED8、CSV9、PERFORMANCE_SCHEMA10、NDB 一、存储引擎是什么 存储引擎是数据库的核心&#xff0…

微信小程序实现订阅消息功能(Node服务器篇)

在上一篇内容当中在微信小程序中实现订阅消息功能&#xff0c;都在客户端(小程序)中来实现的&#xff0c;在客户端中模拟了服务器端来进行发送订阅消息的功能&#xff0c;那么本篇就将上一篇内容中仅在客户端中实现发送订阅消息功能进行一个分离&#xff0c;使用 Node.js 搭载后…

吧佬联手抵制奸商,百元级游戏电脑横出江湖

最近小忆闲得在电商平台搜索了下关键词「游戏主机」&#xff0c;不出意外销量榜前列清一色全是「i9 级高端游戏主机」。 这些主机不论配置单介绍还是十万百万级销量宣传标语&#xff0c;都给人一种血赚不亏的「豪华」感。 咱就说时代在变&#xff0c;唯一不变的是奸商们的套路与…

什么样的台灯灯光是好的?推荐中性色温的护眼台灯

台灯的灯光指的是白光和黄光&#xff0c;就是台灯的色温&#xff0c;而色温也是也会影响我们的直观感受的。 低色温&#xff08;>3000K&#xff09;光源偏黄&#xff0c;属于暖色调&#xff0c;适合休息高色温&#xff08;<5000K&#xff09;光源偏白&#xff0c;属于冷…

MWORKS.Sysplorer 2023a前瞻版上线——面向MBD全流程的覆盖

信息物理融合系统&#xff08;CPS&#xff09;的设计、建模与仿真是装备数字化的核心技术。MWORKS.Sysplorer经过多年的发展&#xff0c;已经支持机械、电气、流体、热力学等多个物理域的统一建模和统一仿真求解&#xff0c;解决了物理域统一表达与统一建模问题。为了支持完整的…

嘉立创EDA元件库开发环境及设计介绍

一、元件符号概述 如图1所示&#xff0c;元件符号是元件在原理图中的表现形式&#xff0c;主要由元件边框、管脚&#xff08;包括管脚符号和管脚名称&#xff09;、元件名称及说明组成&#xff0c;通过放置的管脚来建立电气连接关系。元件符号中管脚序号是和电子元件实物的管脚…

Node 11会话控制

会话控制 介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议&#xff0c;它没有办法区分多次的请求是否来自于同一个客户端&#xff0c;无法区分用户 而产品中又大量存在的这样的需求&#xff0c;所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有…

ChatGPT被淘汰了?Auto-GPT到底有多强

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了&#xff0c;显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API&#xff0c;某种意义只是基于ChatGPT能力的应用。但最近&#xff0c;Auto…

大型央企集团财务经营分析框架系列(二)

01集团化的数字化项目为什么会失败深度原因&#xff1a;方向性错误 这几年见过一些央企、国企、大型企业集团尝试过一些数字化的项目&#xff1a;数据中台、大数据分析、BI 分析项目&#xff0c;投入很大、周期也很长&#xff0c;甚至有的在项目开始前也找了专业的咨询公司来规…

按键外部中断

文章目录 运行环境&#xff1a;1.1 按键外部中断1)按键检测2)外部中断的3中触发方式 2.1配置1)原理图2)引脚配置3)中断配置4)RCC和SYS 3.1代码分析3.2添加代码1)中断处理函数IRQ中添加电平转换代码2)launch设置 5.1实验效果 运行环境&#xff1a; ubuntu18.04.melodic 宏基暗影…

如何用ChatGPT做团队绩效管理?根据员工的个人优势、不足、目标来生成更具体的绩效反馈

该场景对应的关键词库&#xff1a;&#xff08;25个&#xff09; 绩效管理、目标设定、绩效评估、员工优势、员工弱点、反馈机制、个人发展计划、职业规划、评估工具、数据分析、绩效考核、评分标准、KPI指标、成果目标、个人任务、团队任务、激励机制、晋升机会、增量奖励、培…

你的个人AI助理Pi来了

还记得之前的文章《不要老盯着ChatGPT&#xff0c;这几家公司的产品同样不容小觑》提到的Inflection AI公司吗&#xff1f;通过其官方推文了解到&#xff0c;前期我们关注的个人AI助理有了新的进展&#xff0c;Pi开始对外发布。 Pi是什么 Pi 是一种 AI&#xff0c;一种旨在提供…

使用crontab定时自动更新DDNS

需求说明&#xff1a; N1盒子的armbian系统配置好了 ipv6 的ddns&#xff0c;实现了域名访问本机&#xff0c;但是本地ipv6可能会发生变化&#xff0c;当发生变化后&#xff0c;需要手动执行指令&#xff0c;将新的ip与域名绑定&#xff0c;现在我们采用定时任务&#xff0c;每…