отправлять почту через sendgrid

Я пытаюсь отправить почту через sendgrid, вот мой код:

// Setup Swift mailer parameters
        $transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 25);
        $transport->setUsername($username);
        $transport->setPassword($password);
        $swift = Swift_Mailer::newInstance($transport);

        // Create a message (subject)
        $message = new Swift_Message($subject);

        // attach the body of the email
        $message->setFrom($from);
        $message->setBody($html, 'text/html');
        $message->setTo($to);
        $message->addPart($text, 'text/plain');

        // send message
        if ($recipients = $swift->send($message, $failures))
        {              
          // This will let us know how many users received this message
          echo 'Message sent out to '.$recipients.' users';exit;
        }

Я получил эту ошибку: Swift_TransportException

Ожидаемый код ответа 250, но получен код "", с сообщением ""

...\swiftMailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php(422)

пожалуйста, помогите мне !


person BKF    schedule 04.01.2012    source источник
comment
По вопросам поддержки обращайтесь к поставщику библиотеки.   -  person hakre    schedule 04.01.2012


Ответы (5)


Попробуйте отправить сообщение в одну строку, чтобы увидеть, работает ли это или возвращает другую ошибку. Если он возвращает ошибку, это, вероятно, проблема с сервером или аутентификацией.

$result = $swift->send($message);

Если это сработает, вы можете попробовать приведенный ниже код, и если он сработает, настройте его так, чтобы он показывал ваших получателей, а не отказы.

if (!$swift->send($message, $failures))
{
  echo "Failures:";
  print_r($failures);
}

Кроме этого, проверьте, не пусты ли все переменные.

Дополнительные примеры см. на странице http://swiftmailer.org/docs/sending.html#quick-reference-for-sending-a-message

ОБНОВЛЕНИЕ

Код отправки:

//Create the Transport
$transport = Swift_MailTransport::newInstance();

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Subject')
  ->setFrom(array('[email protected]' => 'John Doe'))
  ->setTo(array('[email protected]', '[email protected]' => 'A name'))
  ->setBody('Here is the message itself')
  ;

//Send the message
$numSent = $mailer->send($message);

printf("Sent %d messages\n", $numSent);
person mat    schedule 04.01.2012
comment
спасибо за помощь, но это не работает :( может быть какие-то параметры конфигурации не в порядке? - person BKF; 04.01.2012
comment
Вы получили другую ошибку или ту же самую? Ваш код выглядит нормально, возможно, вам следует сначала попробовать функцию sendmail, чтобы убедиться, что это проблема с сервером. Я обновлю свой пост с кодом. - person mat; 04.01.2012
comment
Он работает по этому коду: $transport = Swift_MailTransport::newInstance(); но я не получаю почту! это значит ?? - person BKF; 04.01.2012
comment
Вероятно, это означает, что smtp.sendgrid.net не поддерживается на вашем сервере (внешних хостах) и mail() по какой-то причине не доставляется. Можно ли просто отправить почту следующим образом: mail([email protected], тема, сообщение, FROM: [email protected]); - person mat; 04.01.2012
comment
Вы должны спросить своего хоста, почему SMTP не работает. Если вы нашли мою помощь полезной, пожалуйста, примите мой ответ. - person mat; 04.01.2012
comment
Вероятно, это означает, что smtp.sendgrid.net не поддерживается на вашем сервере (внешних хостах). спасибо мат это проблема - person BKF; 04.01.2012

(полное раскрытие: я работаю в SendGrid веб-разработчиком)

Недавно мы выпустили новую библиотеку PHP, которая может решить некоторые из этих проблем. Мы по-прежнему используем Swift, но, насколько я помню, библиотека теперь настраивает все это за вас, что немного упрощает запуск.

Не стесняйтесь обращаться к нам за помощью, тоже!

http://github.com/sendgrid/sendgrid-php

person iandouglas    schedule 27.03.2012
comment
классно. Однако я не нашел здесь, как узнать, было ли отправлено электронное письмо, и если нет, то как получить ошибки :( - person Dvid Silva; 30.06.2013
comment
Для этого вам нужно установить конечную точку для получения информации из системы уведомлений о событиях SendGrid. Мы будем пинговать эту конечную точку на каждом этапе пути (если вы включите пакетный режим, он будет ставить в очередь пакет JSON для отправки каждую минуту или около того, если вы отправляете много электронной почты). Данные JSON, если они отскакивают/и т. д., также должны возвращать ошибку. Ознакомьтесь с sendgrid.com/docs/API_Reference/Webhooks/event.html. - person iandouglas; 06.08.2013

два ответа:

  1. у вас могут быть неверные данные аутентификации

  2. ваша учетная запись все еще может быть подготовлена, поэтому вам нужно немного подождать, пока она будет полностью активирована.

so

  • проверьте все данные аутентификации из app/config/mail.php на соответствие данным из https://sendgrid.com/docs/Integrate/index.html

  • проверьте также, чтобы в вашей учетной записи sendgrid не было верхнего сообщения/уведомления, например:

Ваша учетная запись все еще инициализируется, возможно, вы не сможете отправлять электронные письма.

person ungalcrys    schedule 28.11.2014

У меня просто такое же сообщение об ошибке с моей конфигурацией Symfony 2 для sendgrid. Надеюсь, вы видели это руководство: http://docs.sendgrid.com/documentation/get-started/integrate/examples/symfony-example-using-smtp/

Попробуйте изменить порт на 587. Дайте мне знать, что это работает.

person Sasha Lavasov    schedule 04.01.2012
comment
smtp.sendgrid.net не поддерживается на моем сервере (внешние хосты) - person BKF; 04.01.2012

Может быть, вы слишком быстро? Я столкнулся с той же проблемой после запуска с помощью sendgrid, а теперь с веб-API я получил реальную ошибку «отключена учетная запись» ...

Я не читал полный текст после первого входа в систему - они сначала проверят учетную запись, пока она не будет активирована... хорошо, так что я жду ^^

person jebbie    schedule 20.06.2013