我使用PHPMailer将电子邮件构建为MIME字符串,我想通过Mailgun API发送它,使用curl
连接到/v3/[mydomain]/messages.mime
端点。< / p>
Mailgun documentation表示MIME字符串必须作为message
参数发送,并且您必须使用multipart/form-data
将其作为文件上传方式发送。
libcurl documentation表示如果您为CURLOPT_POSTFIELDS选项提供数组,则Content-type将设置为multipart/form-data
。
我试过了:
curl_setopt($ch, CURLOPT_POSTFIELDS, ["message" => $mimeData]);
但Mailgun API回答如下:
{ "message": "'message' parameter is not a file" }
答案 0 :(得分:1)
我设法通过首先创建一个临时文件来实现它:
$mimeFile = tmpfile();
fwrite($mimeFile, $mimeData);
并将其传递给CURLFile:
$mime = new \CURLFile(stream_get_meta_data($mimeFile)['uri']);
在此之后,我收到一条新的错误消息'to' parameter is missing
,所以我最终不得不从PHPMailer获取收件人地址(它们已经在MIME字符串中,但API似乎没有实现它):
curl_setopt($ch, CURLOPT_POSTFIELDS, [
"to" => implode(", ", array_keys($this->getAllRecipientAddresses())),
"message" => $mime
]);