English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

إرسال البريد عبر SMTP في Ruby

SMTP (Simple Mail Transfer Protocol) هو بروتوكول نقل بريد بسيط،وهو مجموعة من القواعد التي تُستخدم لنقل البريد من عنوان إلى عنوان،ويستخدم لتحكم في نقل الرسائل.

يقدم Ruby Net::SMTP لإرسال البريد،ويقدم طريقتين new و start:

new يحتوي هذا الطريقة على التاليين كأدوات:

  • اسم الخادم افتراضيًا يكون localhost:

  • رقم المنفذ افتراضيًا يكون 25:

start يحتوي هذا الطريقة على التاليين كأدوات:

  • server  - IP SMTP الخادم،افتراضيًا يكون localhost:

  • port  - رقم المنفذ،افتراضيًا يكون 25:

  • domain - اسم نطاق إرسال البريد،افتراضيًا يكون ENV["HOSTNAME"]:

  • account - اسم المستخدم،افتراضيًا يكون nil:

  • password - كلمة المرور للمستخدم،افتراضيًا يكون nil:

  • authtype - نوع التحقق،افتراضيًا يكون: cram_md5

مثال على طريقة تعريف SMTP باستخدام sendmail، مع التاليين كأدوات:

  • source  - نص أو مجموعة نصوص أو أي شيء يُرجع في كل وقت من قبل أي مسار.

  • sender - نص، يظهر في حقل النموذج البريد الإلكتروني.

  • recipients - نص أو مجموعة نصوص، تمثل عناوين البريد الإلكتروني للمستلمين.

عينة على الإنترنت

يقدم هذا مثال بسيط لبرنامج Ruby لإرسال البريد الإلكتروني:

عينة على الإنترنت

require 'net/smtp'
 
message = <<MESSAGE_END
من: شخص خاص <[email protected]>
إلى: مستخدم اختبار <[email protected]>
الموضوع: اختبار بريد SMTP
 
هذا رسالة اختبار بريد إلكتروني.
MESSAGE_END
 
begin
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
fin

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

لإتصال بخادم SMTP على جهازك المحلي باستخدام Net::SMTP، استخدم طريقة send_message لإرسال البريد الإلكتروني، و参数 الطريقة هو عنوان البريد الإلكتروني للمرسل والمستلم.

إذا لم تكن تشغل SMTP على جهازك المحلي، يمكنك استخدام Net::SMTP للتواصل مع خادم SMTP عن بُعد. إذا كنت تستخدم خدمة بريد إلكتروني عبر الإنترنت (مثل Hotmail أو Yahoo Mail)، سيقدم لك مزود خدمة البريد الإلكتروني تفاصيل خادم إرسال البريد الإلكتروني:

Net::SMTP.start('mail.your-domain.com')

يقوم هذا الكود بالاتصال بالخادم mail.your-domain.com، باستخدام منفذ 25 كخادم بريد إلكتروني، إذا كنت بحاجة إلى إدخال اسم المستخدم وكلمة المرور، فإن الكود سيكون كالتالي:

Net::SMTP.start('mail.your-domain.com', 
                25, 
                'localhost', 
                'username', 'password', :plain)

في المثال السابق، تم استخدام اسم المستخدم وكلمة المرور المحددة للاتصال بالخادم mail.your-domain.com، باستخدام منفذ 25 كخادم بريد إلكتروني.

إرسال بريد إلكتروني بصيغة HTML باستخدام Ruby

Net::SMTP يقدم أيضًا دعمًا لإرسال بريد إلكتروني بصيغة HTML.

عند إرسال بريد إلكتروني، يمكنك تعيين إصدار MIME ونوع الوثيقة وcharset لإرسال بريد إلكتروني بصيغة HTML.

عينة على الإنترنت

هذا المثال يُستخدم لإرسال بريد إلكتروني بصيغة HTML

عينة على الإنترنت

require 'net/smtp'
 
message = <<MESSAGE_END
من: شخص خاص <[email protected]>
إلى: مستخدم اختبار <[email protected]>
MIME-Version: 1.0
نوع المحتوى: text/html
الموضوع: اختبار بريد SMTP
 
هذا رسالة بريد إلكتروني يجب إرسالها بصيغة HTML
 
<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END
 
begin
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
fin

إرسال بريد يحتوي على مرفق

إذا كنت بحاجة إلى إرسال بريد يحتوي على محتوى مختلط، يجب تعيين Content-type على multipart/mixed. بهذا يمكن إضافة محتوى المرفق إلى البريد.

المرفق يجب استخدامه قبل نقل pack("m") الوظيفة تحويل محتواها إلى شكل base64.

عينة على الإنترنت

في هذا العينة سيتم إرسال بريد يحتوي على مرفق من /tmp/test.txt:

عينة على الإنترنت

require 'net/smtp'
 
filename = "/tmp/test.txt"
# 读取文件并编码为base64格式
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
 
marker = "AUNIQUEMARKER"
 
body =<<EOF
This is a test email to send an attachement.
--#{marker}--
 
# 定义主要的头部信息
part1 =<<EOF
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="#{marker}"
--#{marker}
--#{marker}--
 
# 定义消息动作
part2 =<<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
 
#{body}
--#{marker}
--#{marker}--
 
# 定义附件部分
part3 =<<EOF
Content-Type: multipart/mixed; name="#{filename}"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{filename}"
 
Content-Disposition: attachment; filename="#{filename}"
#{encodedcontent}
--#{marker}--
 
EOF
 
mailtext = part1 + part2 + part3
# إرسال البريد 
  begin
     Net::SMTP.start('localhost') do |smtp|
                          ['[email protected]'])
  fin
rescue Exception => e  
  print "Exception occurred: " + e  
fin

ملاحظة:يمكنك تحديد عدة عناوين لإرسالها، لكن يجب استخدامomma الفاصلة بينها.