gpt4 book ai didi

c - 使用 libcurl 发送第一封无效电子邮件后,SMTP 连接就中断了。这是 "feature"还是我搞砸了?

转载 作者:行者123 更新时间:2023-11-30 15:53:37 29 4
gpt4 key购买 nike

我正在尝试向 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 服务器,从而增加了处理的大量开销。

我发现在电子邮件线程中的某个地方提到了这个“功能”,但这是一个相当过时的回复。我想知道是否有一个好的方法来解决这个问题,或者我只是在做一些愚蠢的事情。谢谢!

最佳答案

您正在经历KNOWN_BUG #79:

SMTP. When sending data to multiple recipients, curl will abort and return failure if one of the recipients indicate failure (on the "RCPT TO" command). Ordinary mail programs would proceed and still send to the ones that can receive data. This is subject for change in the future. http://curl.haxx.se/bug/view.cgi?id=3438362

请随时帮助我们完成修复!

关于c - 使用 libcurl 发送第一封无效电子邮件后,SMTP 连接就中断了。这是 "feature"还是我搞砸了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13549050/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com