通过Mailgun API发送为MIME,没有Mailgun库

时间:2017-10-04 10:08:43

标签: php curl mailgun php-curl

我使用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" }

1 个答案:

答案 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
]);