2011-12-20 13 views
12

मेरे पास एक रेल ऐप है जो एसएमटीपी के माध्यम से अमेज़ॅन एसईएस का उपयोग करने के लिए कॉन्फ़िगर किया गया है। जब मैं ईमेल की कोशिश करता हूं और भेजता हूं, हालांकि, यह एक मिनट के बाद टाइमआउट लगता है, और मुझे एक ईओएफईआरर मिलता है। यह एक कॉन्फ़िगरेशन समस्या की तरह गंध करता है - ईमेल ठीक से बनाया गया प्रतीत होता है, और मैं स्वयं को एडब्ल्यूएस एसईएस कंसोल से टेस्ट ईमेल भेज सकता हूं। इस sandbox मोड में है, और अनुप्रयोग विकास मोड में चल रहा है, लेकिन दोनों भेजने और प्राप्त ईमेल एसईएस के साथ सत्यापित किया गया है, और development.rb इस के साथ की स्थापना की है:EOFError त्रुटि रेल के साथ एसएमटीपी के माध्यम से अमेज़ॅन एसईएस का उपयोग करने की कोशिश कर रही है 3.1.3

config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 

मैं एक कोशिश की है लाख विन्यास विविधताएं; यह मुझे केले ड्राइव शुरू कर रहा है। कोई मदद या मार्गदर्शन बहुत सराहना की जाएगी। अधिक विवरण:

smtp config, जो मैं एक प्रारंभकर्ता में है:

ActionMailer::Base.smtp_settings = { 
    :address  => "email-smtp.us-east-1.amazonaws.com", 
    :port   => "465", 
    :authentication => :plain, 
    :enable_starttls_auto => true, 
    :user_name  => "1234", 
    :password  => "abcde" 
} 

त्रुटि के साथ करता है, तब थोड़ा संक्षिप्तता के लिए छोटे किए गए:

Sent mail to [email protected] (59929ms) 
Date: Tue, 20 Dec 2011 03:08:37 -0800 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: Your invitation to Phu 
Mime-Version: 1.0 
Content-Type: text/html; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 

<!DOCTYPE html> 
.... 

Completed 500 Internal Server Error in 60564ms 

EOFError (end of file reached): 
    app/controllers/admin_controller.rb:61:in `block in send_invite' 
    app/controllers/admin_controller.rb:46:in `send_invite' 
+0

अपने आईएसपी अनुमति नहीं है पोर्ट 465 पर आउटबाउंड कनेक्शन? क्या आप एक सामान्य मेल क्लाइंट के साथ अपने अमेज़ॅन smtp क्रेडेंशियल्स का उपयोग कर सकते हैं? –

+0

क्या आपको यह काम करने के लिए मिला? क्योंकि मेरे पास एक ही समस्या है ... – Morten

+0

इसे अभी तक काम नहीं मिला है - जीएमएम का उपयोग करके जीएम का उपयोग करके समाप्त हो गया, जो कि समय के लिए काफी अच्छा था। मैं नीचे मिहिर के समाधान का प्रयास करूंगा और वापस रिपोर्ट करूंगा (और अगर यह काम करता है तो जवाब स्वीकार करें)। फ्रेडरिक, मैं रेल के बाहर smtp का उपयोग करने में सक्षम था - यह मेरा स्वयं का सर्वर उदाहरण है, बंदरगाह खुले हैं। –

उत्तर

1

एसईएस से पहले एक एसएसएल सत्र की आवश्यकता है ईएचएलओ कमांड भेजा जाता है।

मुझे पता है System.Net.Mail एसईएस के साथ काम नहीं करता है, क्योंकि सिस्टम.Net.Mmail एसएमटीपी सत्र शुरू होने के बाद टीएलएस शुरू करता है।

+1

