在C++中发送电子邮件:库与实现

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++电子邮件发送:库概述与实践示例



发送电子邮件是许多应用程序的关键任务之一:从监控和通知系统到完整的邮件客户端。C++语言本身不内置支持SMTP协议,但存在强大的第三方库,可以轻松集成电子邮件发送功能。在本文中,我们将介绍最流行的工具、它们的安装方法,并提供可运行的代码示例。



C++中发送电子邮件的主要方法



在C++中发送电子邮件主要有三种方法:



  • 使用libcurl — 最流行且最灵活的库。支持SMTP、SMTP-SSL、SMTP-STARTTLS。
  • 使用VMime — 专门用于处理MIME消息、加密和附件的库。
  • 直接使用套接字 — 低级方法,需要手动实现SMTP协议。


在本指南中,我们将重点介绍libcurl,因为它是最通用且广泛使用的解决方案。



安装libcurl



要通过libcurl使用SMTP,您需要安装该库及其头文件。不同操作系统的示例:



# Ubuntu / Debiansudo apt-get install libcurl4-openssl-dev

# CentOS / Fedorasudo yum install libcurl-devel

# macOS (通过Homebrew)brew install curl

# Windows (通过vcpkg)vcpkg install curl


确保您的curl构建包含SMTP和SSL协议支持。可以通过以下命令检查:



curl --version | grep -i smtp


简单示例:发送文本邮件



让我们看一个使用libcurl通过Gmail SMTP服务器发送电子邮件的基本示例。要成功发送,您需要为Gmail生成应用密码(App Password)。



#include <stdio.h>#include <string.h>#include <curl/curl.h>

// 用于传递邮件数据的结构体struct upload_status { int lines_read; const char **payload_text;};

// 用于读取邮件正文的回调函数static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) { struct upload_status *upload_ctx = (struct upload_status *)userp; const char *data;

if (upload_ctx->lines_read < 5) { data = upload_ctx->payload_text[upload_ctx->lines_read]; if (data) { size_t len = strlen(data); memcpy(ptr, data, len); upload_ctx->lines_read++; return len; } } return 0;}

int main(void) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *recipients = NULL; struct upload_status upload_ctx;

// 邮件正文(每行一个独立元素) const char *payload_text[] = { "From: 您的姓名 <youremail@gmail.com>\\r", "To: 收件人 <recipient@example.com>\\r", "Subject: 来自C++的问候!\\r", "\\r", // 空行 — 标题和正文的分隔符 "这是一封使用libcurl在C++中发送的测试邮件。\\r", NULL };

upload_ctx.lines_read = 0; upload_ctx.payload_text = payload_text;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if (curl) { // 配置Gmail SMTP服务器 curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.gmail.com:587"); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_USERNAME, "youremail@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "您的应用密码");

// 指定发件人和收件人 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<youremail@gmail.com>"); recipients = curl_slist_append(recipients, "<recipie

推荐