第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Ruby 入門教程 Ruby 入門教程 46 Ruby 使用 SMTP 發(fā)送郵件

Ruby 使用 SMTP 發(fā)送郵件

1. 開始前的準(zhǔn)備

本章節(jié)中我們來講解在 Ruby 如果使用 SMTP(簡(jiǎn)單郵件傳輸協(xié)議)來發(fā)送郵件,我們拿 163 郵箱來舉例子。

首先需要我們注冊(cè)一個(gè)163郵箱,然后開啟 SMTP 服務(wù)。

服務(wù)器名稱 時(shí)機(jī)簡(jiǎn)介(調(diào)用的時(shí)機(jī)) SSL協(xié)議端口號(hào) 非SSL協(xié)議端口號(hào)
IMAP 構(gòu)造函數(shù),創(chuàng)建新對(duì)象時(shí) 993 143
SMTP smtp.163.com 465/994 25
POP3 pop.163.com 995 110

從上圖的表格中我們獲取到:在 163 中 SMTP 服務(wù)器的地址為:smtp.163.com,非 SSL 協(xié)議的端口為:25。

2. 發(fā)送第一個(gè)郵件(純文本)

我們會(huì)使用到Net::SMTP來發(fā)送郵件,這個(gè)庫提供了通過 SMTP 方式發(fā)送郵件的功能。

郵件是有格式的,不符合格式的郵件是不能發(fā)送的,郵件的格式規(guī)定如下:

From: Your Name <your@mail.address>
To: Destination Address <someone@example.com>
Subject: test message
Date: Sat, 23 Jun 2001 16:26:43 +0900
Message-Id: <unique.message.id.string@example.com>

This is a test message.

根據(jù)要求現(xiàn)在讓我們先來編輯一段郵件的內(nèi)容:

sender_email = # 填寫剛剛注冊(cè)用來發(fā)送郵件的163賬號(hào)
receiver_email = # 填寫自己接收接收郵件的郵箱賬號(hào)
sender_email_pwd = # 163郵件密碼


msg = <<MESSAGE
From: Andrew <#{sender_email}>
To: Testuser <#{receiver_email}>
Subject: Test Message
Date: #{Time.now.strftime("%a, %d %b %Y %H:%M:%S +0800")}
Message-Id: <#{rand.to_s[3...8]}.message.@163.com>

This is a test message.
MESSAGE

puts msg

# ---- 輸出結(jié)果 ----
From: Andrew <xxxx>
To: Testuser <xxxx>
Subject: Test Message
Date: Thu, 20 Aug 2020 23:21:34 +0800
Message-Id: <88888.message.@163.com>

然后我們需要使用Net::SMTP 中的start方法來發(fā)送這個(gè)郵件(郵件是有密碼的)。并將我們剛才知道的郵件服務(wù)器地址和端口號(hào)添加到上面:

實(shí)例:

Net::SMTP.start('smtp.163.com', 25, '127.0.0.1', sender_email, sender_email_pwd) do |smtp|
  smtp.send_message msg,
    sender_email,
    receiver_email
  smtp.finish
end

# ---- 輸出結(jié)果 ----
成功發(fā)送郵件~

運(yùn)行成功后就會(huì)成功發(fā)送郵件到接收郵箱之中。

3. 發(fā)送HTML格式的郵件

如果我們要發(fā)送帶有 CSS 樣式的郵件,那么需要我們?cè)?headers 中加入Content-type: text/html,并更改文件的內(nèi)容:

msg = <<MESSAGE
From: Andrew <#{sender_email}>
To: Testuser <#{receiver_email}>
Subject: Test Message
Date: #{Time.now.strftime("%a, %d %b %Y %H:%M:%S +0800")}
Content-type: text/html 
Message-Id: <#{rand.to_s[3...8]}.message.@163.com>

<h1>測(cè)試標(biāo)題</h1>
<p style="color: red;">測(cè)試這段話</p>

MESSAGE

puts msg

# ---- 輸出結(jié)果 ---
From: Andrew <xxx.com>
To: Testuser <xxx.qq.com>
Subject: Test Message
Date: Thu, 20 Aug 2020 23:37:43 +0800
Content-type: text/html
Message-Id: <17402.message.@163.com>

<h1>測(cè)試標(biāo)題</h1>
<p style="color: red;">測(cè)試這段話</p>

接收到郵件后,我們可以看到內(nèi)容中的 CSS 已經(jīng)生效了。

4. 發(fā)送帶有附件的郵件

讓我們先創(chuàng)建一個(gè) txt 文件作為附件。

echo "這是一個(gè)測(cè)試的txt文件" > test.txt

然后讓我再次修改 headers,增加Content-type: multipart/mixed

注意事項(xiàng):

我們需要使用 pack(“m”) 將函數(shù)轉(zhuǎn)化為 base64 格式的。

filename = File.expand_path(File.dirname(__FILE__) + "/test.txt")
encodedcontent = [File.read(filename)].pack("m")

msg = <<MESSAGE
From: Andrew <#{sender_email}>
To: Testuser <#{receiver_email}>
Subject: Test Upload File/mi
Date: #{Time.now.strftime("%a, %d %b %Y %H:%M:%S +0800")}
Message-Id: <#{rand.to_s[3...8]}.message.@163.com>
Content-Transfer-Encoding:8bit
Content-Type: multipart/mixed; name=\"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{filename}"

#{encodedcontent}
MESSAGE

puts msg 

改好即可。

5. 小結(jié)

本章節(jié)中我們學(xué)習(xí)了如何使用 SMTP 來發(fā)送純文本、HTML、附件的郵件。