ทับทิมส่งจดหมาย - SMTP
SMTP (เอสเอ็มทีพี) ที่เป็น Simple Mail Transfer Protocol ซึ่งเป็นชุดของกฎสำหรับการส่งข้อความจากต้นทางไปยังปลายทางซึ่งจะมีการควบคุมวิธีการตัวอักษรของการขนส่ง
ทับทิมมี Net :: SMTP ในการส่งจดหมายและให้สองวิธีและการเริ่มต้นใหม่
วิธีการใหม่ที่มีสองพารามิเตอร์:
- ชื่อเซิร์ฟเวอร์เริ่มต้นlocalhost
- หมายเลขพอร์ตเริ่มต้นคือ25
วิธีการเริ่มต้นมีพารามิเตอร์ต่อไปนี้:
- เซิร์ฟเวอร์ -เซิร์ฟเวอร์SMTPIP เริ่มต้นคือ localhost
- พอร์ต -หมายเลขพอร์ตเริ่มต้นคือ 25
- โดเมนเนม -โดเมนอีเมลผู้ส่ง ENV เริ่มต้น [ "HOSTNAME"]
- บัญชี -ชื่อผู้ใช้เริ่มต้นเป็นศูนย์
- Password -รหัสผ่านของผู้ใช้เริ่มต้นเป็นศูนย์
- AuthType -ประเภทของการตรวจสอบเริ่มต้นคือcram_md5
SMTP วิธีวัตถุ instantiation เรียก sendmail พารามิเตอร์ต่อไปนี้:
- ที่มา -สตริงหรืออาร์เรย์ของแต่ละซ้ำหรืออะไรในเวลาใด ๆ ตอบแทน
- ผู้ส่ง -สตริงที่ปรากฏในรูปแบบของข้อมูลอีเมล
- ผู้รับ -สตริงหรืออาร์เรย์ของสตริงที่เป็นตัวแทนที่อยู่ของผู้รับ
ตัวอย่าง
ต่อไปนี้จะมีสคริปต์ทับทิมง่ายที่จะส่งอีเมล:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> Subject: SMTP e-mail test This is a test e-mail message. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com' endในตัวอย่างข้างต้นคุณได้ตั้งค่าข้อความอีเมลขั้นพื้นฐานให้ความสนใจในรูปแบบที่ถูกต้องชื่อ E-mail มาที่ได้มาจากการ, เพื่อให้, และเรื่องระหว่างข้อความและข้อมูลส่วนหัวต้องมีบรรทัดว่าง
ใช้ Net :: SMTP เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ในเครื่องท้องถิ่นในการส่งข้อความโดยใช้กระบวนการ send_message พารามิเตอร์กระบวนการในการส่งข้อความที่มีอีเมลผู้รับ
ถ้าคุณไม่ได้ทำงานบนเซิร์ฟเวอร์เครื่องของคุณสามารถใช้การสื่อสาร 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 ที่มีทับทิม
สุทธิ :: SMTP ยังให้การสนับสนุนสำหรับการส่งข้อความในรูปแบบ HTML
เมื่อส่ง E-mail ที่คุณสามารถตั้งค่ารุ่น MIME พิมพ์เอกสารชุดอักขระในการส่งข้อความในรูปแบบ HTML
ตัวอย่าง
ตัวอย่างต่อไปนี้จะใช้ในการส่งข้อความในรูปแบบ HTML:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> 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, 'me@fromdomain.com', 'test@todomain.com' end
ส่งอีเมล์พร้อมแนบ
หากคุณจำเป็นต้องส่งเนื้อหาผสมของ e-mail ของคุณต้องกำหนดชนิดของเนื้อหาเป็น multipart / ผสม เพื่อให้คุณสามารถเพิ่มสิ่งที่แนบในเนื้อหาข้อความ
อุปกรณ์เสริมก่อนที่จะโอนนั้นจะต้องใช้แพ็ค ( "M") ฟังก์ชันแปลงเนื้อหาในรูปแบบ base64
ตัวอย่าง
ตัวอย่างต่อไปนี้จะส่งสิ่งที่แนบมาเป็น /tmp/test.txt E-mail:
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. EOF # 定义主要的头部信息 part1 =<<EOF From: Private Person <me@fromdomain.net> To: A Test User <test@todmain.com> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=#{marker} --#{marker} EOF # 定义消息动作 part2 =<<EOF Content-Type: text/plain Content-Transfer-Encoding:8bit #{body} --#{marker} EOF # 定义附件部分 part3 =<<EOF Content-Type: multipart/mixed; name=\"#{filename}\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # 发送邮件 begin Net::SMTP.start('localhost') do |smtp| smtp.sendmail(mailtext, 'me@fromdomain.net', ['test@todmain.com']) end rescue Exception => e print "Exception occured: " + e end
หมายเหตุ: คุณสามารถระบุที่อยู่ของจำนวนมากของการส่ง แต่ต้องใช้จุลภาค