我正在使用ElasticEmail API从我的php网站发送电子邮件。我确定我复制粘贴了正确的API密钥。我的帐户也处于活动状态。这是我的代码:
$postStr = array(
'apikey' => 'MY-KEY',
'from' => $fromEmail,
'fromName' => $fromEmail,
'subject' => '[Bug Report]',
'to' => $notifyEmail,
'bodyHtml' => $bugDetails,
'isTransactional' => true);
var_dump($postStr);
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false
));
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;
vardump内容:
array(7){[“” apikey“] =>字符串(36)” ----我的apikey在这里-----“ [“ from”] =>字符串(20)“ genecode@gmail.com” [“ fromName”] =>字符串(20) “ genecode@gmail.com” [“主题”] =>字符串(12)“ [错误报告]” [“至”] => 字符串(23)“ genecode@gmail.com” [“ bodyHtml”] =>字符串(4)“测试” [“ isTransactional”] => bool(true)}
结果是:
{"success":false,"error":"Incorrect apikey"}
我不知道我做错了什么。
编辑:我尝试安装Postman。并测试它似乎可以正常工作。我猜我的数组构建有问题吗?
答案 0 :(得分:0)
好的,我找到了答案。似乎我的猜测是正确的,因为我建立后场的方式不正确。正确的方法是在将数组传递给CURLOPT_POSTFIELDS之前在数组上使用http_build_query。
然后就可以了。
代码:
$postSafe = http_build_query($postStr);
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postSafe,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false
));
答案 1 :(得分:0)
为正确起见,应在params数组上运行json_encode
$postStr = json_encode(array(
'apikey' => 'MY-KEY',
'from' => $fromEmail,
'fromName' => $fromEmail,
'subject' => '[Bug Report]',
'to' => $notifyEmail,
'bodyHtml' => $bugDetails,
'isTransactional' => true));
或将参数作为formdata发送。 请注意,在查询字符串中发送apikey不是安全的解决方案(这是您使用http_build_query所做的事情)。您还可以使用我们的官方api library,它将为您解决这个问题。