You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C++代码实现Protonmail邮件发送?

C++ 发送ProtonMail 邮件可行实现方案

ProtonMail 原生端到端加密机制会拦截所有直连官方SMTP服务器的第三方请求,不存在直接用普通SMTP客户端连官方服务器发信的可能,目前只有两个可落地的实现路径,根据开发成本要求选择即可。

方案1:本地部署Proton Bridge 对接标准SMTP(推荐,开发成本最低)

这个方案不需要处理Proton专属的加密、认证逻辑,所有和官方服务的交互都由本地运行的Proton Bridge代理完成,只需要像对接普通SMTP服务一样写代码即可:

  • 服务配置参数
    • Bridge启动后会在本机暴露SMTP服务,默认地址为127.0.0.1:1025,不需要直连外部Proton服务器
    • 认证用的账号密码是Bridge内为第三方客户端生成的专用凭证,不要用网页端登录的主账号密码,否则会认证失败
    • 生产环境部署时把Proton Bridge配置为系统后台服务,保持常驻运行即可
  • 可用C++依赖库
    • 无Qt依赖的轻量项目选libsmtpclient,原生支持SMTP认证、TLS,对接本地服务完全够用
    • 基于Qt开发的项目直接用Qt Network模块自带的SMTP相关接口即可,不需要额外引入第三方库
    • 不想引入专用SMTP库的话直接用libcurl也能实现SMTP发信,兼容性最好,几乎所有Linux/Windows开发环境都能直接适配

方案2:直接对接Proton Open API(无需本地部署Bridge,开发成本高)

如果运行环境不能安装Proton Bridge,可以直接走官方公开的REST接口发信:

  • 通信端口为HTTPS标准443端口,发信接口路径为/mail/v4/messages
  • 依赖库只需要选一个成熟的C++ HTTP客户端即可,比如libcurl、cpp-httplib,另外需要链接OpenSSL库处理PGP加解密逻辑
  • 注意事项:这个方案需要自行实现SRP登录认证、会话token管理、邮件内容PGP加密签名全流程逻辑,官方没有提供C++版本的官方SDK,所有逻辑需要对照接口规则实现,开发量是方案1的5倍以上,非特殊需求不建议选。
最小可运行示例(基于libcurl + Proton Bridge)
#include <curl/curl.h>
#include <string>
#include <cstring>

size_t readMailContent(void *ptr, size_t size, size_t nmemb, void *userdata) {
    std::string *content = static_cast<std::string*>(userdata);
    size_t copyLen = std::min(size * nmemb, content->size());
    if (copyLen > 0) {
        memcpy(ptr, content->c_str(), copyLen);
        content->erase(0, copyLen);
    }
    return copyLen;
}

int main() {
    curl_global_init(CURL_GLOBAL_DEFAULT);
    CURL *curl = curl_easy_init();
    if (!curl) {
        curl_global_cleanup();
        return -1;
    }

    // 配置本地Proton Bridge SMTP地址
    curl_easy_setopt(curl, CURLOPT_URL, "smtp://127.0.0.1:1025");
    // 替换为Bridge生成的专用账号密码
    curl_easy_setopt(curl, CURLOPT_USERNAME, "your_bridge_smtp_account");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "your_bridge_smtp_password");
    
    // 配置发件人、收件人
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<your_mail@proton.me>");
    curl_slist *recipients = nullptr;
    recipients = curl_slist_append(recipients, "<recipient@example.com>");
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

    // 构造符合SMTP规范的邮件内容,必须带标准邮件头
    std::string mailData = 
        "From: your_mail@proton.me\r\n"
        "To: recipient@example.com\r\n"
        "Subject: Test Mail From C++\r\n"
        "\r\n"
        "This is a test email sent by C++ client with Proton Bridge.\r\n";
    
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, readMailContent);
    curl_easy_setopt(curl, CURLOPT_READDATA, &mailData);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
    // 本地Bridge自签证书可根据需求调整校验规则
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);

    CURLcode res = curl_easy_perform(curl);
    int ret = res == CURLE_OK ? 0 : -1;

    curl_slist_free_all(recipients);
    curl_easy_cleanup(curl);
    curl_global_cleanup();
    return ret;
}

编译命令参考:
g++ send_proton_mail.cpp -o send_mail -lcurl
运行前确保本地Proton Bridge处于登录运行状态即可正常发信。


内容的提问来源于stack exchange,提问作者Lordoftherings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:48:29