2017-10-04 75 views
0

我使用PHPMailer将电子邮件构建为MIME字符串,并且我想通过Mailgun API发送邮件,使用curl连接到/v3/[mydomain]/messages.mime端点。通过Mailgun API作为MIME发送,没有Mailgun库

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

我设法得到它的工作首先要创建一个临时文件:

$mimeFile = tmpfile(); 
fwrite($mimeFile, $mimeData); 

并传递给CURLFile:

$mime = new CURLFile(stream_get_meta_data($mimeFile)['uri']); 

之后,我收到一条新的错误消息'to' parameter is missing,所以我最终必须从PHP Mailer获取收件人地址(它们已经在MIME字符串中,但API似乎没有意识到):

curl_setopt($ch, CURLOPT_POSTFIELDS, [ 
    "to" => implode(", ", array_keys($this->getAllRecipientAddresses())), 
    "message" => $mime 
]);