Я использую SendGrid v3 api с библиотекой php, чтобы попытаться отправить нескольким получателям как часть функции WordPress. Я могу успешно отправлять электронные письма, используя образец кода SendGrid и жесткое кодирование нескольких получателей. Тем не менее, когда я запрашиваю базу данных, чтобы попытаться создать список адресов электронной почты: он всегда терпит неудачу с ошибкой 400. Вот код SendGrid, с которым я работаю. Он отлично работает с живыми данными и жестко закодирован. Тем не менее я не могу правильно построить массив $ tos из моего запроса к базе данных. Я прочитал документацию и все учебники, которые я могу найти. Я также связался с поддержкой Sendgrid.
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$tos = [
"[email protected]" => "Example User1",
"[email protected]" => "Example User2",
"[email protected]" => "Example User3"];
$email->addTos($tos);
$email->setSubject("Sending with SendGrid is Fun");
$email->addContent("text/plain", "and easy to do anywhere, even with PHP");
$email->addContent(
"text/html", "<strong>and easy to do anywhere, even with PHP</strong>");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
Вот мой запрос WordPress: $ send = $ wpdb-> get_results («SELECT * FROM» test
«);
Как правильно кодировать переменную $ tos из моего запроса к базе данных, чтобы $ email-> addTos ($ tos) не выдавал ошибку?
Благодарю.
В соответствии с эта страница, addTos
функция больше не поддерживается и больше не поддерживается в API SendGrid: addTos()
метод был перенесен в addTo()
и в настоящее время не поддерживает передачу массивов в «.
Следовательно:
Используя ваш test
база данных:
$email = new \SendGrid\Mail\Mail();
$email->setFrom("[email protected]", "Example User");
$userResults = $wpdb->get_results( "SELECT `email` FROM `test`", ARRAY_A ); //Select as Associative Array
foreach($userResults as $userKey => $userValue){
$userEmail = $userValue['email']);
if ( is_email( $userEmail ) ) { //Validate properly formatted email structure
$email->addTo($userValue['email']); // If you hade a name column you could use: $email->addTo($userValue['email'], $userValue['name']);
}
}
$email->setSubject("Sending with SendGrid is Fun");
$email->addContent("text/plain", "and easy to do anywhere, even with PHP");
$email->addContent(
"text/html", "<strong>and easy to do anywhere, even with PHP</strong>");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
print $response->statusCode() . "\n";
print_r($response->headers());
print $response->body() . "\n";
} catch (Exception $e) {
echo 'Caught exception: '. $e->getMessage(). "\n";
}
С помощью wp_users
база данных:
$userResults = $wpdb->get_results( "SELECT `user_email`, `user_nicename` FROM `wp_users`", ARRAY_A );
foreach($userResults as $userKey => $userValue){
$email->addTo($userValue['user_email'], $userValue['user_nicename']);
}
Других решений пока нет …