Ruby mengirim surat - SMTP
SMTP (Simple Mail Transfer Protocol) yang Simple Mail Transfer Protocol, yang merupakan seperangkat aturan untuk transmisi pesan dari sumber ke tujuan, yang harus mengontrol jalan huruf transit.
Ruby menyediakan Net :: SMTP untuk mengirim email, dan menyediakan dua metode dan awal yang baru:
Metodebaru memiliki dua parameter:
- Namadefaultserverlocalhost
- Nomor portdefault adalah 25
Metodeawal memiliki parameter berikut:
- Server -serverSMTPIP, default adalah localhost
- pelabuhan -nomor port, default adalah 25
- domain -domain email pengirim, standar ENV [ "HOSTNAME"]
- akun -nama pengguna, default adalah nihil
- sandi -sandi pengguna, default adalah nihil
- AuthType -jenis otentikasi, default adalahcram_md5
SMTP metode objek Instansiasi panggilan sendmail, parameter berikut:
- Sumber -Sebuah string atau array setiap iterasi atau apa pun setiap saat dalam keuntungan.
- pengirim -string yang muncul dalam bentuk bidang email.
- penerima -string atau array string yang mewakili alamat penerima.
contoh
Berikut ini menyediakan script Ruby sederhana untuk mengirim email:
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' endDalam contoh di atas, Anda telah mengatur pesan e-mail dasar, memperhatikan format judul yang benar. Sebuah e-mail menjadi Dari, Untuk, dan Subjek, antara teks dan informasi header memerlukan baris kosong.
Gunakan Net :: SMTP untuk terhubung ke server SMTP pada mesin lokal untuk mengirim pesan menggunakan proses send_message, parameter proses untuk pengirim pesan dengan penerima email.
Jika Anda tidak berjalan di server SMTP mesin, Anda dapat menggunakan komunikasi SMTP Net :: dengan remote SMTP server. Jika Anda menggunakan layanan webmail (seperti Hotmail atau Yahoo Mail), penyedia email Anda akan memberikan rincian dari server surat pengiriman untuk Anda:
Net::SMTP.start('mail.your-domain.com')
Kode di atas akan menghubungkan tuan mail.your-domain.com, nomor port 25 dari server mail, jika Anda perlu untuk mengisi nama pengguna dan password, kode tersebut adalah sebagai berikut:
Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)
Contoh di atas menggunakan nama pengguna dan password untuk terhubung ke host tertentu mail.your-domain.com, nomor port 25 dari server email.
Kirim email HTML dengan Ruby
Net :: SMTP juga menyediakan dukungan untuk mengirimkan pesan dalam format HTML.
Ketika mengirim e-mail Anda dapat mengatur versi MIME, jenis dokumen, karakter set untuk mengirim pesan dalam format HTML.
contoh
Contoh-contoh berikut digunakan untuk mengirim pesan 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
Mengirim email dengan lampiran
Jika Anda perlu mengirim konten campuran e-mail, Anda perlu mengatur Content-type multipart / campuran. Sehingga Anda dapat menambahkan lampiran dalam isi pesan.
Aksesori sebelum transfer memerlukan penggunaan pack ( "m") fungsi mengkonversi isinya ke dalam format base64.
contoh
Contoh berikut akan mengirim lampiran e-mail /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
Catatan: Anda dapat menentukan alamat dari sejumlah transmisi, tetapi membutuhkan penggunaan koma.