1、使用 libcurl 库
libcurl
是一个功能强大的开源库,支持多种网络协议,包括 HTTP、FTP、SMTP 等。使用 libcurl
可以非常方便地实现各种网络操作,包括发送邮件。在使用 libcurl
之前,需要先安装它。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #define SMTP_SERVER "smtp://smtp.example.com:587" #define USERNAME "your_email@example.com" #define PASSWORD "your_password" void send_email(const char *to, const char *subject, const char *body) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { struct curl_slist *recipients = NULL; curl_easy_setopt(curl, CURLOPT_URL, SMTP_SERVER); curl_easy_setopt(curl, CURLOPT_USERNAME, USERNAME); curl_easy_setopt(curl, CURLOPT_PASSWORD, PASSWORD); curl_easy_setopt(curl, CURLOPT_FROM, USERNAME); recipients = curl_slist_append(recipients, to); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); char message[1024]; snprintf(message, sizeof(message), "To: %s\r\nFrom: %s\r\nSubject: %s\r\n\r\n%s", to, USERNAME, subject, body); curl_easy_setopt(curl, CURLOPT_READDATA, message); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_slist_free_all(recipients); curl_easy_cleanup(curl); } curl_global_cleanup(); } int main() { const char *to = "recipient@example.com"; const char *subject = "Test Email"; const char *body = "This is a test email sent from C program."; send_email(to, subject, body); return 0; }
2、使用 sendmail 命令
在Unix/Linux环境中,可以通过 sendmail
命令发送邮件。
#include <stdio.h> #include <stdlib.h> void send_email(const char *to, const char *subject, const char *body) { FILE *fp; char command[256]; snprintf(command, sizeof(command), "sendmail -t"); fp = popen(command, "w"); if (fp == NULL) { perror("popen failed"); return; } fprintf(fp, "To: %s\n", to); fprintf(fp, "Subject: %s\n", subject); fprintf(fp, "\n%s\n", body); pclose(fp); } int main() { const char *to = "recipient@example.com"; const char *subject = "Test Email"; const char *body = "This is a test email sent from C program using sendmail."; send_email(to, subject, body); return 0; }
3、使用 SMTP 客户端库(如 libsmtp)
libsmtp
是一个用于发送电子邮件的 C 语言库。它提供了简单易用的 API,可以帮助开发者快速构建发送邮件的功能。相较于 libcurl
,libsmtp
更专注于 SMTP 协议,提供了更高级别的抽象,
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <smtp.h> #define SMTP_SERVER "smtp.example.com" #define USERNAME "your_email@example.com" #define PASSWORD "your_password" void send_email(const char *to, const char *subject, const char *body) { smtp_t *smtp; smtp = smtp_create(SMTP_SERVER, 587, USERNAME, PASSWORD); if (smtp) { smtp_set_debug(smtp, 1); smtp_send(smtp, USERNAME, to, subject, body); smtp_destroy(smtp); } else { fprintf(stderr, "Failed to create SMTP connection.\n"); } } int main() { const char *to = "recipient@example.com"; const char *subject = "Test Email"; const char *body = "This is a test email sent from C program using libsmtp."; send_email(to, subject, body); return 0; }