整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          Laravel發(fā)送郵件

          Laravel發(fā)送郵件

          Laravel 的郵件功能基于熱門(mén)的 SwiftMailer 函數(shù)庫(kù)之上,提供了一個(gè)簡(jiǎn)潔的 API

          Laravel為SMTP、Mailgun、Mandrill、Amazon、SES、PHP的mail函數(shù)、以及sendmail提供了驅(qū)動(dòng),可以非常方便靈活地使用Laravel來(lái)發(fā)送郵件

          更多可參考Laravel郵件服務(wù)文檔

          那么Laravel如何使用SMTP來(lái)發(fā)送郵件呢? 往下看

          配置

          郵件的配置文件在config/mail.php文件中

          我們只需要修改.env里的配置項(xiàng)即可

          注: 需要先開(kāi)啟郵箱的SMTP郵件服務(wù), 另QQ郵箱的SMTP密碼是獨(dú)立的, 并非郵箱密碼

          MAIL_DRIVER=smtp
          MAIL_HOST=smtp.xx.com
          MAIL_PORT=587
          MAIL_USERNAME=username
          MAIL_PASSWORD=password
          MAIL_ENCRYPTION=tls

          發(fā)信

          首先需要先把Mail類(lèi)use進(jìn)來(lái)

          use Illuminate\Support\Facades\Mail;
          1. 發(fā)送純文本郵件$txt='郵件文本'; $from='發(fā)件人郵箱'; $name='Hoe'; $title='郵件主題'; $to='收件人'; Mail::raw($txt, function ($message) use ($from, $name, $title, $to) { $message->from($form, $name); $message->subject($title); $message->to($to); // 收件人郵箱 });
          2. 發(fā)送HTML模板郵件$data=['name'=> 'Hoe']; // 賦值到模板里的值 Mail::send('mail', $data, function ($message) use ($from, $name, $title, $to) { $message->from($from, $name); $message->subject($title); $message->to($to); // 收件人郵箱 });
          3. 在郵件中添加附件// 發(fā)送附件 Mail::send('mail', [], function ($message) use ($from, $name, $title, $to) { $message->from($from, $name); $message->subject($title); $message->to($to); // 收件人郵箱 $attachment=storage_path('xx.doc'); $message->attach($attachment, ['as'=>'xx.doc']); });
          4. 發(fā)送帶圖片的郵件除了發(fā)送附件之外,還可以發(fā)送帶有圖片的郵件 `$message`里的`embed`方法可以在郵件內(nèi)容中插入圖片 `$message`里的`embedData`方法可以將本地圖片讀取到內(nèi)存然后渲染到郵件視圖 $data=['img'=> 'https://www.anysgin.com/usr/themes/PureLoveForTypecho/images/banner2.jpg']; Mail::send('mail', $data, function ($message) use ($from, $name, $title, $to) { $message->from($from, $name); $message->subject($title); $message->to($to); // 收件人郵箱 }); // 模板里使用: <img src="{{ $message->embed($img) }}">
          5. 如果隊(duì)列配置好了之后, 還可以使用隊(duì)列的形式發(fā)信$data=['name'=> 'Hoe']; // 賦值到模板里的值 Mail::queue('mail', $data, function ($message) use ($from, $name, $title, $to) { $message->from($from, $name); $message->subject($title); $message->to($to); // 收件人郵箱 });

          為數(shù)據(jù)分析師,經(jīng)常性的會(huì)需要到服務(wù)器上做一些取數(shù)/數(shù)據(jù)清洗的工作,但往往這些工作會(huì)特別耗時(shí),如果我們可以在我們的腳本中加入郵件提醒的功能,提醒我們?nèi)蝿?wù)完成,那效率會(huì)提升很多

          一般發(fā)郵件方法

          我以前在通過(guò)Python實(shí)現(xiàn)自動(dòng)化郵件功能的時(shí)候是這樣的:

          import smtplib
          from email.mime.text import MIMEText
          from email.header import Header
          # 發(fā)送郵箱服務(wù)器
          smtpserver='smtp.sina.com'
          # 發(fā)送郵箱用戶(hù)/密碼
          user='username@sina.com'
          password='123456'
          # 發(fā)送郵箱
          sender='username@sina.com'
          # 接收郵箱
          receiver='receive@126.com'
          # 發(fā)送郵件主題
          subject='Python email test'
          # 編寫(xiě)HTML類(lèi)型的郵件正文
          msg=MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
          msg['Subject']=Header(subject, 'utf-8')
          # 連接發(fā)送郵件
          smtp=smtplib.SMTP()
          smtp.connect(smtpserver)
          smtp.login(user, password)
          smtp.sendmail(sender, receiver, msg.as_string())
          smtp.quit()
          

          其實(shí),這段代碼也并不復(fù)雜,只要你理解使用過(guò)郵箱發(fā)送郵件,那么以下問(wèn)題是你必須要考慮的:

          • 你登錄的郵箱帳號(hào)/密碼
          • 對(duì)方的郵箱帳號(hào)
          • 郵件內(nèi)容(標(biāo)題,正文,附件)
          • 郵箱服務(wù)器(SMTP.xxx.com/pop3.xxx.com)

          yagmail 實(shí)現(xiàn)發(fā)郵件

          • yagmail 可以更簡(jiǎn)單的來(lái)實(shí)現(xiàn)自動(dòng)發(fā)郵件功能。
          github項(xiàng)目地址: https://github.com/kootenpv/yagmail
          
          • 安裝
          pip install yagmail 
          
          • 簡(jiǎn)單例子
          import yagmail
          #鏈接郵箱服務(wù)器
          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']
          # 發(fā)送郵件
          yag.send('taaa@126.com', 'subject', contents)
          

          總共四行代碼搞定,是不是比上面的例子簡(jiǎn)單太多了。

          • 給多個(gè)用戶(hù)發(fā)送郵件,只需要將接收郵箱 變成一個(gè)list即可。
          yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)
          
          • 發(fā)送帶附件的郵件,只需要添加要發(fā)送的附件列表即可

          設(shè)您有一個(gè)可以工作的 Ruby 應(yīng)用程序,并且需要向其添加電子郵件傳遞功能。這可能與用戶(hù)身份驗(yàn)證或任何其他類(lèi)型的事務(wù)性電子郵件有關(guān),這沒(méi)有什么區(qū)別。本教程旨在幫助您實(shí)現(xiàn)使用 Ruby 發(fā)送電子郵件。

          用 Ruby 發(fā)送電子郵件的選項(xiàng)

          大多數(shù)情況下,你可以從三個(gè)選項(xiàng)中選擇一個(gè)。

          最簡(jiǎn)單的方法是使用 Net: : SMTP 類(lèi)。它提供了通過(guò) SMTP 發(fā)送電子郵件的功能。該選項(xiàng)的缺點(diǎn)是 Net: : SMTP 缺少撰寫(xiě)電子郵件的功能。你可以自己創(chuàng)建,但這需要時(shí)間。

          第二種選擇是使用專(zhuān)用的 Ruby gem,如 Mail、 Pony 或其他。這些解決方案使您能夠以簡(jiǎn)單有效的方式處理電子郵件活動(dòng)。Action Mailer 是一個(gè)完美的電子郵件解決方案,通過(guò) Rails 的棱鏡。而且,很有可能,這將是你的選擇。

          第三個(gè)選項(xiàng)是類(lèi) Socket。通常,這個(gè)類(lèi)允許您設(shè)置流程之間或流程內(nèi)部的通信。因此,電子郵件發(fā)送也可以用它來(lái)實(shí)現(xiàn)。然而,事實(shí)是 Socket 并沒(méi)有為您提供廣泛的功能,您也不太可能想要使用它。

          現(xiàn)在,讓我們嘗試使用所描述的每個(gè)解決方案發(fā)送電子郵件。

          如何通過(guò) Net: : SMTP 在 Ruby 中發(fā)送電子郵件

          根據(jù)我的經(jīng)驗(yàn),在一個(gè)普通的 web 應(yīng)用程序中使用這個(gè)選項(xiàng)是不常見(jiàn)的。但是,如果您在某些物聯(lián)網(wǎng)設(shè)備上使用 mruby (Ruby 語(yǔ)言的一種輕量級(jí)實(shí)現(xiàn)) ,那么通過(guò) Net: : SMTP 發(fā)送電子郵件可能是合適的。此外,如果在無(wú)服務(wù)器計(jì)算中使用,例如 AWS Lambda,它也會(huì)這樣做。首先查看這個(gè)腳本示例,然后我們將詳細(xì)介紹它。

          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

          這是一個(gè)通過(guò) SMTP 發(fā)送文本電子郵件的簡(jiǎn)單示例(可以在這里找到官方文檔)。您可以看到四個(gè)標(biāo)題: 發(fā)件人、收件人、主題和日期。請(qǐng)記住,您必須將它們與電子郵件正文中的空行分開(kāi)。同樣重要的是連接到 SMTP 服務(wù)器。

          Net::SMTP.start('your.smtp.server', 25) do |smtp|

          Start (‘ your.smtp.server’,25) do | smtp |

          自然,這里將顯示您的數(shù)據(jù),而不是“ your.smtp.server”,并且25是默認(rèn)端口號(hào)。如果需要,可以指定其他詳細(xì)信息,如用戶(hù)名、密碼或身份驗(yàn)證方案(普通、登錄和 cram _ md5)。它可能看起來(lái)如下:

          `Net::SMTP.start('your.smtp.server', 25, ‘localhost’, ‘username’, ‘password’ :plain) do |smtp|`

          在這里,您將使用純文本格式的用戶(hù)名和密碼連接到 SMTP 服務(wù)器,客戶(hù)機(jī)的主機(jī)名將被標(biāo)識(shí)為 localhost。

          之后,可以使用 send _ message 方法并將發(fā)送方和接收方的地址指定為參數(shù)。

          Start (‘ Net: : SMTP.start (‘ your.SMTP.server’,25) do | SMTP |’)的塊形式將自動(dòng)關(guān)閉 SMTP 會(huì)話(huà)。

          在 Ruby Cookbook 中,使用 Net: : SMTP 庫(kù)發(fā)送電子郵件被稱(chēng)為極簡(jiǎn)主義,因?yàn)槟仨毷謩?dòng)構(gòu)建電子郵件字符串。盡管如此,這并不像你想象的那樣沒(méi)有希望。讓我們看看如何用 HTML 內(nèi)容增強(qiáng)電子郵件,甚至添加附件。

          在網(wǎng)上發(fā)送 HTML 電子郵件: : SMTP

          查看這個(gè)引用消息部分的腳本示例。


          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 標(biāo)記之外,我們還有兩個(gè)額外的頭: MIME-Version 和 Content-type。MIME 指的是 MIME。它是 Internet 電子郵件協(xié)議的擴(kuò)展,允許您在單個(gè)消息體中組合不同的內(nèi)容類(lèi)型。MIME-Version 的值通常為1.0。它指示消息是 MIME 格式的

          至于 Content-type 頭,一切都很清楚。在我們的示例中,有兩種類(lèi)型-HTML 和純文本。另外,確保使用定義的邊界分隔這些內(nèi)容類(lèi)型。

          除了 MIME-Version 和 Content-type,您可以使用其他 MIME 頭:

          內(nèi)容-傳輸-編碼-表示二進(jìn)制到文本的編碼方案(7位、 Quoted-printable、 base64、8位或二進(jìn)制)。


          在網(wǎng)上發(fā)送帶附件的電子郵件: : SMTP

          - Content-Disposition-指定表示樣式(內(nèi)聯(lián)或附件)

          讓我們添加一個(gè)附件,例如 PDF 文件。在這種情況下,我們需要將 Content-type 更新為 multipart/mix。另外,使用 pack (“ m”)函數(shù)用 base64編碼對(duì)附加文件進(jìn)行編碼。

          Ruby

          require 'net/smtp'brfilename="/tmp/Attachment.pdf"brfile_content=File.read(filename)brencoded_content=[file_content].pack("m")   # base64brmarker="AUNIQUEMARKER"


          之后,你需要定義你的電子郵件的三個(gè)部分。

          第1部分-主要標(biāo)題


          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部分-消息行動(dòng)


          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

          現(xiàn)在,我們可以把所有的部分放在一起,并最終確定劇本。這就是它看起來(lái)的樣子:

          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}

          我可以發(fā)送電子郵件給多個(gè)收件人在網(wǎng)絡(luò): : SMTP?


          當(dāng)然,你可以. send _ message 期望第二個(gè)和隨后的參數(shù)包含收件人的電子郵件。例如:


          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


          發(fā)送電子郵件的最佳 Ruby Gems

          在 Ruby 生態(tài)系統(tǒng)中,您可以找到特定的電子郵件 gems,它們可以改善您的電子郵件發(fā)送體驗(yàn)。

          Ruby Mail


          該庫(kù)旨在提供一個(gè)單點(diǎn)訪問(wèn)管理所有電子郵件相關(guān)活動(dòng),包括發(fā)送和接收電子郵件。
          Pony

          您可能聽(tīng)說(shuō)過(guò)一個(gè)關(guān)于用一個(gè)命令發(fā)送電子郵件的童話(huà)故事。抓緊你們的帽子,因?yàn)樗钦娴模尚●R寶石提供。

          ActionMailer


          這是最流行的寶石發(fā)送電子郵件在 Rails 上。如果你的應(yīng)用程序?qū)懺谏厦妫珹ctionMailer 肯定會(huì)出現(xiàn)。它允許您使用郵件類(lèi)和視圖發(fā)送電子郵件

          使用郵件陷阱測(cè)試使用 Net: : SMTP 的電子郵件發(fā)送


          設(shè)置非常簡(jiǎn)單。進(jìn)入演示收件箱后,復(fù)制 SMTP“設(shè)置”選項(xiàng)卡上的 SMTP 憑據(jù)并將其插入到代碼中。或者,您可以在 Integrations 部分獲得一個(gè)簡(jiǎn)單消息的即用模板。只要選擇一種編程語(yǔ)言或框架,你的應(yīng)用程序是建立。

          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 內(nèi)容和附件的電子郵件。


          您剛剛閱讀了關(guān)于如何使用 Ruby 測(cè)試和發(fā)送電子郵件的完整教程。希望您喜歡!


          主站蜘蛛池模板: 一区二区三区视频在线观看| 亚洲国产欧美一区二区三区| 天天看高清无码一区二区三区 | 国产亚洲一区二区手机在线观看| 国产精品一区二区久久精品| 综合无码一区二区三区| 亚洲字幕AV一区二区三区四区| 精品少妇一区二区三区视频| 丰满人妻一区二区三区视频| 国产视频一区在线播放| 亚洲日韩AV无码一区二区三区人| 污污内射在线观看一区二区少妇| 中文无码精品一区二区三区| 狠狠做深爱婷婷综合一区 | 国产日韩一区二区三区在线播放 | 成人毛片一区二区| 国产乱码精品一区二区三区中| 久久久91精品国产一区二区| 亚洲色欲一区二区三区在线观看| 成人免费av一区二区三区| 538国产精品一区二区在线| 一区二区高清在线| 丰满人妻一区二区三区视频53| 精品国产一区二区三区久久蜜臀| av无码精品一区二区三区四区| 日韩一区二区三区在线精品| 一区二区三区在线观看视频| 亚洲一区无码精品色| 精品一区二区三区高清免费观看 | 无码国产精品一区二区免费| 日韩精品一区二区三区中文精品| 偷拍激情视频一区二区三区| 伊人久久一区二区三区无码| 好爽毛片一区二区三区四无码三飞| 无码日本电影一区二区网站| 中文字幕不卡一区| AV鲁丝一区鲁丝二区鲁丝三区| 精品一区二区三区在线观看l| 亚洲Av永久无码精品一区二区| 亚洲视频一区在线观看| 无码日韩人妻AV一区二区三区|