C语言编程题实现一个简易的邮件发送工具

C语言编程题,实现一个简易的邮件发送工具,需要深入理解SMTP协议,并使用Socket编程与SMTP服务器进行通信。SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用于在邮件服务器之间发送电子邮件。

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,可以帮助开发者快速构建发送邮件的功能。相较于 libcurllibsmtp 更专注于 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;
}

推荐阅读
cjavapy编程之路首页