用curl从c++发送电子邮件

Sending e-mails with curl from C++

本文关键字:电子邮件 c++ curl      更新时间:2023-10-16

我写了一小段代码来发送通知电子邮件,下面是负责发送邮件的函数:

int send_mail(const char* mail_path) {
    CURL *curl;
    CURLcode curl_code;
    FILE *message;
    message = fopen(mail_path, "r");
    struct curl_slist *recipients = NULL;
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_USERNAME, "XXXX");
        curl_easy_setopt(curl, CURLOPT_PASSWORD, "YYYY");
        curl_easy_setopt(curl, CURLOPT_URL, "ZZZZ");
        recipients = curl_slist_append(recipients, "XXXX");
        curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
        curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "XXX");
        curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
        curl_easy_setopt(curl, CURLOPT_READDATA, message);
        curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
        curl_code = curl_easy_perform(curl);
        curl_slist_free_all(recipients);
        curl_easy_cleanup(curl);
    }
    return curl_code;
}

当我从命令行使用它时,它工作得很好。

当脚本通过我使用的远程服务器上的cron管理器执行时,它不会发送电子邮件。我也可以通过服务器的命令行发送邮件。

代码似乎停止工作在curl_easy_perform步骤,但我不确定为什么-什么技术可以用来调试这种问题?

Cron作业也在自己创建电子邮件——这可能是问题的原因吗?

编辑:

我检查了日志,似乎在cron管理器的情况下,我试图连接到的谷歌smtp服务的IP地址与直接从命令行运行的脚本不同。cron的日志在354 Go ahead之后结束。其他日志相同

cron:

* Rebuilt URL to: smtp://smtp.gmail.com:587/
*   Trying 173.194.71.108...
...
> DATA
< 354  Go ahead ra7sm645322lbb.27 - gsmtp
---- stops here ----

命令行:

* Rebuilt URL to: smtp://smtp.gmail.com:587/
*   Trying 74.125.195.109...
...
< 354  Go ahead ex5sm4631837wib.2 - gsmtp
< 250 2.0.0 OK 1432828708 ex5sm4631837wib.2 - gsmtp
* Connection #0 to host smtp.gmail.com left intact

  1. 将CURLOPT_VERBOSE开关设为1L

  2. 记录失败的错误,并在失败后进行研究

不,事实上,cronjobs发送自己的邮件并不是这段代码失败的原因。