我正在尝试向 libcurl 提供一长串电子邮件(其中一些最终不存在)。如果有任何无效的电子邮件,整个脚本就会死掉。
我可以为每个电子邮件地址重新连接到 SMTP 服务器(处理正确),但这只是愚蠢的低效。
我的相关代码如下:
// necessary simple curl setup completed above
// assume all referenced variables have been initialized
// init cURL server connection
curl_easy_setopt(curl, CURLOPT_URL, SMTPSERVER);
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, MAILFROM);
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, stdout);
char tmp[EMAIL_STR_LEN+3] = {0}; tmp[0] = '<';
while( fgets(&tmp[1], EMAIL_STR_LEN+1, emails) ){
// '>' overwrites '\0' from fgets()
tmp[EMAIL_STR_LEN-1] = '>';
strncpy(current->email, tmp, EMAIL_STR_LEN+3);
// malloc next link
current->next = initemail();
current = current->next;
// remove \n\0 from stream
fseek(emails, 2, SEEK_CUR);
}
fclose(emails);
current = head;
while(current){
recipients = curl_slist_append(recipients, (const char *) current->email);
current = current->next;
}
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
curl_easy_perform(curl);
// clean up stuff
执行上述操作,但curl_easy_perform
要调用一个电子邮件收件人,然后将变量置空并处理下一封电子邮件即可。唯一的问题是 libcurl 每次都重新连接到 SMTP 服务器,从而增加了处理的大量开销。
我在一个电子邮件线程的某处发现了这个“功能”,但这是一个相当过时的回复。我想知道是否有解决此问题的好方法,或者我是否只是在做一些愚蠢的事情。谢谢!