2009-07-26 9 views
22

किसी को भी किसी भी गुणवत्ता है (और अप करने की तारीख) Gmail के माध्यम से मेल भेजने के बारे में जानकारी रूबी के नेट का उपयोग कर :: एसएमटीपी? मैंने कई उदाहरण देखे हैं - 2007 से मध्य 2008 तक की अधिकांश डेटिंग और उनमें से कोई भी मेरे लिए काम नहीं करता है। मुझे हालिया 1.8.7 रिलीज का उपयोग करने वाले अधिक मौजूदा उदाहरणों की आवश्यकता है। मैं भी सराहना करता हूं अगर प्रलेखन ने न केवल सरल उदाहरणों को कवर किया है जो कि वास्तव में कभी भी उपयोग नहीं करता है।(रूबी) नेट प्राप्त करना :: एसएमटीपी जीमेल के साथ काम कर रहा है ...?

वर्तमान में मैं एक त्रुटि प्राप्त कर रहा हूँ:

SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol 

मैं के रूप में SMTP प्रोटोकॉल का संबंध नहीं बहुत एसएसएल से परिचित हूँ, इसलिए यह सब मुझ पर खो दिया है। दुर्भाग्य से Net :: SMTP प्रलेखन केवल ठिकानों को शामिल किया गया है और या तो इसलिए मैं विभिन्न लोगों की कोशिश नहीं कर सकते हैं विभिन्न संभावित OpenSSL :: एसएसएल संदर्भों की एक पूरी सूची प्रदान नहीं करता है।

वैसे भी, किसी को भी जीमेल यह सबसे की सराहना की होगी के साथ काम करने के लिए इस प्राप्त करने पर किसी भी गुणवत्ता की जानकारी है या नहीं।

बेस्ट

उत्तर

10

मैं वास्तव में सिर्फ इस काम कर गया। इसका परीक्षण करने के लिए एक त्वरित लिपि लिखा है।

मुझे कोई दूसरी त्रुटि से आप कर रहे थे (STARTTLS आवश्यकता होती है) हो रही थी, मैंने यह भी पाया मैं बजाय पोर्ट 587 465

मैं चाल पाया यह एक रेल प्लगइन मैंने पाया में काम पाने के लिए इस्तेमाल किया था। (Agilewebdevelopment.com/plugins/net_smtp_tls_support)

यदि आप 'eval' इस फाइल (यह मानक नेट के लिए टीएलएस समर्थन जोड़ता है :: एसएमटीपी पुस्तकालय):

http://happiness-is-slavery.net/wp-content/rails-plugins/smtp_add_tls_support/lib/smtp_add_tls_support.rb

तो चलाने 'नेट :: एसएमटीपी। enable_tls() '

सब ठीक काम करने लगता है।

require 'rubygems' 
require 'net/smtp' 

eval File.read("smtp_tls.rb") 
Net::SMTP.enable_tls() 
FROM_EMAIL = "REMOVED" 
PASSWORD = "REMOVED" 
TO_EMAIL = "REMOVED" 

msgstr = <<END_OF_MESSAGE 
From: Your Name <#{FROM_EMAIL}> 
To: my phone <#{TO_EMAIL}> 
Subject: text message 
Date: Sat, 23 Jun 2001 16:26:43 +0900 
Message-Id: <[email protected]> 

This is a test message. 
END_OF_MESSAGE 

Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com', 
         FROM_EMAIL, PASSWORD, :plain) do |smtp| 
    smtp.send_message msgstr, FROM_EMAIL, TO_EMAIL 

end 

जाहिर है, मैं एक ही निर्देशिका के लिए उपर्युक्त फ़ाइल डाउनलोड किया है और यह smtp_tls.rb '

आशा इस मदद करता है नामित:

यहाँ मेरी कोड है!

+0

ऐसा लगता है कि एक smtp_tls मणि है जो शायद काम भी करेगा ... – Jerceratops

+0

