Skip to content

WeCom Office Email SKILL (wecom-office-email)

企业微信邮件域 SKILL:发送邮件(普通/日程/会议三种)、收件箱管理、邮件群组 CRUD、公共邮箱 CRUD、应用邮箱账号管理、邮箱启用/禁用、高级功能账号管理等 29 个 API。


1. Prerequisites

应用类型凭证要求权限要求
自建应用应用 secret邮箱权限
第三方应用suite_access_token邮箱权限

2. API Quick Reference

2.1 发送邮件

#接口方法Endpoint
M1发送普通邮件POSTexmail/app/compose_send
M2发送日程邮件POSTexmail/app/calendar_send
M3发送会议邮件POSTexmail/app/meeting_send

2.2 获取接收的邮件

#接口方法Endpoint
M4获取收件箱邮件列表POSTexmail/mail/get_mail_list
M5获取邮件内容POSTexmail/mail/get_mail

2.3 邮箱账号管理

#接口方法Endpoint
M6禁用/启用邮箱账号POSTexmail/account/act_mailbox
M7获取邮件未读数POSTexmail/mail/get_newcount

2.4 应用邮箱

#接口方法Endpoint
M8更新应用邮箱账号POSTexmail/app/update_account
M9查询应用邮箱账号POSTexmail/app/get_account

2.5 邮件群组

#接口方法Endpoint
M10创建邮件群组POSTexmail/group/create
M11更新邮件群组POSTexmail/group/update
M12删除邮件群组POSTexmail/group/delete
M13获取邮件群组详情POSTexmail/group/get
M14模糊搜索邮件群组POSTexmail/group/search

2.6 公共邮箱

#接口方法Endpoint
M15创建公共邮箱POSTexmail/publicmail/create
M16更新公共邮箱POSTexmail/publicmail/update
M17删除公共邮箱POSTexmail/publicmail/delete
M18获取公共邮箱详情POSTexmail/publicmail/get
M19模糊搜索公共邮箱POSTexmail/publicmail/search

2.7 其他

#接口方法Endpoint
M20获取用户功能属性POSTexmail/useroption/get
M21更改用户功能属性POSTexmail/useroption/update
M22-24高级功能账号管理POSTexmail/account/pro_user/*
M25-26客户端专用密码POSTexmail/publicmail/password/*

3. API Details

M1. 发送普通邮件

POST /cgi-bin/exmail/app/compose_send?access_token=ACCESS_TOKEN

请求参数

参数必须类型说明
toobject收件人
ccobject抄送人
bccobject密送人
subjectstring邮件主题
contentstring邮件正文(HTML)
content_typestring"html" (默认) 或 "text"
attachmentsarray附件列表
enable_id_transint是否开启 userid 转换

4. Code Templates

python
"""WeCom Email Client — 邮件管理"""
from wecom_core import WeComClient


class EmailClient:
    def __init__(self, client: WeComClient):
        self.client = client

    def send_mail(self, to: list[str], subject: str, content: str,
                  cc: list[str] | None = None, bcc: list[str] | None = None,
                  content_type: str = "html") -> None:
        """M1: 发送普通邮件"""
        body: dict = {
            "to": {"emails": to},
            "subject": subject, "content": content,
            "content_type": content_type,
        }
        if cc:
            body["cc"] = {"emails": cc}
        if bcc:
            body["bcc"] = {"emails": bcc}
        self.client.post("/exmail/app/compose_send", json=body)

    def send_calendar_mail(self, to: list[str], subject: str, content: str,
                            calendar_info: dict) -> None:
        """M2: 发送日程邮件"""
        self.client.post("/exmail/app/calendar_send", json={
            "to": {"emails": to}, "subject": subject,
            "content": content, "calendar": calendar_info,
        })

    def get_mail_list(self, userid: str, folder: str = "inbox",
                      offset: int = 0, limit: int = 50) -> dict:
        """M4: 获取收件箱邮件列表"""
        return self.client.post("/exmail/mail/get_mail_list", json={
            "userid": userid, "folder": folder, "offset": offset, "limit": limit,
        })

    def get_mail(self, userid: str, mail_id: str) -> dict:
        """M5: 获取邮件内容"""
        return self.client.post("/exmail/mail/get_mail", json={
            "userid": userid, "mail_id": mail_id,
        })

    def get_new_count(self, userid: str) -> int:
        """M7: 获取邮件未读数"""
        resp = self.client.post("/exmail/mail/get_newcount", json={"userid": userid})
        return resp.get("count", 0)

    # ── 邮件群组 ──

    def create_group(self, group_id: str, group_name: str, email_list: list[str]) -> None:
        """M10: 创建邮件群组"""
        self.client.post("/exmail/group/create", json={
            "group_id": group_id, "group_name": group_name, "email_list": email_list,
        })

    def delete_group(self, group_id: str) -> None:
        """M12: 删除邮件群组"""
        self.client.post("/exmail/group/delete", json={"group_id": group_id})

    # ── 公共邮箱 ──

    def create_public_mail(self, email: str, name: str) -> None:
        """M15: 创建公共邮箱"""
        self.client.post("/exmail/publicmail/create", json={"email": email, "name": name})

    def delete_public_mail(self, id_: str) -> None:
        """M17: 删除公共邮箱"""
        self.client.post("/exmail/publicmail/delete", json={"id": id_})

4.1 Java 示例

java
public class WecomOfficeEmailService {
    private final WeComClient client;

    public WecomOfficeEmailService(WeComClient client) {
        this.client = client;
    }

    /**
     * 使用示例:调用 wecom-office-email 相关 API
     * 请参考本 SKILL 的 API 速查表选择具体接口
     */
    public JsonObject callApi(String path, JsonObject params) throws Exception {
        return client.post(path, params);
    }

    // 更多方法请参考上方 API 详细说明章节,每个接口对应一个方法
    // 关键注意事项请查阅「踩坑指南」章节
}

依赖 (Maven):

xml
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

4.2 PHP 示例

php
<?php
class WecomOfficeEmailService
{
    private WeComClient $client;

    public function __construct(WeComClient $client) { $this->client = $client; }

    /**
     * 使用示例:调用 wecom-office-email 相关 API
     * 请参考本 SKILL 的 API 速查表选择具体接口
     */
    public function callApi(string $path, array $params = []): array
    {
        return $this->client->post($path, $params);
    }

    // 更多方法请参考上方 API 详细说明章节
    // 关键注意事项请查阅「踩坑指南」章节
}

依赖 (Composer):

bash
composer require guzzlehttp/guzzle

5. Gotcha Guide

G1. 邮件内容格式

content 字段默认为 HTML 格式。如果发送纯文本,设置 content_type: "text"

G2. 附件大小限制

邮件附件总大小限制通常与企业配置相关,一般不超过 50MB。

G3. 应用邮箱 vs 用户邮箱

应用邮箱是以应用身份发送邮件(From 显示应用名),用户邮箱以用户身份发送。

G4. 邮件群组 group_id 格式

group_id 必须是邮箱格式,如 dev-team@company.com


6. References

doc_id 范围说明
37468-37507邮件概述/账号/未读数/群组/公共邮箱
43518-44727发送邮件/收件箱/应用邮箱/功能属性
49575-49577高级功能账号管理

依赖 SKILLwecom-core

Released under the Apache 2.0 License.