私は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
を実行しますが、1つの電子メール受信者で呼び出されるように移動し、変数をNULLにして、次の電子メールを処理します。唯一の問題は、libcurlが毎回SMTPサーバーに再接続し、処理に多大なオーバーヘッドが追加されることです。
この「機能」がメールスレッドのどこかで言及されているのを見つけましたが、それはかなり古い応答でした。これを回避する良い方法があるのか、それとも私が愚かなことをしているだけなのかと思っていました。ありがとう!