2012-02-07 13 views
7

Hostuję witrynę na ec2 Amazona z 64-bitową wersją CentOS.Czy mogę używać Amazon SES z Symfony2 i pakietem Swiftmailer?

Witryna ma prosty Skontaktuj się z nami formularz, który musi wysłać wiadomość e-mail na kilka adresów, gdy zostanie przesłana (dość proste).

Czy ktoś użył SES Amazon z Symfony2 i pakietem Swiftmailer? A jeśli tak, czy zaleca się używanie SES lub bardziej tradycyjnego serwera poczty e-mail do tego typu zadań?

+0

Jak teraz wymagane jest, aby zarządzać odbija i skarg, jesteś ca n do tego celu użyj pakietu AWS SES Monitor. Zapewnia również kilka przydatnych poleceń do automatyzacji tworzenia tematów, aby otrzymywać powiadomienia za pośrednictwem SNS AWS o odskokach, reklamacjach i dostawach. Pakiet to github.com/Aerendir/aws-ses-monitor-bundle. Mam nadzieję, że to pomoże. – Aerendir

Odpowiedz

1

Jeśli możesz trzymać się limitów darmowych poziomów (wiadomości 2K dziennie), zdecydowanie polecam trzymać się SES zamiast tradycyjnego serwera e-mail. Jest łatwa i łatwa do zintegrowania z większością platform, a także eliminuje koszty utrzymania i eksploatacji (mimo że wciąż są małe) dla serwera poczty e-mail. Oczywiście, nadal istnieją koszty przesyłania danych podczas korzystania z SES, jak widać na Amazon SES pricing, ale to może również pasować do twoich potrzeb.

1

Od grudnia 2011 można używać smtp z switfmail, ale wcześniej Problem polegał na tym, że ten pakiet nadal nie ma implementacji do pracy nad EC2, ale już istnieje. Jeżeli chcesz wysłać e-maile z jakimś ram jak switfmail trzeba mieć hasło i klucz, a zrobić coś takiego:

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('[email protected]')) 
    ->setTo(array('[email protected]')) 
    ->setBody(" 

Aby wziąć klucz do środka AWS Management Console „>«Ustawienia SMTP»>” Utwórz moje poświadczenia SMTP”

i będziesz potrzebował zainstalować to rozszerzenie.

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

ale repet to tylko informacja teraz należy zweryfikować swoje konto e-mail przed Zarządzania w AWS Console i później powinny działać.

11

Możliwe jest wysyłanie wiadomości e-mail przez SES z natywnym transportem SMTP dostarczonym z biblioteką Swiftmailer. Poniższe przykłady zostały przetestowane przy użyciu wersji 4.2.2.

Amazon SES .

klasa Swift_SmtpTransport transportu może być skonfigurowany do korzystania z szyfrowania TLS przekazując TLS jako trzeci argument konstruktora:

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('[email protected]')) 
    ->setTo(array('[email protected]' => 'John Doe')) 
    ->setBody('Here is the message itself') 
; 

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

W Symfony2, można skonfigurować usługę swiftmailer używać szyfrowania 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 

Wysyłanie wiadomości e-mail bezpośrednio z serwera pocztowego zainstalowanego na instancji EC2 nie jest niezawodne, ponieważ adresy IP EC2 mogą być umieszczone na czarnej liście. Zaleca się używanie zaufanego serwera pocztowego, więc używanie SES wydaje się być dobrym pomysłem.

7

Wysyłanie maili przez SES poprzez Symfony2 nie działa po wyjęciu z pudełka dla mnie, bo miałem opcję szpulki skonfigurowany w moim config.yml.

Innym problemem, na który natrafiłem, był port. Port 25 i 587 działają perfekcyjnie, ale dostałam timeout.

Ważne jest, aby używać właściwego serwera SMTP, początkowo korzystałem z nas-east-1 (ponieważ skopiowałem go z przykładu), chociaż mój SMTP faktycznie był email-smtp.eu-west-1. amazonaws.com

Więc oto mój obecny config:

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 

znalazłem problem, wykonując następujące czynności w moim wierszu poleceń:

php app/console swiftmailer:debug 
+1

Wygląda na to, że użycie portu 465 daje w wyniku '[Swift_TransportException] Nie można ustanowić połączenia z pocztą hosta-smtp.us-east-1.amazonaws.com [Połączenie przekroczyło limit # 110]' zmiana na port 587 powoduje naprawę problemu –

+0

Dzięki dla sztuczki '' 587''! Również miałem czas oczekiwania na '' 487'' – Cassiano

Powiązane problemy