我正在尝试测试SendGrid的工作交易模板。当值进行了硬编码时,我可以发送邮件,但是当我为它们提供变量时,我不能发送。让我们看看:
我的标题:
$headers = array(
'Content-Type: application/json',
'Authorization: Bearer my_actual_api_key',
);
我的$数据阵列:
$resetLink = 'na';
$reset = 'Please, click here to activate your account';
$user = 'MyName';
$data = ['reset'=>$reset, 'user'=>$user, 'resetLink'=>$resetLink];
$ subs是通过做:
创建的if($data){
foreach($data as $k=>$v){
$subs.= '"{{'.$k.'}}":"'.$v.'"';
if($last_element != $v){
$subs .=",";
}
}
}
输出:
"{{reset}}": "Please, click here to activate your account.",
"{{user}}": "MyName",
"{{resetLink}}": "na"
我想要的!
但是,如果我这样做:
$json = '{
"personalizations": [{
"to": [{
"email": "'.$to.'",
"name": "Example 01"
}],
"subject": "'.$subject.'",
"substitutions": {
'.$subs.'
}
}],
"from": {
"email": "'.$from.'",
"name": "'.$from.'"
},
"reply_to": {
"email": "'.$from.'",
"name": "'.$from.'"
},
"template_id": "My_actual_temnplate_id"
}';
我回来:
{"errors":[{"message":"Bad Request","field":null,"help":null}]}
但是,如果我这样做:
$json = '{
"personalizations": [{
"to": [{
"email": "'.$to.'",
"name": "Example 01"
}],
"subject": "'.$subject.'",
"substitutions": {
"{{reset}}": "Please, click here to activate your account.",
"{{user}}": "MyName",
"{{resetLink}}": "na"
}
}],
"from": {
"email": "'.$from.'",
"name": "'.$from.'"
},
"reply_to": {
"email": "'.$from.'",
"name": "'.$from.'"
},
"template_id": "1959ba19-3bc7-455b-a577-7a340f4c5fd9"
}';
我可以卷曲并发送邮件正常,没有以下任何错误。
这是卷曲,标准的东西:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.sendgrid.com/v3/mail/send");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
我还尝试将此JSON作为数组制作,然后使用JSON_ENCODE(),也没有运气,同样的错误非传播与上述。这是在Sendgrid网站上提供的JSON,仅供参考。
。您可以看到,我将所有内容都作为字符串说明了我发现的大多数答案。有人可以阐明为什么会发生这种情况吗?预先感谢!
今天早上出现,代码奏效了,该循环生成替换没有进一步的问题。框架(YII2)是缓存的。几个小时后需要刷新1个。