API开放平台代码示例:获取访问凭证

邮箱管理员通过邮箱管理后台的API开放平台,添加应用,勾选需要的权限,保存后即可获取到应用IDSecret

image

相关接口

获取访问凭证

基本流程

image

Python示例代码

说明
  • 若key值不想从环境变量获取,直接传字符串即可,如

client_id ='xxxxxx'

client_secret ='xxxxxx'

重要

风险提示:下述代码在Python 3.11.9进行的测试,用于生产环境之前请务必先做好测试。

# -*- coding: utf-8 -*-
import os
import requests
from datetime import datetime, timedelta


def get_access_token():
    """
    获取访问凭证。

    本函数通过请求阿里云邮箱的OAuth2.0接口获取访问凭证(access_token)。
    需要使用环境变量中的客户端ID和客户端密钥进行认证。
    """
    # 打印接口名称和文档链接
    print('接口名称:', '获取访问凭证,文档:https://mailhelp.aliyun.com/openapi/index.html#/markdown/authorization.md')
    # 定义接口URL
    interface_url = "https://alimail-cn.aliyuncs.com/oauth2/v2.0/token"
    # 设置请求头,指定内容类型
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}

    # 从环境变量中获取客户端ID和密钥
    client_id = os.getenv('ALIMAIL_CLIENT_ID')  # 获取环境变量 AIMAIL_CLIENT_ID 的值,需要提前配置到环境变量中
    client_secret = os.getenv('ALIMAIL_CLIENT_SECRET')  # 获取环境变量 AIMAIL_CLIENT_SECRET 的值,需要提前配置到环境变量中

    # 检查客户端ID和密钥是否已设置
    if not client_id or not client_secret:
        raise ValueError("Environment variables ALIMAIL_CLIENT_ID and ALIMAIL_CLIENT_SECRET must be set!")

    # 准备请求数据
    data = {
        "grant_type": "client_credentials",
        "client_id": client_id,
        "client_secret": client_secret
    }
    try:
        # 发送POST请求
        response = requests.post(interface_url, headers=headers, data=data)
        # 打印接口返回参数
        print(f'接口返回参数:{response.json()}')

        # 解析响应为字典
        response_json = response.json()
        # 提取token类型和过期时间
        token_type = response_json["token_type"]
        expires_in = response_json["expires_in"]
        # 打印token类型
        print(f'token_type: {token_type}')
        # 计算过期时间
        current_time = datetime.now()
        expiration_time = current_time + timedelta(seconds=expires_in)
        # 打印过期时间
        print(f"expires_in: {round(expires_in / 3600)} hours,end_time:", expiration_time.strftime("%Y-%m-%d %H:%M:%S"))

        # 返回访问凭证
        return response_json["access_token"]
    except requests.RequestException as e:
        # 处理请求失败异常
        print(f"请求失败:{e}")
    except (KeyError, ValueError) as e:
        # 处理解析响应失败异常
        print(f"解析响应失败: {e}")


# 调用函数获取访问凭证并打印
access_token = get_access_token()
print(f'access_token: {access_token}')

运行结果

image