"ऊपर उल्लिखित फाइल" यूआरएल टूटा हुआ है। कोई विचार जहां यह चला गया है? हे! इसे मिला: https://github.com/andreashappe/smtp_add_tls_support – JDS

2

आप बंदरगाह smtp.gmail.com को 465 मैं यह सोचते हैं हूँ जोड़ने रहे हैं? ।

openssl s_client -connect smtp.gmail.com:587 

कनेक्ट किया गया (00,000,003) 8298: त्रुटि: 140770FC: एसएसएल दिनचर्या: SSL23_GET_SERVER_HELLO: अज्ञात प्रोटोकॉल: s23_clnt.c: 601:

त्रुटि से मिलता-जुलता लग रहा है। निम्न आदेश करता है काम:

openssl s_client -starttls smtp -connect smtp.gmail.com:587 

तो मुझे लगता है क्या हो रहा है आप STARTTLS समर्थन सक्षम नहीं है कि है। मुझे यकीन नहीं है कि रूबी में इसे कैसे किया जाए, मुझे यह पता चला कि action_mailer_tls प्लगइन नेट :: एसएमटीपी पैच करके इसे अनुमति देता है। रुबी 1.8.7 के रूप में, नेट :: एसएमटीपी में यह समर्थन अंतर्निहित है।

आप रूबी < 1.8.7 here उपयोग कर रहे हैं पैच है।

+0

असल में जीमेल एक अजीब जानवर प्रतीत होता है। पोर्ट 465 बस ठीक काम करता है, लेकिन पोर्ट 587 * पर काम करने की आवश्यकता है और * STARTTLS का उपयोग मुद्दों का कारण बनता है। उत्तरार्द्ध वह संयोजन है जिसे मुझे काम करने की ज़रूरत है। कोई विचार? –

+0

तो आप कह रहे हैं कि एसएसएल/STARTTLS 587 पर भी संभव नहीं है? –

+0

मैंने अपनी पोस्ट संपादित की। एसएसएल के बिना एचईएलओ के बाद STARTTLS कमांड सर्वर को शुरू करने का अनुरोध करने के लिए यह काम करता प्रतीत होता है। मै निच्षित नहि हु। –

46
असल

एक प्लगइन या एक मणि, कम से कम रूबी 1.9.1p376 साथ है, लेकिन सौभाग्य पाने के प्रलेखन के बिना जीमेल के लिए नीचे काम करता है कि आप ऐसा बता दूँगा:

require 'net/smtp' 

    msg = "Subject: Hi There!\n\nThis works, and this part is in the body." 
    smtp = Net::SMTP.new 'smtp.gmail.com', 587 
    smtp.enable_starttls 
    smtp.start(YourDomain, YourAccountName, YourPassword, :login) do 
     smtp.send_message(msg, FromAddress, ToAddress) 
    end 

YourAccountName 'आप की तरह लग रहा @ domain.com '& YourDomain शायद आपको पसंद आए कुछ भी हो सकता है, लेकिन मैं वास्तविक डोमेन नाम का उपयोग करता हूं।

+0

यह बहुत अच्छा काम करता है, बहुत बहुत धन्यवाद ... – jasoares

+1

ओह मेरी भलाई, धन्यवाद। इस पर प्रलेखन भयानक है। अच्छा उदाहरण! :) –

+0

मुझे इसके साथ "ढेर स्तर बहुत गहरी" त्रुटि मिल रही है। पहला ईमेल "ठीक है" भेजा जाता है, फिर एक और ईमेल भेजने का प्रयास करते समय, मुझे वह त्रुटि मिली। क्या समस्या हो सकती है? धन्यवाद। –

1

आपको इस विषय और संदेश के मुख्य भाग के बीच दो नए अक्षरों की भी आवश्यकता है। अन्यथा, केवल विषय प्रसारित किया जाएगा, और संदेश निकाय खाली छोड़ दिया जाएगा।

msg = "Subject: My Subject Goes Here\n\nMy message goes here" 
संबंधित मुद्दे