Я использую SMTP Sendinblue в своем проекте PHP, и я хочу отправлять электронные письма с транзакциями в динамический список электронных писем, проблема в том, что у меня есть синтаксическая ошибка, когда я использую переменную вместо строки. Например, такой код отлично работает:
include 'Mailin.php';
$mailin = new Mailin('[email protected]', 'key');
$mailin->
addTo(
array(
'[email protected]' => '', '[email protected]' => '', '[email protected]' => ''
)
)->
setFrom('[email protected]', 'Test')->
setReplyTo('[email protected]', 'Test')->
setSubject('Example')->
setText('Test')->
setHtml($htmlContent);
$res = $mailin->send();
print_r($res);
Но если я использую переменную вместо Strings в "addTo Array", это показывает синтаксическую ошибку, например:
$customers = '';
foreach ($clientes as $customer) {
for ($i=1; $i < 41; $i++) {
if ($customer['email'.$i] != "" or $customer['email'.$i] != NULL) {
$customers .= "'".$customer['email'.$i]. "' => '', " ; //for each customer's email add the email in " '[email protected]' => '', " format
}
}
}
$customers = substr($customers, 0, -2); //removes last space and comma of the String
include 'Mailin.php';
$mailin = new Mailin('[email protected]', 'key');
$mailin->
addTo(
array(
$customers
)
)->
setFrom('[email protected]', 'Test')->
setReplyTo('[email protected]', 'Test')->
setSubject('Example')->
setText('Test')->
setHtml($htmlContent);
$res = $mailin->send();
print_r($res);
Если я использую функцию Print_r ($ customers), она показывает точную строку, которую я использовал в моем первом примере, даже если я использую код:
$text = "'[email protected]' => '', '[email protected]' => '', '[email protected]' => ''";
if ($customers == $text) {
print_r("Yes");
}else{
print_r("No");
}
Результат - «Да», но когда я использую переменную в
addTo(
array(
$customers
)
)->
показывает ошибку, но если я использую строку напрямую, электронное письмо отправляется
addTo(
array(
'[email protected]' => '', '[email protected]' => '', '[email protected]' => ''
)
)->
И я не знаю, почему он показывает ошибку, если в переменной $ customers есть нужная строка.
Вы знаете, как использовать переменную в электронных письмах, которые мне нужно отправить?
Какую ошибку вы получаете? Также вы можете подумать о создании массива, а не о предоставлении электронных писем в виде строки
Потому что Sendinblue принимает только этот формат
Ошибка: {"результат": ложь, "код": 501, "сообщение": "Невозможно отправить электронное письмо. Сообщение об исключении: Ошибка: неверный синтаксис адреса получателя.", "Данные": {"идентификатор-сообщения": ""}}
Вы не создаете массив, объединяя строки с =>
в них. Чтобы создать элемент в ассоциативном массиве, просто присвойте этому массиву индекс.
$customers = [];
foreach ($customers as $customer) {
for ($i = 1; $i < 41; $i++) {
if (!empty($customer["email" . $i])) {
$customers[$customer["email" . $i]] = "";
}
}
}
include 'Mailin.php';
$mailin = new Mailin('[email protected]', 'key');
$mailin->
addTo($customers)->
...
Также см. Почему проверка на равенство одной переменной нескольким значениям всегда возвращает истину?, почему вам следовало использовать &&
, а не ||
, когда вы пропускали пустые электронные письма (что я упростил, используя !empty()
).
Почему бы просто не построить массив
$customer
вместо строки?