【问题标题】:Does anyone know anything about the Mad Mimi Mailer API?有人知道 Mad Mimi Mailer API 吗?
【发布时间】: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,添加空间修复它!!!我想给你功劳。我将您的答案标记为答案,但它是您的答案和上述评论的组合。

标签: php curl yaml


【解决方案1】:

根据the docs,CURLOPT_POSTFIELDS 采用 urlencoded 字符串或数组。你的两者都不是,因为你给出的字符串包含空格。

数组似乎更简单:

$myvars = [
  "recipient" => $email,
  "promotion_name" => "Welcome",
  "body" => "--- \nname: Some YAML data\n"
];

顺便说一句,您似乎没有显示您的实际代码。您提供的错误消息说您的 YAML 以 --- 开头,但它不在您的代码中。该错误意味着您只是忘记在字符串中包含--- 之后的换行符。

【讨论】:

  • 对不起,我一直在测试和改变很多东西。您是正确的,我的代码和响应在我的示例中不匹配。我已经测试了有和没有 3 个破折号。我将尝试一个数组,这似乎更容易,我尝试过 urlencoded 而不是编码。过去一天我尝试了很多东西。
  • 我对代码进行了一些编辑,去掉了所有其他内容,只了解了电子邮件发送过程的基础知识。我尝试了数组,它没有改变任何东西。当我从电子邮件中取出占位符时,它给了我一个已发送的代码。一旦我有了占位符,它就不起作用了。我已验证 HTML 电子邮件和原始文本中的占位符都是 {firstname}。
  • Flyx 的回答让我走了大部分路,然后我编辑了我的代码,他对我编辑的代码的评论让我一路走来。谢谢 Flyx,你太棒了!!
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2010-12-15
  • 2011-05-28
  • 2023-01-23
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多