以下代码有效,电子邮件是使用我的sendinblue API发送的:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.sendinblue.com/v3/smtp/email');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{ n "sender":{ n "name":"My name",n "email":"admin@mydomain.sg"n },n "to":[ n { n "email":"hisname@hisdomain.com",n "name":"His name"n }n ],n "subject":"Testing email on request",n "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}");
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'Api-Key: I removed API Key before posting this question';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>
但是我想用变量替换发件人姓名和电子邮件但是当我替换
时它不起作用curl_setopt($ch, CURLOPT_POSTFIELDS, "{ n "sender":{ n "name":"My name",n "email":"admin@mydomain.sg"n },n "to":[ n { n "email":"hisname@hisdomain.com",n "name":"His name"n }n ],n "subject":"Testing email on request",n "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}");
:
$myname = "My Name";
$myemail = "admin@mydomain.sg";
curl_setopt($ch, CURLOPT_POSTFIELDS, "{ n "sender":{ n "name":$myname,n "email":$myemailn },n "to":[ n { n "email":"hisname@hisdomain.com",n "name":"His name"n }n ],n "subject":"Testing email on request",n "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}");
谁能告诉我问题出在哪里?对不起,我是一个初学者在编码…提前谢谢你!
您可能会面临一个错误,因为您试图在JSON字符串中插入一个变量,但错过了用双引号包装变量。JSON中的字符串必须总是用双引号括起来。
像这样直接处理JSON字符串通常不是一个好主意,除非它是一个非常短或简单的字符串。
更好的方法是使用数组,然后使用json_encode
将数组转换为字符串,以防您需要JSON字符串。
与其从头开始创建数组,不如偷懒一点:您可以使用json_decode
将curl_setopt
中使用的相同字符串转换为关联数组。
$curlPostfields = json_decode("{ n "sender":{ n "name":"My name",n "email":"admin@mydomain.sg"n },n "to":[ n { n "email":"hisname@hisdomain.com",n "name":"His name"n }n ],n "subject":"Testing email on request",n "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}",
$association = true);
查看json_decode
的文档,您可以看到选项$association = true
创建了一个关联数组而不是一个对象。
数组内容被转储到下面。
>>> var_dump($curlPostfields);
array(4) {
["sender"]=>
array(2) {
["name"]=>
string(7) "My name"
["email"]=>
string(17) "admin@mydomain.sg"
}
["to"]=>
array(1) {
[0]=>
array(2) {
["email"]=>
string(21) "hisname@hisdomain.com"
["name"]=>
string(8) "His name"
}
}
["subject"]=>
string(24) "Testing email on request"
["htmlContent"]=>
string(114) "<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"
}
现在很容易改变,因为你需要发送方name
和email
字段,你只需要直接编辑数组。
$myCustomName = 'Mr. Custom Name';
$myCustomMail = 'admin@customdomain.me"';
$curlPostfields['sender']['name'] = $myCustomName;
$curlPostfields['sender']['name'] = $myCustomMail;
现在你可以把数组转换回JSON字符串,json_encode
将处理所有的双引号和东西。
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlPostfields));