2017-05-05 3 views
0

J'essaie de passer notre application Rails à utiliser le service SES d'Amazon pour l'envoi par courrier électronique. L'application utilise Ruby 1.8.6 et Rails 2.2.2.Amazon SES: Dit qu'il est envoyé des e-mails de test, mais ils n'arrivent pas

SES nécessite des e-mails à utiliser le protocole TLS (cryptage de style ssl), qui ne sont pas pris en charge dans Ruby 1.8.6, mais je l'ai trouvé un petit bijou à patcher, ici: https://github.com/seattlerb/smtp_tls

Je suis test l'envoi d'un e-mail de ma console, comme ceci:

options = { 
    :address => "email-smtp.eu-west-1.amazonaws.com", 
    :port => 587, 
    :user_name => "my-ses-smtp-username", 
    :password => "my-ses-smtp-password", 
    :authentication => :login 
    } 


smtp = Net::SMTP.new options[:address], options[:port] 
smtp.enable_starttls 
smtp.start Socket.gethostname, options[:user_name], options[:password], options[:authentication] do |server| 
    server.send_message "subject: hello\nblah blah\n\n", "[email protected]", "[email protected]" 
end 

« [email protected] » et « [email protected] » ont tous deux été vérifiées sur SES, et « ourdomain.com » est là notre domaine enregistré .

Je suis en mode Sandbox sur SES et j'ai envoyé des e-mails aux adresses vérifiées en utilisant leur propre console de test par e-mail.

La page de statistiques sur SES répertorie un e-mail envoyé, bien que les graphes de chronologie ci-dessous indiquent en réalité qu'il y a eu 6 livraisons et un report. De toute façon je m'attendrais à voir quelque chose venir, mais rien n'a.

J'ai mis une exploitation forestière dans Net :: SMTP pour voir ce qui se passe à la demande ci-dessus, et il ne semble OK, de ma connaissance limitée:

net/smtp.rb:672:in `check_response': res = "220 email-smtp.amazonaws.com ESMTP SimpleEmailService-2007935501 vtiBU5pQUlPZ3bAZIaZl\n", allow_continue = false 
net/smtp.rb:648:in `getok': fmt = "EHLO %s"; args = ["max-thinkpad-linux"] 
net/smtp.rb:672:in `check_response': res = "250-email-smtp.amazonaws.com\n250-8BITMIME\n250-SIZE 10485760\n250-STARTTLS\n250-AUTH PLAIN LOGIN\n250 Ok\n", allow_continue = false 
net/smtp.rb:648:in `getok': fmt = "STARTTLS"; args = [] 
net/smtp.rb:672:in `check_response': res = "220 Ready to start TLS\n", allow_continue = false 
net/smtp.rb:648:in `getok': fmt = "EHLO %s"; args = ["max-thinkpad-linux"] 
net/smtp.rb:672:in `check_response': res = "250-email-smtp.amazonaws.com\n250-8BITMIME\n250-SIZE 10485760\n250-STARTTLS\n250-AUTH PLAIN LOGIN\n250 Ok\n", allow_continue = false 
net/smtp.rb:672:in `check_response': res = "334 VXNlcm5hbWU6\n", allow_continue = true 
net/smtp.rb:672:in `check_response': res = "334 UGFzc3dvcmQ6\n", allow_continue = true 
net/smtp.rb:648:in `getok': fmt = "MAIL FROM:<%s>"; args = ["[email protected]"] 
net/smtp.rb:672:in `check_response': res = "250 Ok\n", allow_continue = false 
net/smtp.rb:648:in `getok': fmt = "RCPT TO:<%s>"; args = ["[email protected]"] 
net/smtp.rb:672:in `check_response': res = "250 Ok\n", allow_continue = false 
net/smtp.rb:672:in `check_response': res = "354 End data with <CR><LF>.<CR><LF>\n", allow_continue = true 
net/smtp.rb:672:in `check_response': res = "250 Ok 0102015bd896c863-02370584-903e-4c64-b5a0-5c5c5dcc28c6-000000\n", allow_continue = false 
net/smtp.rb:648:in `getok': fmt = "QUIT"; args = [] 
net/smtp.rb:672:in `check_response': res = "221 Bye\n", allow_continue = false 
+0

Avez-vous réussi l'authentification? Je ne vois pas une section d'authentification nettoyée dans la sortie. https://en.wikipedia.org/wiki/SMTP_Authentication – ddubs

+0

L'auth fonctionne - si je change le mot de passe, je reçois un message d'échec. Peut-être parce que l'option d'authentification est définie sur "connexion", elle est différente de ce que vous attendiez? –

Répondre

0

Le problème est avéré être le format de ma partie "Message".

Il semble que même si je passe la et pour remédier à la méthode send_message, ils doivent aller dans le message comme en-têtes de messagerie standard ainsi: mise en place comme ce qui suit fait le travail:

from = "[email protected]" 
to = "[email protected]" 

message = <<HEREDOC 
Subject: hello 
From: #{from} 
To: #{to} 

Blah Blah Blah 
HEREDOC 

smtp = Net::SMTP.new options[:address], options[:port] 
smtp.enable_starttls 
smtp.start Socket.gethostname, options[:user_name], options[:password], options[:authentication] do |server| 
    server.send_message message, from, to 
end 

Finalement, ce sera utilisé par ActionMailer, qui fera tout ça pour moi. Mais c'était la première étape du test-dans-la-console qui me faisait trébucher.