การส่งอีเมลโดยใช้ Ruby - SMTP
Simple Mail Transfer Protocol (SMTP) เป็นโปรโตคอลที่จัดการการส่งอีเมลและการกำหนดเส้นทางอีเมลระหว่างเซิร์ฟเวอร์เมล
ทับทิมให้ระดับสุทธิ :: SMTP สำหรับธรรมดา Mail Transfer Protocol (SMTP) การเชื่อมต่อฝั่งไคลเอ็นต์และการมีสองวิธีการเรียนใหม่และการเริ่มต้น
new ใช้สองพารามิเตอร์ -
ชื่อเซิร์ฟเวอร์เริ่มต้นเป็น localhost
หมายเลขพอร์ตผิดนัดกับพอร์ตที่รู้จักกันดี 25
start วิธีใช้พารามิเตอร์เหล่านี้ -
เซิร์ฟเวอร์ - ชื่อ IP ของเซิร์ฟเวอร์ SMTP ที่ผิดนัด localhost
พอร์ต - หมายเลขพอร์ต, ผิดนัด 25
โดเมน - โดเมนของผู้ส่งจดหมายผิดนัด ENV [ "HOSTNAME"]
บัญชี - ชื่อผู้ใช้เริ่มต้นเป็นศูนย์
รหัสผ่าน - รหัสผ่านของผู้ใช้ผิดนัดศูนย์
AuthType - ประเภทการอนุมัติผิดนัดcram_md5
ออบเจ็กต์ SMTP มีวิธีการอินสแตนซ์ที่เรียกว่า sendmail ซึ่งโดยทั่วไปจะใช้ในการทำงานของการส่งข้อความทางไปรษณีย์ ต้องใช้สามพารามิเตอร์ -
แหล่งที่มา - สตริงหรืออาร์เรย์หรืออะไรกับแต่ละ iterator กลับหนึ่งสายในเวลา
ส่ง - สตริงที่จะปรากฏในจากข้อมูลของอีเมล
ผู้รับ - สตริงหรืออาร์เรย์ของสตริงที่เป็นตัวแทนของผู้รับผู้รับ (s)
ตัวอย่าง
นี่เป็นวิธีง่ายๆในการส่งอีเมลโดยใช้สคริปต์ Ruby ลองสักครั้ง -
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
MESSAGE_END
Net::SMTP.start('localhost') do |smtp|
smtp.send_message message, '[email protected]', '[email protected]'
end
ที่นี่คุณได้วางอีเมลพื้นฐานไว้ในข้อความโดยใช้เอกสารดูแลจัดรูปแบบส่วนหัวให้ถูกต้อง อีเมลต้องการไฟล์From, Toและ Subject ส่วนหัวแยกออกจากเนื้อหาของอีเมลด้วยบรรทัดว่าง
ในการส่งเมลคุณใช้ Net :: SMTP เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP บนเครื่องโลคัลจากนั้นใช้เมธอด send_message พร้อมกับข้อความที่อยู่ต้นทางและที่อยู่ปลายทางเป็นพารามิเตอร์ (แม้ว่าที่อยู่จากและถึงจะเป็น ภายในอีเมลเองสิ่งเหล่านี้ไม่ได้ใช้เพื่อกำหนดเส้นทางอีเมลเสมอไป)
หากคุณไม่ได้ใช้เซิร์ฟเวอร์ SMTP บนเครื่องของคุณคุณสามารถใช้ Net :: SMTP เพื่อสื่อสารกับเซิร์ฟเวอร์ SMTP ระยะไกล เว้นแต่คุณจะใช้บริการเว็บเมล (เช่น Hotmail หรือ Yahoo! Mail) ผู้ให้บริการอีเมลของคุณจะให้รายละเอียดเซิร์ฟเวอร์เมลขาออกที่คุณสามารถส่งไปยัง Net :: SMTP ดังต่อไปนี้ -
Net::SMTP.start('mail.your-domain.com')
รหัสบรรทัดนี้เชื่อมต่อกับเซิร์ฟเวอร์ SMTP บนพอร์ต 25 ของ mail.your-domain.com โดยไม่ต้องใช้ชื่อผู้ใช้หรือรหัสผ่านใด ๆ หากคุณต้องการคุณสามารถระบุหมายเลขพอร์ตและรายละเอียดอื่น ๆ ได้ ตัวอย่างเช่น -
Net::SMTP.start('mail.your-domain.com',
25,
'localhost',
'username', 'password' :plain)
ตัวอย่างนี้เชื่อมต่อกับเซิร์ฟเวอร์ SMTP ที่ mail.your-domain.com โดยใช้ชื่อผู้ใช้และรหัสผ่านในรูปแบบข้อความธรรมดา ระบุชื่อโฮสต์ของไคลเอนต์เป็น localhost
การส่งอีเมล HTML โดยใช้ Ruby
เมื่อคุณส่งข้อความโดยใช้ Ruby เนื้อหาทั้งหมดจะถือว่าเป็นข้อความธรรมดา แม้ว่าคุณจะรวมแท็ก HTML ไว้ในข้อความ แต่แท็กนั้นจะแสดงเป็นข้อความธรรมดาและแท็ก HTML จะไม่ได้รับการจัดรูปแบบตามไวยากรณ์ HTML แต่ Ruby Net :: SMTP มีตัวเลือกในการส่งข้อความ HTML เป็นข้อความ HTML จริง
ในขณะที่ส่งข้อความอีเมลคุณสามารถระบุเวอร์ชัน Mime ประเภทเนื้อหาและชุดอักขระเพื่อส่งอีเมล HTML ได้
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างในการส่งเนื้อหา HTML เป็นอีเมล ลองสักครั้ง -
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END
Net::SMTP.start('localhost') do |smtp|
smtp.send_message message, '[email protected]', '[email protected]'
end
การส่งไฟล์แนบเป็นอีเมล
ในการส่งอีเมลที่มีเนื้อหาผสมต้องตั้งค่า Content-type ส่วนหัวของ multipart/mixed. จากนั้นสามารถระบุส่วนข้อความและไฟล์แนบได้ภายในboundaries.
ขอบเขตเริ่มต้นด้วยยัติภังค์สองตัวตามด้วยหมายเลขเฉพาะซึ่งไม่สามารถปรากฏในส่วนข้อความของอีเมล ขอบเขตสุดท้ายที่แสดงถึงส่วนสุดท้ายของอีเมลจะต้องลงท้ายด้วยยัติภังค์สองตัว
ไฟล์ที่แนบควรเข้ารหัสด้วยนามสกุล pack("m") ฟังก์ชั่นที่จะมีการเข้ารหัส base64 ก่อนส่ง
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างซึ่งจะส่งไฟล์ /tmp/test.txt เป็นไฟล์แนบ
require 'net/smtp'
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
marker = "AUNIQUEMARKER"
body = <<EOF
This is a test email to send an attachement.
EOF
# Define the main headers.
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}
EOF
# Define the message action
part2 = <<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
#{body}
--#{marker}
EOF
# Define the attachment section
part3 = <<EOF
Content-Type: multipart/mixed; name = \"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename = "#{filename}"
#{encodedcontent}
--#{marker}--
EOF
mailtext = part1 + part2 + part3
# Let's put our code in safe area
begin
Net::SMTP.start('localhost') do |smtp|
smtp.sendmail(mailtext, '[email protected]', ['[email protected]'])
end
rescue Exception => e
print "Exception occured: " + e
end
NOTE - คุณสามารถระบุปลายทางได้หลายแห่งภายในอาร์เรย์ แต่ควรคั่นด้วยลูกน้ำ