Массовая рассылка электронной почты Sendgrid не могла отправить PHP

<?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]"

Как мне это сделать?

<?pre разве так не должно быть <?php? Также: вы уверены, что isset($_POST['send']) оценивается как true?
Definitely not Rafal 11.12.2020 11:54

Чего именно вы хотите добиться? Если какая-либо переменная должна быть указана в другом формате, что мешает вам изменить формат в вашем коде?

Nico Haase 11.12.2020 11:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Хейхо Ги,

вы можете использовать implode() для преобразования массива в строку, чтобы вы получали свои электронные письма в виде массива, а затем вы могли бы сказать $email = implode(",", $emails);, а $email будет [email protected],[email protected],[email protected]. Но я в замешательстве, почему вы используете внешнюю компанию, чтобы расставить все точки над его! Вы можете сделать это локально на своей машине! Не делитесь слишком большим количеством данных с другими компаниями ;)

~ Тим

uVulpos Мне нужен был метод, противоположный вашему ответу, поэтому я использовал взорвать () для преобразования строки в массив Спасибо за ответ

Gihan 11.12.2020 15:24
Ответ принят как подходящий

а) 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 11.12.2020 15:19

@Gihan рад помочь вам. Кстати, API Sendgrid дает возможность отправлять несколько электронных писем за один раз, а не зацикливаться (но то, что я получил в ходе исследований, заключается в том, что эта услуга платная). Вы также можете посмотреть на это

Alive to die - Anant 14.12.2020 07:55

Другие вопросы по теме