<?php
if (isset($_POST['send']))
{
$email = $_POST['email'];
$subject = $_POST['subject'];
$body = $_POST['message'];
$data = array(
"personalizations" => array(
array(
"to" => array(
array(
"email" => $email,
"name" => $name
)
)
)
) ,
"from" => array(
"email" => $sender
) ,
"subject" => $subject,
"content" => array(
array(
"type" => "text/html",
"value" => $body
)
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.sendgrid.com/v3/mail/send");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
}
?>
Я использую API Sendgrid для отправки электронных писем с помощью PHP.
Я могу отправить на один адрес электронной почты сразу, но
Мне нужно передать переменную $email
как основную часть писем
array(
"email" => $email,
"name" => $name
)
$email
переменная задает параметр как набор писем
пример: $email = "[email protected],[email protected],[email protected]"
Как мне это сделать?
Чего именно вы хотите добиться? Если какая-либо переменная должна быть указана в другом формате, что мешает вам изменить формат в вашем коде?
Хейхо Ги,
вы можете использовать implode() для преобразования массива в строку, чтобы вы получали свои электронные письма в виде массива, а затем вы могли бы сказать $email = implode(",", $emails);
, а $email будет [email protected],[email protected],[email protected]
. Но я в замешательстве, почему вы используете внешнюю компанию, чтобы расставить все точки над его! Вы можете сделать это локально на своей машине! Не делитесь слишком большим количеством данных с другими компаниями ;)
~ Тим
uVulpos Мне нужен был метод, противоположный вашему ответу, поэтому я использовал взорвать () для преобразования строки в массив Спасибо за ответ
а) explode()
значение электронной почты с ,
, чтобы преобразовать его в массив
б) Примените цикл к этому массиву и отправьте почту.
c) Обязательно проверяйте реальное значение вместо $_POST['send']
<?php
if (!empty($_POST['email']) && !empty($_POST['subject']))
{
$emails = explode(',',$_POST['email']);
$subject = $_POST['subject'];
$body = $_POST['message'];
foreach($emails as $email){
$data = array(
"personalizations" => array(
array(
"to" => array(
array(
"email" => $email,
"name" => $name
)
)
)
) ,
"from" => array(
"email" => $sender
) ,
"subject" => $subject,
"content" => array(
array(
"type" => "text/html",
"value" => $body
)
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.sendgrid.com/v3/mail/send");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
}
}
?>
Спасибо, брат, ты снял мой стресс :)
@Gihan рад помочь вам. Кстати, API Sendgrid дает возможность отправлять несколько электронных писем за один раз, а не зацикливаться (но то, что я получил в ходе исследований, заключается в том, что эта услуга платная). Вы также можете посмотреть на это
<?pre
разве так не должно быть<?php
? Также: вы уверены, чтоisset($_POST['send'])
оценивается как true?