Latest web development tutorials

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 <[email protected]>
To: A Test User <[email protected]>
Subject: SMTP e-mail test

This is a test e-mail message.
MESSAGE_END

Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
end

Dalam 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 <[email protected]>
To: A Test User <[email protected]>
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, '[email protected]', 
                             '[email protected]'
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 <[email protected]>
To: A Test User <[email protected]>
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, '[email protected]',
                          ['[email protected]'])
  end
rescue Exception => e  
  print "Exception occured: " + e  
end  

Catatan: Anda dapat menentukan alamat dari sejumlah transmisi, tetapi membutuhkan penggunaan koma.