2017-10-04 120 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 
]);