通过 Mailgun API 作为 MIME 发送,没有 Mailgun 库
Sending via Mailgun API as MIME, without Mailgun library
我正在使用 PHPMailer 将电子邮件构建为 MIME 字符串,我想通过 Mailgun API 发送它,使用 curl
连接到 /v3/[mydomain]/messages.mime
端点。
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" }
我设法通过首先创建一个临时文件让它工作:
$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
]);
我正在使用 PHPMailer 将电子邮件构建为 MIME 字符串,我想通过 Mailgun API 发送它,使用 curl
连接到 /v3/[mydomain]/messages.mime
端点。
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" }
我设法通过首先创建一个临时文件让它工作:
$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
]);