Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
Laravel 的郵件功能基于熱門的 SwiftMailer 函數庫之上,提供了一個簡潔的 API
Laravel為SMTP、Mailgun、Mandrill、Amazon、SES、PHP的mail函數、以及sendmail提供了驅動,可以非常方便靈活地使用Laravel來發送郵件
更多可參考Laravel郵件服務文檔
那么Laravel如何使用SMTP來發送郵件呢? 往下看
郵件的配置文件在config/mail.php文件中
我們只需要修改.env里的配置項即可
注: 需要先開啟郵箱的SMTP郵件服務, 另QQ郵箱的SMTP密碼是獨立的, 并非郵箱密碼
MAIL_DRIVER=smtp
MAIL_HOST=smtp.xx.com
MAIL_PORT=587
MAIL_USERNAME=username
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
首先需要先把Mail類use進來
use Illuminate\Support\Facades\Mail;
我以前在通過Python實現自動化郵件功能的時候是這樣的:
import smtplib from email.mime.text import MIMEText from email.header import Header # 發送郵箱服務器 smtpserver='smtp.sina.com' # 發送郵箱用戶/密碼 user='username@sina.com' password='123456' # 發送郵箱 sender='username@sina.com' # 接收郵箱 receiver='receive@126.com' # 發送郵件主題 subject='Python email test' # 編寫HTML類型的郵件正文 msg=MIMEText('<html><h1>你好!</h1></html>','html','utf-8') msg['Subject']=Header(subject, 'utf-8') # 連接發送郵件 smtp=smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit()
其實,這段代碼也并不復雜,只要你理解使用過郵箱發送郵件,那么以下問題是你必須要考慮的:
github項目地址: https://github.com/kootenpv/yagmail
pip install yagmail
import yagmail #鏈接郵箱服務器 yag=yagmail.SMTP( user="user@126.com", password="1234", host='smtp.126.com') # 郵箱正文 contents=['This is the body, and here is just text http://somedomain/image.png', 'You can find an audio file attached.', '/local/path/song.mp3'] # 發送郵件 yag.send('taaa@126.com', 'subject', contents)
總共四行代碼搞定,是不是比上面的例子簡單太多了。
yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)
設您有一個可以工作的 Ruby 應用程序,并且需要向其添加電子郵件傳遞功能。這可能與用戶身份驗證或任何其他類型的事務性電子郵件有關,這沒有什么區別。本教程旨在幫助您實現使用 Ruby 發送電子郵件。
用 Ruby 發送電子郵件的選項
大多數情況下,你可以從三個選項中選擇一個。
最簡單的方法是使用 Net: : SMTP 類。它提供了通過 SMTP 發送電子郵件的功能。該選項的缺點是 Net: : SMTP 缺少撰寫電子郵件的功能。你可以自己創建,但這需要時間。
第二種選擇是使用專用的 Ruby gem,如 Mail、 Pony 或其他。這些解決方案使您能夠以簡單有效的方式處理電子郵件活動。Action Mailer 是一個完美的電子郵件解決方案,通過 Rails 的棱鏡。而且,很有可能,這將是你的選擇。
第三個選項是類 Socket。通常,這個類允許您設置流程之間或流程內部的通信。因此,電子郵件發送也可以用它來實現。然而,事實是 Socket 并沒有為您提供廣泛的功能,您也不太可能想要使用它。
現在,讓我們嘗試使用所描述的每個解決方案發送電子郵件。
如何通過 Net: : SMTP 在 Ruby 中發送電子郵件
根據我的經驗,在一個普通的 web 應用程序中使用這個選項是不常見的。但是,如果您在某些物聯網設備上使用 mruby (Ruby 語言的一種輕量級實現) ,那么通過 Net: : SMTP 發送電子郵件可能是合適的。此外,如果在無服務器計算中使用,例如 AWS Lambda,它也會這樣做。首先查看這個腳本示例,然后我們將詳細介紹它。
Ruby 露比
brrequire 'net/smtp'brmessage=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brbrSubject: Any email subject you wantbrbrDate: Tue, 02 Jul 2019 15:00:34 +0800brbrLorem Ipsum
這是一個通過 SMTP 發送文本電子郵件的簡單示例(可以在這里找到官方文檔)。您可以看到四個標題: 發件人、收件人、主題和日期。請記住,您必須將它們與電子郵件正文中的空行分開。同樣重要的是連接到 SMTP 服務器。
Net::SMTP.start('your.smtp.server', 25) do |smtp|
Start (‘ your.smtp.server’,25) do | smtp |
自然,這里將顯示您的數據,而不是“ your.smtp.server”,并且25是默認端口號。如果需要,可以指定其他詳細信息,如用戶名、密碼或身份驗證方案(普通、登錄和 cram _ md5)。它可能看起來如下:
`Net::SMTP.start('your.smtp.server', 25, ‘localhost’, ‘username’, ‘password’ :plain) do |smtp|`
在這里,您將使用純文本格式的用戶名和密碼連接到 SMTP 服務器,客戶機的主機名將被標識為 localhost。
之后,可以使用 send _ message 方法并將發送方和接收方的地址指定為參數。
Start (‘ Net: : SMTP.start (‘ your.SMTP.server’,25) do | SMTP |’)的塊形式將自動關閉 SMTP 會話。
在 Ruby Cookbook 中,使用 Net: : SMTP 庫發送電子郵件被稱為極簡主義,因為您必須手動構建電子郵件字符串。盡管如此,這并不像你想象的那樣沒有希望。讓我們看看如何用 HTML 內容增強電子郵件,甚至添加附件。
在網上發送 HTML 電子郵件: : SMTP
查看這個引用消息部分的腳本示例。
Ruby
message=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brMIME-Version: 1.0brContent-type: text/htmlbrbrSubject: Any email subject you wantbrbrDate: Tue, 02 Jul 2019 15:00:34 +0800brbrA bit of plain text.brbr<strong>The beginning of your HTML content.</strong>brbr<h1>And some headline, as well.</h1>brbrEND_OF_MESSAGE
除了消息體中的 HTML 標記之外,我們還有兩個額外的頭: MIME-Version 和 Content-type。MIME 指的是 MIME。它是 Internet 電子郵件協議的擴展,允許您在單個消息體中組合不同的內容類型。MIME-Version 的值通常為1.0。它指示消息是 MIME 格式的
至于 Content-type 頭,一切都很清楚。在我們的示例中,有兩種類型-HTML 和純文本。另外,確保使用定義的邊界分隔這些內容類型。
除了 MIME-Version 和 Content-type,您可以使用其他 MIME 頭:
內容-傳輸-編碼-表示二進制到文本的編碼方案(7位、 Quoted-printable、 base64、8位或二進制)。
在網上發送帶附件的電子郵件: : SMTP
- Content-Disposition-指定表示樣式(內聯或附件)
讓我們添加一個附件,例如 PDF 文件。在這種情況下,我們需要將 Content-type 更新為 multipart/mix。另外,使用 pack (“ m”)函數用 base64編碼對附加文件進行編碼。
Ruby
require 'net/smtp'brfilename="/tmp/Attachment.pdf"brfile_content=File.read(filename)brencoded_content=[file_content].pack("m") # base64brmarker="AUNIQUEMARKER"
之后,你需要定義你的電子郵件的三個部分。
第1部分-主要標題
part1=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brSubject: Adding attachment to emailbrMIME-Version: 1.0brContent-Type: multipart/mixed; boundary=#{marker}br--#{marker}brEND_OF_MESSAGE
第2部分-消息行動
part2=<<END_OF_MESSAGEbrContent-Type: text/htmlbrContent-Transfer-Encoding:8bitbrA bit of plain text.br<strong>The beginning of your HTML content.</strong>br<h1>And some headline, as well.</h1>br--#{marker}brEND_OF_MESSAGE
第三部分-附件
part3=<<END_OF_MESSAGEbrContent-Type: multipart/mixed; name="#{filename}"brContent-Transfer-Encoding:base64brContent-Disposition: attachment; filename="#{filename}"br#{encoded_content}br--#{marker}--brEND_OF_MESSAGE
現在,我們可以把所有的部分放在一起,并最終確定劇本。這就是它看起來的樣子:
Ruby
brrequire 'net/smtp'brfilename="/tmp/Attachment.pdf"brfile_content=File.read(filename)brencoded_content=[file_content].pack("m") # base64brmarker="AUNIQUEMARKER"brpart1=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brSubject: Adding attachment to emailbrMIME-Version: 1.0brContent-Type: multipart/mixed; boundary=#{marker}
我可以發送電子郵件給多個收件人在網絡: : SMTP?
當然,你可以. send _ message 期望第二個和隨后的參數包含收件人的電子郵件。例如:
Ruby
Net::SMTP.start('your.smtp.server', 25) do |smtp|br smtp.send_message message,br 'info@yourrubyapp.com',br 'your@bestuserever1.com',br ‘your@bestuserever2.com’,br ‘your@bestuserever3.combrend
發送電子郵件的最佳 Ruby Gems
在 Ruby 生態系統中,您可以找到特定的電子郵件 gems,它們可以改善您的電子郵件發送體驗。
Ruby Mail
該庫旨在提供一個單點訪問管理所有電子郵件相關活動,包括發送和接收電子郵件。
Pony
您可能聽說過一個關于用一個命令發送電子郵件的童話故事。抓緊你們的帽子,因為它是真的,由小馬寶石提供。
ActionMailer
這是最流行的寶石發送電子郵件在 Rails 上。如果你的應用程序寫在上面,ActionMailer 肯定會出現。它允許您使用郵件類和視圖發送電子郵件
使用郵件陷阱測試使用 Net: : SMTP 的電子郵件發送
設置非常簡單。進入演示收件箱后,復制 SMTP“設置”選項卡上的 SMTP 憑據并將其插入到代碼中。或者,您可以在 Integrations 部分獲得一個簡單消息的即用模板。只要選擇一種編程語言或框架,你的應用程序是建立。
Ruby
require 'net/smtp'brmessage=<<END_OF_MESSAGEbrFrom: YourRubyApp <info@yourrubyapp.com>brTo: BestUserEver <your@bestuserever.com>brSubject: Any email subject you wantbrDate: Tue, 02 Jul 2019 15:00:34 +0800brLorem IpsumbrEND_OF_MESSAGEbrbrNet::SMTP.start('smtp.mailtrap.io', 587, '<username>', '<password>', :cram_md5) do |smtp|br smtp.send_message message,
如果一切正常,您將在郵件陷阱演示收件箱中看到您的消息。此外,您可以嘗試檢查您的 HTML 內容和附件的電子郵件。
您剛剛閱讀了關于如何使用 Ruby 測試和發送電子郵件的完整教程。希望您喜歡!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。