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;
}