सुझाव के लिए धन्यवाद, लेकिन अगर मैं [यह प्रतिबद्धता] पढ़ रहा हूं (https://github.com/rails/rails/commit/732c724df61bc8b780dc42817625b25a321908e4) सही ढंग से, एक्शनमेलर (System.Net.Mail के समतुल्य रेल) ​​टीएलएस शुरू करता है सत्र शुरू करने से पहले। –

1

मैं रूबी 1.8.7 के साथ रेल 2.3 का उपयोग करके एक ही समस्या में भाग गया, एक सैंडबॉक्स वाले एसईएस खाते के साथ देव मोड में, सत्यापित प्रेषकों को/से भेज रहा था।

मैंने unofficial aws-ses gem में जोड़कर इसके आसपास काम किया। अपने Gemfile में चिपका, और फिर इन 5 लाइनों के साथ SMTP सेटिंग बदल देते हैं:

# Configure mail sending options: Use AWS-SES for all environments 
    config.after_initialize do 
    ActionMailer::Base.delivery_method = :amazon_ses 
    ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(:secret_access_key => 'asfd/1234', :access_key_id => 'ABCD') 
    end 

तो भेजा जा रहा है काम के रूप में उम्मीद है ... जो मुझे ईमेल के लिए खुद को हो रही है सही ढंग से स्थापित किए गए बताता है।

मैंने बहुत सारे गुगल किए हैं, और कोई पुष्टि नहीं देखी है कि एसईएस-एसएमटीपी रेल 2.3 + रूबी 1.8.7 के साथ संगत है। न ही मुझे कुछ भी मिला है जो स्पष्ट रूप से इसे अस्वीकार करता है, आपके & से परे मेरा अनुभव।

अगर आपको कोई समाधान मिल जाए तो हमें बताएं!

+0

धन्यवाद aws-ses मणि मेरे लिए काम किया! –

6

यहाँ मामले में एक समाधान आप एसएमटीपी (और नहीं एडब्ल्यूएस-एसईएस मणि)

http://blog.readypulse.com/2012/01/06/amazon-ses-smtp-emails-using-rails-3-1-in-three-easy-steps/

उपयोग करना चाहते हैं बातें नोट करने के लिए है

एडब्ल्यूएस एसएमटीपी केवल टीएलएस पर एडब्ल्यूएस एसएमटीपी करता है काम करता है STARTTLS का समर्थन नहीं करें ActionMailer की कॉन्फ़िगरेशन में कोई आसान TLS स्विच नहीं है।

अपने एडब्ल्यूएस कंसोल पर एसएमटीपी समर्थन सक्षम करने के लिए कदम - यहां निर्देश देखें। अपनी कॉन्फ़िगरेशन/प्रारंभकर्ता निर्देशिका के तहत प्रारंभकर्ता बनाएं। मैं इसे amazon_ses.rb पर कॉल कर रहा हूं और मनी पैच एक्शनमेलर की एसएमटीपी सेटिंग्स में निम्नलिखित कोड जोड़ता हूं।

module Net 
    class SMTP 
     def tls? 
      true 
     end 
    end 
end 

अपने विकास.आरबी और उत्पादन.आरबी फाइलों में निम्नलिखित कोड जोड़ें। अपने पर्यावरण से मेल खाने के लिए सेटिंग्स को संशोधित करें।

config.action_mailer.default_url_options = { host: “<example.com>” } 
config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    address: “email-smtp.us-east-1.amazonaws.com”, 
    port: 465, 
    domain: “<example.com>”, 
    authentication: :login, 
    user_name: “<your aws smtp username>”, 
    password: “<your aws smtp password>” 
} 
+0

जब मैं मॉड्यूल को मेल सेटिंग्स के रूप में उसी फ़ाइल में बदलता हूं तो मुझे यह काम मिल गया। – Morten

+0

मेरे लिए कोई भाग्य नहीं है। – mixonic

+3

(रेल 3.2 पर) मुझे प्रारंभिक फ़ाइल (शीर्ष 'मॉड्यूल नेट' के ऊपर) के शीर्ष पर' आवश्यकता 'नेट/smtp' जोड़ना पड़ा)। मुझे लगता है कि यह प्रारंभकर्ता लोड कर रहा था, और फिर बाद में वास्तविक पुस्तकालय लोड कर रहा था, बंदर पैच को ओवरराइड कर रहा था। –

10

वहाँ भी मिहिर से बंदर-पैच समाधान के बिना एक समाधान (जो, एडब्ल्यूएस एसईएस प्रलेखन, http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.Connecting.html के अनुसार, टीएलएस आवरण समाधान है), पोर्ट 587 और का उपयोग करना है: enable_starttls_auto विकल्प (STARTTLS समाधान)। तो संशोधित config इस तरह है:

config.action_mailer.default_url_options = { host: “<example.com>” } 
config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    :address: “email-smtp.us-east-1.amazonaws.com”, 
    :port: 587, 
    :domain: “<example.com>”, 
    :authentication: :login, 
    :user_name: “<your aws smtp username>”, 
    :password: “<your aws smtp password>”, 
    :enable_starttls_auto => true 
} 
+2

पोर्ट '587' का उपयोग करने के किसी भी कारण से चाल थी। धन्यवाद! –

+0

[डॉक्स] के अनुसार (http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html), पोर्ट 465 एसएसएमटीपी (एसएसएल पर एसएमटीपी) के लिए है। STARTTLS के साथ SMTP के लिए आपको पोर्ट 25 या 587 का उपयोग करने की आवश्यकता है जैसा आपने खोजा था। – AlexT

+0

धन्यवाद) ठीक काम करता है – rusllonrails

0

मैं इस रेल 3.2.12 पर काम की आवश्यकता होती है जैसे मॉड्यूल परिवर्तन के साथ प्रारंभकर्ता फाइल करने के लिए 'नेट/smtp' जोड़ने मिला:

require 'net/smtp' 

    module Net 
    class SMTP 
     def tls? 
     true 
     end 
    end 
end 
संबंधित मुद्दे