ทับทิมส่งจดหมาย - 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  

หมายเหตุ: คุณสามารถระบุที่อยู่ของจำนวนมากของการส่ง แต่ต้องใช้จุลภาค