Могу ли я использовать SES от Amazon с Symfony2 и Swiftmailer Bundle? - PullRequest
7 голосов
/ 08 февраля 2012

У меня на Amazon ec2 работает сайт с 64-битной версией CentOS.

На сайте есть простая Форма обратной связи , для отправки которой необходимо отправить электронное письмо на несколько адресов (довольно просто).

Кто-нибудь использовал Amazon SES с Symfony2 и Swiftmailer Bundle? И если да, то вы рекомендуете использовать SES или более традиционный почтовый сервер для этого типа задач?

Ответы [ 6 ]

13 голосов
/ 04 декабря 2012

Можно отправлять электронную почту через SES с собственным транспортом SMTP, поставляемым с библиотекой swiftmailer.Приведенные ниже примеры были протестированы с использованием версии 4.2.2.

Amazon SES требует использования шифрования TLS .

Swift_SmtpTransport Транспортный класс можно настроить на использование шифрования TLS путем передачи tls в качестве третьего аргумента конструктора:

require_once './vendor/swiftmailer/swiftmailer/lib/swift_required.php';

// Create the Transport
$transport = Swift_SmtpTransport::newInstance(
        'email-smtp.us-east-1.amazonaws.com', 
        25, 
        'tls'
    )
    ->setUsername('AWS_ACCESS_KEY')
    ->setPassword('AWS_SECRET_KEY')
;

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

// Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
    ->setFrom(array('example@example.org'))
    ->setTo(array('example@example.org' => 'John Doe'))
    ->setBody('Here is the message itself')
;

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

В Symfony2 вы можете настроить службу swiftmailer на использование шифрования TLS:

# app/config/config.yml
swiftmailer:
    transport:  smtp
    host:       email-smtp.us-east-1.amazonaws.com
    username:   AWS_ACCESS_KEY
    password:   AWS_SECRET_KEY
    encryption: tls

Отправка писем напрямуюиз почтового сервера, установленного на экземпляре EC2, не очень надежен, так как IP-адреса EC2 могут быть в черном списке.Рекомендуется использовать доверенный почтовый сервер, поэтому использование SES представляется хорошей идеей.

8 голосов
/ 16 марта 2014

Отправка писем через SES через Symfony2 не работала для меня "из коробки", потому что в моем config.yml была настроена опция spool .

Другой проблемой, с которой я столкнулся, был порт. Порты 25 и 587 работают отлично, но 465 дает мне тайм-аут.

И важно, что вы используете правильный SMTP-сервер, сначала я использовал us-east-1 (потому что я скопировал его из примера), хотя мой SMTP на самом деле был email-smtp.eu-west-1.amazonaws .com

Итак, вот мой текущий конфиг:

parameters:
    mailer_transport: smtp
    mailer_host: email-smtp.eu-west-1.amazonaws.com
    mailer_user: AWS_ACCESS_KEY
    mailer_password: AWS_SECRET_KEY
    mailer_encryption: tls
    mailer_port: 587

swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%
    encryption: "%mailer_encryption%"
    port: %mailer_port%
    auth_mode:  login

Я нашел проблему, выполнив в моей командной строке следующее:

php app/console swiftmailer:debug
2 голосов
/ 02 февраля 2013

Существует готовая транспортная система SES для быстрой доставки. Очень легко настроить:

https://github.com/jmhobbs/Swiftmailer-Transport--AWS-SES

1 голос
/ 06 марта 2012

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

 require_once 'lib/swift_required.php';

  //Create the Transport
  $transport = new Swift_AWSTransport(
    'AWS_ACCESS_KEY',
    'AWS_SECRET_KEY'
  );

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

  //Create the message
  $message = Swift_Message::newInstance()
  ->setSubject("What up?")
  ->setFrom(array('you@yourdomain.com'))
  ->setTo(array('them@theirdomain.com'))
  ->setBody("

Чтобы получить ключ, перейдите в Консоль управления AWS ">" Настройки SMTP ">" Создать мои учетные данные SMTP "

И вам нужно установить это расширение:

https://github.com/jmhobbs/Swiftmailer-Transport--AWS-SES

но я повторяю, это только информация. Теперь вам необходимо подтвердить свою учетную запись электронной почты в консоли управления AWS, а затем она должна работать.

1 голос
/ 15 февраля 2012

Если вы можете придерживаться ограничений бесплатного уровня (2K ежедневных сообщений), я бы определенно рекомендовал вам придерживаться SES вместо традиционного почтового сервера. Это просто, легко интегрируется с большинством платформ, и вы устраняете затраты на обслуживание и эксплуатацию (хотя они и небольшие, но все же есть) для вашего почтового сервера. Конечно, при использовании SES все еще существуют расходы на передачу данных, как вы можете видеть на стоимости Amazon SES , но это также может соответствовать вашим потребностям.

0 голосов
/ 18 июля 2019

Просто добавьте 'tls' в качестве третьего параметра. Работает отлично Пример:

// Create the Transport
$transport = (new Swift_SmtpTransport('amazon-url', 587, 'tls'))
->setUsername('awsusernamexxxxxx')
->setPassword('awspasswordxxxxxx');
// Other codings
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...