我尝试使用Sendinblue,使用API V3和php发送事务电子邮件。
我试着遵循文档https://github.com/sendinblue/APIv3-php-library我读过很多关于Stackoverflow的文章,比如这样一篇:我如何在Sendinblueapiv3中设置事务性电子邮件属性?。
我不知道如何用composer生成vendor/autoload.php,所以我下载了sendinblue/api-v3-sdk(sendinblue官方提供的RESTFul api V3php库(https://php-download.com.
我测试过这些线路:
<?php
require_once('/vendor/autoload.php');
$config = SendinBlueClientConfiguration::getDefaultConfiguration()->setApiKey('api-key', 'xkeysib-my-key');
$apiInstance = new SendinBlueClientApiTransactionalEmailsApi(
new GuzzleHttpClient(),
$config
);
$sendSmtpEmail = new SendinBlueClientModelSendSmtpEmail();
$sendSmtpEmail['subject'] = 'Le sujet';
$sendSmtpEmail['htmlContent'] = '<html><body><h1>This is a transactional email </h1></body></html>';
$sendSmtpEmail['sender'] = array('name' => 'John Doe', 'email' => 'contact@domain.com');
$sendSmtpEmail['to'] = array(
array('email' => 'autre@domain2fr', 'name' => 'Jane Doe')
);
$sendSmtpEmail['replyTo'] = array('email' => 'replyto@domain.com', 'name' => 'John Doe');
$sendSmtpEmail['headers'] = array('Some-Custom-Name' => 'unique-id-1234');
$sendSmtpEmail['params'] = array('parameter' => 'My param value', 'subject' => 'New Subject');
try {
$result = $apiInstance->sendTransacEmail($sendSmtpEmail);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TransactionalEmailsApi->sendTransacEmail: ', $e->getMessage(), PHP_EOL;
}
?>
我有以下错误:
分析错误:语法错误,意外的"?",应为D:中的变量(T_variable(。。。\sendinblueV3\vendor\guzzlehttp\guzzle \src\Client.php,位于第203行
因为这条线路
$apiInstance = ....
所以我删除了"在Client.php的第203行:
public function getConfig(?string $option = null)
然后,我又犯了一个错误:
分析错误:语法错误,意外的"const"(T_const(,在第19行的D:\Dropbox\www\ifrb\IFRBTP77\sendinblueV3\vendor\guzzlehttp\guzzle \src\ClientInterface.php中应为变量(T_variable(
如果有人知道问题出在哪里。。。。
谢谢,奥利维尔。
编辑:
我已经按照@David Wolf的建议安装了作曲家。但是当运行时
C:\Windows\System32>composer需要sendinblue/api-v3-sdk";8.x.x">
我有一个错误,由于我的php版本:
./composer.json has been created Running composer update
sendinblue/api-v3-sdk Loading composer repositories with package
information Updating dependencies Your requirements could not be
resolved to an installable set of packages.
Problem 1
- guzzlehttp/guzzle[7.4.0, ..., 7.4.1] require php ^7.2.5 || ^8.0 -> your php version (5.6.18) does not satisfy that requirement.
- sendinblue/api-v3-sdk v8.0.0 requires guzzlehttp/guzzle ^7.4.0 -> satisfiable by guzzlehttp/guzzle[7.4.0, 7.4.1].
- Root composer.json requires sendinblue/api-v3-sdk 8.x.x -> satisfiable by sendinblue/api-v3-sdk[v8.0.0].
这很奇怪,因为API v3 Php库需要Php 5.6及更高版本。
而且我无法在我的服务器上升级py.php版本。
我在生产服务器中使用下面的代码和来自PHP的简单的CURL,并且运行良好。使用composer,我很难管理库依赖关系,最终使用简单的CURL解决了这个问题。
// ********** API EMAIL START **************
$toName = 'TO NAME';
$toEmail = 'TO EMAIL';
$fromName = 'FROM NAME';
$fromEmail = 'FROM EMAIL';
$subject = 'TEST SUBJECT';
$htmlMessage = '<p>Hello '.$toName.',</p><p>This is my first transactional email sent from Sendinblue.</p>';
$data = array(
"sender" => array(
"email" => $fromEmail,
"name" => $fromName
),
"to" => array(
array(
"email" => $toEmail,
"name" => $toName
)
),
"subject" => $subject,
"htmlContent" => '<html><head></head><body><p>'.$htmlMessage.'</p></p></body></html>'
);
$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, json_encode($data));
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'Api-Key: YOUR API KEY';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
/*
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
print_r($result);
*/
// ********* EMAIL API END **********************
下载API包装器无法工作,因为它本身有依赖项(它依赖的其他代码(,而您尚未安装这些依赖项。
归档您正在尝试做的事情的最简单和最佳实践方法是使用composer。
- 下载并安装composer
- 运行
composer require sendinblue/api-v3-sdk "8.x.x"
最后一个命令将自动为您安装所有依赖项并生成所需的自动加载器。
如果你是作曲家的新手,我建议你查看作曲家网站上的入门部分。