【发布时间】:2021-03-17 02:28:30
【问题描述】:
晚安好人。我遇到了一个我试图解决的问题。这是上下文:
在电子邮件模板中(使用电子邮件服务提供商 Mad Mimi)我有一个占位符 {name}
在调用他们的 API 以发送交易电子邮件的实现中,我使用 cURL 请求发布数据。此数据包括我的 api 密钥和用户名,因此我无法提供该部分代码,但这里是我用来尝试完成此操作的文档的链接。 (https://madmimi.com/developer/mailer/methods)
这是上面链接中的示例:
promotion_name=Welcome to Acme Widgets
recipient=Dave Hoover <dave@example.com>
body=--- \nname: Some YAML data\n
我的 PHP 代码是这样的:(在这些变量之前还有 2 个其他变量)
$myvars .= '&recipient='.$email;
$myvars .= '&promotion_name=Welcome';
$myvars .= '&body= name: Some YAML data';
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
return (curl_exec( $ch ));
我从发送中得到的结果是:
电子邮件结果:无法解析您的正文参数,原因是:():在此上下文中第 1 行第 9 列不允许映射值。请确保正文参数有效 YAML:--- 名称:一些YAML 数据...
有人可以帮忙吗?
谢谢!!
编辑:我将代码更改为这样:
$url = 'https://api.madmimi.com/mailer';
$myvars = [
"username" => "xxxxxxxxxx",
"api_key" => "xxxxxxxxxx",
"recipient" => "xxxxx@gmail.com",
"promotion_name" => "Welcome",
"body" => "--- \n firstname:John\n"
];
error_log('Mailer API Variables: ' . $myvars);
//TODO: Put the email transaction ID into the database FUTURE PHASE
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
error_log (curl_exec( $ch ));
我尝试了两种方式的 body 变量。一个是urlencoded,一个不是。以下是两次尝试的响应。
[2020 年 12 月 5 日 10:20:55 America/Boise] Mailer API 变量:数组
[2020 年 12 月 5 日 10:20:56 America/Boise] 您的电子邮件中有 {placeholders},但您没有在 body 参数中指定它们的替换,即:---+%0A+firstname %3A约翰%0A
[2020 年 12 月 5 日 10:22:10 America/Boise] Mailer API 变量:数组
[2020 年 12 月 5 日 10:22:10 America/Boise] 您的电子邮件中有 {placeholders},但您没有在 body 参数中指定它们的替换,即:--- 名字:约翰
【问题讨论】:
-
在编辑中,
firstname:后面缺少一个空格。可悲的是,我无法访问您的链接,因为我的 Adblocker 似乎吃掉了它。给数组时绝对不需要 urlencode。 -
Flyx,添加空间修复它!!!我想给你功劳。我将您的答案标记为答案,但它是您的答案和上述评论的组合。