2019年1月3日 星期四
Mailtrap.io這個網站真有趣
他是一個假的Smtp Server
只要用Gmail信箱註冊
就可以申請一個假的信箱
那這樣的網站可以怎麼用呢?
假使當你設計一個網站,而且有用到Email寄信功能時
可能因為還在開發中、或者本身電腦尚未安裝sendmail寄信功能
就可以利用到這樣的Fake SMTP Server幫你寄、收信件
Laravel中的.env預設的Mail主機就是MailTrap
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=16xxxxxxxxxxxxx
MAIL_PASSWORD=05xxxxxxxxxxxxx
舉例來說:
假如啟用了Laravel 5.7的EmailVerify功能
使用者註冊後還需要收Email確認
也就是說主機會寄信給使用者
使用者收信點選連結後帳戶才會啟用
這時候MailTrap就可以派上用場了
但由於我們在.env環境設定檔中輸入的是smtp.mailtrap.io
所以儘管大家keyin的Email的信箱多天馬行空
通通都會送到Mailtrap收件匣中
參考網站:
2016年6月10日 星期五
在E-mail標題使用UTF8字元,解決信件標題亂碼的情形
一般而言,當我們在寄信的時候,如果都採用English或是ASCII範圍的內文字寄送時,收到信件的人皆可正確地閱讀信件內容及標題。但是隨著國際化的普及,ASCII的編碼已經不能應付各國多文字的需求,於是漸漸改採用UTF-8編碼格式。
然而,寄送信件的服務,似乎沒有跟上這樣的改變,嚴格來說,各國SMTP服務預設都會採用各國的編碼,所以一旦輸入了中文的難字或特殊字、或是寄信給其他國家時,亂碼的情形就會發生。
好在,我們可以指定信件內文(body)的編碼格式,這必須輸入在信件的表頭(eamil header)中,指定的格式類似像:
可是,這樣的設定並不更改標題的編碼,因為標題的編碼是獨立的,且其編碼預設為ASCII碼。好在,RFC 1342亦提供了更改的方法,只要遵照其格式以可以修正其編碼,其格式像是:
說真的,這樣的格式還滿奇怪的,左右兩個"=",然後藉由"?"把要設定的參數隔開,倘若把這樣的東東再加到PHP程式中,鐵定有看沒有懂。
第1個參數:charset,就是要採用的編碼,當然若要字元能正常顯示,就要採用UTF-8萬國碼
第2個參數:encoding,通常我們會輸入B或Q,這樣的意義是讓信件再用Base64編碼過後傳遞,至於為何/什麼是Base64編碼,簡言之,就是將信件內容不管是文字、影像、影音、其他附加檔案等等....都經過編碼後再傳遞,收到的人自動在解碼還原。聽不懂嗎?那再換句話說就是:「採用Base64編碼技術的話,信件才能寄送文字以外的檔案格式。」
第3個參數:就是要編碼的標題文字為何?但既然第2個參數已經採用Base64編碼,那我們當然也要把輸入的中文利用php函式編碼轉換。
所以我們的寫法會像是:
針對上面的說明,我們可以簡單的設計一個寄送信件的PHP程式
參考網頁:
然而,寄送信件的服務,似乎沒有跟上這樣的改變,嚴格來說,各國SMTP服務預設都會採用各國的編碼,所以一旦輸入了中文的難字或特殊字、或是寄信給其他國家時,亂碼的情形就會發生。
好在,我們可以指定信件內文(body)的編碼格式,這必須輸入在信件的表頭(eamil header)中,指定的格式類似像:
Content-Type: text/plain; charset=utf-8可是,這樣的設定並不更改標題的編碼,因為標題的編碼是獨立的,且其編碼預設為ASCII碼。好在,RFC 1342亦提供了更改的方法,只要遵照其格式以可以修正其編碼,其格式像是:
=?charset?encoding?encoded-text?=說真的,這樣的格式還滿奇怪的,左右兩個"=",然後藉由"?"把要設定的參數隔開,倘若把這樣的東東再加到PHP程式中,鐵定有看沒有懂。
第1個參數:charset,就是要採用的編碼,當然若要字元能正常顯示,就要採用UTF-8萬國碼
第2個參數:encoding,通常我們會輸入B或Q,這樣的意義是讓信件再用Base64編碼過後傳遞,至於為何/什麼是Base64編碼,簡言之,就是將信件內容不管是文字、影像、影音、其他附加檔案等等....都經過編碼後再傳遞,收到的人自動在解碼還原。聽不懂嗎?那再換句話說就是:「採用Base64編碼技術的話,信件才能寄送文字以外的檔案格式。」
第3個參數:就是要編碼的標題文字為何?但既然第2個參數已經採用Base64編碼,那我們當然也要把輸入的中文利用php函式編碼轉換。
所以我們的寫法會像是:
=?UTF-8?B?".base64_encode('主旨')."?=針對上面的說明,我們可以簡單的設計一個寄送信件的PHP程式
<?php
$to = " recipient@example.com “; //收件者
$subject = "=?UTF-8?B?".base64_encode(‘信件標題‘)."?="; //信件標題,解決亂碼問題
$msg = “信件內容“; //信件內容
$header = "'From: example@example.com'."\r\n"
.'Content-Type: text/plain; charset=utf-8'."\r\n";
if(mail($to, $subject, $msg, $header)){
echo “信件已經發送成功。“;//寄信成功就會顯示的提示訊息
}else{
echo “信件發送失敗!“;//寄信失敗顯示的錯誤訊息
}
?>參考網頁:
訂閱:
文章 (Atom)



