cURL 终端命令成功执行,而 libcurl 程序没有
cURL terminal command executes successfully while libcurl program doesn't
#include <curl/curl.h>
int main(int argc, char *argv[])
{
CURLcode ret;
CURL *hnd;
struct curl_slist *slist1;
slist1 = NULL;
slist1 = curl_slist_append(slist1, "reciever@gmail.com");
hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)179);
curl_easy_setopt(hnd, CURLOPT_URL, "smtps://smtp.gmail.com:465/mail.txt");
curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(hnd, CURLOPT_USERPWD, "sender@gmail.com:senderPass");
curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.47.0");
curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(hnd, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
curl_easy_setopt(hnd, CURLOPT_MAIL_FROM, "sender@gmail.com");
curl_easy_setopt(hnd, CURLOPT_MAIL_RCPT, slist1);
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
ret = curl_easy_perform(hnd);
curl_easy_cleanup(hnd);
hnd = NULL;
curl_slist_free_all(slist1);
slist1 = NULL;
return (int)ret;
}
上面的 libcurl 代码是通过命令行使用以下命令生成的:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd --mail-from 'sender@gmail.com' --mail-rcpt 'receiver@gmail.com' --upload-file mail.txt --user 'sender@gmail.com:senderPass' --insecure --libcurl -myCode.c
虽然命令
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd --mail-from 'sender@gmail.com' --mail-rcpt 'receiver@gmail.com' --upload-file mail.txt --user 'sender@gmail.com:senderPass' --insecure
发送邮件成功,为什么myCode.c发送邮件失败?
详细选项的输出在
后停止响应
< 354 Go ahead [somecharacters].43 -gsmtp
并且 mail.txt
文件是:
From: "I am Sender" <sender@gmail.com>
To: "I am Receiver" <receiver@gmail.com>
Subject: This is a test
Hi,
I’m sending this mail with curl through my gmail account.
Bye!
您必须指定要读取的文件的文件描述符 CURLOPT_READDATA
:
curl_easy_setopt(hnd, CURLOPT_READDATA, fd);
整个代码如下所示:
#include <curl/curl.h>
int main(int argc, char *argv[])
{
CURLcode ret;
CURL *hnd;
struct curl_slist *slist1;
slist1 = NULL;
slist1 = curl_slist_append(slist1, "reciever@gmail.com");
FILE *fd;
fd = fopen("mail.txt", "rb");
if(!fd)
return 1;
hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)179);
curl_easy_setopt(hnd, CURLOPT_URL, "smtps://smtp.gmail.com:465/mail.txt");
curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(hnd, CURLOPT_READDATA, fd);
curl_easy_setopt(hnd, CURLOPT_USERPWD, "sender@gmail.com:senderPass");
curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.47.0");
curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(hnd, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
curl_easy_setopt(hnd, CURLOPT_MAIL_FROM, "sender@gmail.com");
curl_easy_setopt(hnd, CURLOPT_MAIL_RCPT, slist1);
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
ret = curl_easy_perform(hnd);
curl_easy_cleanup(hnd);
hnd = NULL;
curl_slist_free_all(slist1);
slist1 = NULL;
return (int)ret;
}
#include <curl/curl.h>
int main(int argc, char *argv[])
{
CURLcode ret;
CURL *hnd;
struct curl_slist *slist1;
slist1 = NULL;
slist1 = curl_slist_append(slist1, "reciever@gmail.com");
hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)179);
curl_easy_setopt(hnd, CURLOPT_URL, "smtps://smtp.gmail.com:465/mail.txt");
curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(hnd, CURLOPT_USERPWD, "sender@gmail.com:senderPass");
curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.47.0");
curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(hnd, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
curl_easy_setopt(hnd, CURLOPT_MAIL_FROM, "sender@gmail.com");
curl_easy_setopt(hnd, CURLOPT_MAIL_RCPT, slist1);
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
ret = curl_easy_perform(hnd);
curl_easy_cleanup(hnd);
hnd = NULL;
curl_slist_free_all(slist1);
slist1 = NULL;
return (int)ret;
}
上面的 libcurl 代码是通过命令行使用以下命令生成的:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd --mail-from 'sender@gmail.com' --mail-rcpt 'receiver@gmail.com' --upload-file mail.txt --user 'sender@gmail.com:senderPass' --insecure --libcurl -myCode.c
虽然命令
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd --mail-from 'sender@gmail.com' --mail-rcpt 'receiver@gmail.com' --upload-file mail.txt --user 'sender@gmail.com:senderPass' --insecure
发送邮件成功,为什么myCode.c发送邮件失败? 详细选项的输出在
后停止响应< 354 Go ahead [somecharacters].43 -gsmtp
并且 mail.txt
文件是:
From: "I am Sender" <sender@gmail.com>
To: "I am Receiver" <receiver@gmail.com>
Subject: This is a test
Hi,
I’m sending this mail with curl through my gmail account.
Bye!
您必须指定要读取的文件的文件描述符 CURLOPT_READDATA
:
curl_easy_setopt(hnd, CURLOPT_READDATA, fd);
整个代码如下所示:
#include <curl/curl.h>
int main(int argc, char *argv[])
{
CURLcode ret;
CURL *hnd;
struct curl_slist *slist1;
slist1 = NULL;
slist1 = curl_slist_append(slist1, "reciever@gmail.com");
FILE *fd;
fd = fopen("mail.txt", "rb");
if(!fd)
return 1;
hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)179);
curl_easy_setopt(hnd, CURLOPT_URL, "smtps://smtp.gmail.com:465/mail.txt");
curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(hnd, CURLOPT_READDATA, fd);
curl_easy_setopt(hnd, CURLOPT_USERPWD, "sender@gmail.com:senderPass");
curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.47.0");
curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(hnd, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
curl_easy_setopt(hnd, CURLOPT_MAIL_FROM, "sender@gmail.com");
curl_easy_setopt(hnd, CURLOPT_MAIL_RCPT, slist1);
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
ret = curl_easy_perform(hnd);
curl_easy_cleanup(hnd);
hnd = NULL;
curl_slist_free_all(slist1);
slist1 = NULL;
return (int)ret;
}