English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 كخادم بريد إلكتروني.
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 الفاصلة بينها.