سؤال

هل لدى أي شخص أي معلومات عن جودة (وحدييات) بشأن إرسال البريد عبر Gmail باستخدام Net Ruby's Net :: SMTP؟ لقد رأيت عدة أمثلة - معظم المواعدة من 2007 إلى منتصف عام 2008 ولم يعمل من أجلي. أحتاج إلى مزيد من الأمثلة الحالية التي تستخدم أحدث إصدار 1.8.7. كما أقدر ما إذا كانت الوثائق لم تغطي أمثلة بسيطة فقط على أنه لا أحد يستخدمه أحد.

حاليا أتلقى خطأ:

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

أنا لست على دراية رهيبة مع SSL فيما يتعلق بروتوكول SMTP، لذلك فقد كل ذلك علي. لسوء الحظ NET :: وثائق SMTP تغطي فقط القواعد ولا توفر قائمة كاملة بمختلف سياقات Openssl المحتملة :: SSL إما لا يمكنني تجربة العديد من الأشخاص.

على أي حال، إذا كان لدى أي شخص أي معلومات عالية الجودة حول الحصول على هذا للعمل مع Gmail، فسيكون موضع تقدير كبير.

أفضل.

هل كانت مفيدة؟

المحلول

أنا فعلا فقط حصلت على هذا العمل. كتب نص سريع لاختباره.

كنت أحصل على خطأ مختلف مما كنت عليه (تتطلب starttls)، لقد وجدت أيضا استخدام المنفذ 587 بدلا من 465.

لقد وجدت الخدعة للحصول عليها تعمل في مساعد القضبان وجدت. (agilewebdevelopment.com/plugins/net_smtp_tls_support)

إذا قمت بإضافة هذا الملف (يضيف دعم TLS إلى Net القياسي :: مكتبة SMTP):

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

ثم قم بتشغيل "Net :: SMTP.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: <unique.message.id.string@example.com>

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"

أتمنى أن يساعدك هذا!

نصائح أخرى

في الواقع، يعمل أدناه أدناه من أجل Gmail دون مكون إضافي أو جوهره، على الأقل مع روبي 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 يشبه "you@domain.com" وربما يكون لديك أي شيء تريده، لكنني استخدم اسم المجال الفعلي.

هل تتصل ب SMTP.GMAIL.COM Port 465 أفترض؟ وبعد

openssl s_client -connect smtp.gmail.com:587

متصل (00000003) 8298: خطأ: 140770FC: إجراءات SSL: SSL23_GET_SERVER_HELLO: بروتوكول غير معروف: S23_CLNT.C: 601:

الخطأ يبدو مشابها للغاية لك. الأمر التالي يعمل:

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

لذلك أعتقد أن ما يحدث هو أنه لا تملك تدعم دعم StartTLS. لست متأكدا من كيفية القيام بذلك في Ruby Buy ما تعرف عليه هو أن البرنامج المساعد Action_mailer_tls يسمح بذلك عن طريق الترقيع Net :: SMTP. اعتبارا من Ruby 1.8.7، Net :: SMTP لديه هذا الدعم المدمج.

إذا كنت تستخدم Ruby <1.8.7 هنا هو التصحيح.

تحتاج أيضا إلى وجود شخصين حديثين بين الموضوع وجسم الرسالة. خلاف ذلك، سيتم إرسال الموضوع فقط، وسيتم ترك جسم الرسالة فارغا.

msg = "Subject: My Subject Goes Here\n\nMy message goes here"

https:/web.archive.org/web/20113211408/http:/blog.asearm7.net/articles/2009/07/08/smtp_tls-1-0-3.قد تساعد

وهنا بعض الشخصيات الأخرى لإرضاء المتطلبات ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top