Ruby menghantar e-mel - SMATP
SMTP (Simple Mail Transfer Protocol) ialah protokol pemindahan mel yang ringkas Ia adalah satu set peraturan untuk menghantar mel dari alamat sumber ke alamat destinasi, yang mengawal kaedah pemindahan surat.
Ruby menyediakan Net::SMTP untuk menghantar e-mel, dan menyediakan dua kaedah baharu dan mulakan:
baharu Kaedah ini mempunyai dua parameter:
nama pelayan lalai kepada localhost
nombor port lalai kepada 25
mula mempunyai parameter berikut:
pelayan - IP pelayan SMTP, lalai ialah localhost
port - Nombor port, lalai ialah 25
domain - Nama domain penghantar e-mel, lalai ialah ENV[" HOSTNAME "]
akaun - nama pengguna, lalai ialah sifar
kata laluan - kata laluan pengguna , lalai ialah sifar
authtype - jenis pengesahan, lalai ialah cram_md5
sumber - rentetan atau tatasusunan atau apa sahaja yang dikembalikan oleh setiap iterator pada satu-satu masa.
pengirim - rentetan yang muncul dalam medan borang e-mel.
penerima - Rentetan atau tatasusunan rentetan yang mewakili alamat penerima.
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
Dalam contoh di atas, anda mempunyai Sediakan mesej e-mel asas, memberi perhatian kepada pemformatan pengepala yang betul. E-mel memerlukan Daripada, Kepada dan Subjek, dan baris kosong antara kandungan teks dan maklumat pengepala.
Net::SMTP.start('mail.your-domain.com')Kod di atas akan menyambungkan hos ke mail.your-domain. com , pelayan mel dengan nombor port 25, jika anda perlu mengisi nama pengguna dan kata laluan, kodnya adalah seperti berikut:
Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)Contoh di atas menggunakan nama pengguna yang ditentukan dan kata laluan untuk menyambung ke hos sebagai mel .domain-anda.com, pelayan mel dengan nombor port 25.
Gunakan Ruby untuk menghantar e-mel HTMLNet::SMTP juga menyediakan sokongan untuk menghantar e-mel dalam format HTML. Apabila menghantar e-mel, anda boleh menetapkan versi MIME, jenis dokumen dan set aksara untuk menghantar e-mel dalam format HTML. ContohContoh berikut digunakan untuk menghantar e-mel dalam format 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
Hantar e-mel dengan lampiranJika anda perlu menghantar kandungan bercampur Untuk e-mel, anda perlu menetapkan Jenis Kandungan kepada berbilang bahagian/bercampur. Ini akan membolehkan anda menambah kandungan lampiran pada e-mel.
Lampiran perlu menggunakan fungsi pack("m") untuk menukar kandungannya kepada format base64 sebelum penghantaran.
Contoh
Contoh berikut akan menghantar e-mel dengan lampiran /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. 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
Nota: Anda boleh menentukan berbilang kepada hantar Alamat mesti dipisahkan dengan koma.