Tutorial Ruby mengirim surat - SMTP Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari Kirim email HTML dengan Ruby,Mengirim email dengan lampiran,
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:
Metodeawal memiliki parameter berikut:
SMTP metode objek Instansiasi panggilan sendmail, parameter berikut:
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.
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 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
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 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.