南昌雅騰教育今天介紹一個PHP郵件發(fā)送庫:Swiftmailer,它是一個類似PHPMailer郵件發(fā)送組件,它也支持HTML格式、附件發(fā)送,但它發(fā)送效率相當高,成功率也非常高,很多PHP框架都集成了Swiftmailer。
Swiftmailer需要PHP 7.0或更高版本,(proc_*函數(shù)可用。)
安裝
我們使用Composer來安裝Swiftmailer:
composer require "swiftmailer/swiftmailer:^6.0"
基本使用
只需填寫郵箱服務器相關配置,然后填寫郵件標題、發(fā)送對象和郵件內容,運行即可完成發(fā)送郵件任務:
require_once '/path/to/vendor/autoload.php'; $transport = (new Swift_SmtpTransport('smtp.163.com', 25)) // 郵箱服務器 ->setUsername('your username') // 郵箱用戶名 ->setPassword('your password') // 郵箱密碼,有的郵件服務器是授權碼 ; $mailer = new Swift_Mailer($transport); $message = (new Swift_Message('Wonderful Subject')) // 郵件標題 ->setFrom(['john@doe.com' => 'John Doe']) // 發(fā)送者 ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) //發(fā)送對象,數(shù)組形式支持多個 ->setBody('Here is the message itself') //郵件內容 ; $result = $mailer->send($message);
如果發(fā)送成功,會返回$result的值為1,即true。
高級應用
發(fā)送郵件時最關鍵的是創(chuàng)建消息體,在Swift Mailer中創(chuàng)建消息是通過使用庫提供的各種MIME實體完成的,因此我們不需要花太多時間去了解如何處理MIME實體,只需拿來使用即可。
Swift Mailer提供了創(chuàng)建郵件消息的一系列方法,下面列舉我們常用到的一些方法:
setSubject():郵件主題
setFrom():發(fā)件人地址,數(shù)組形式,可以是多個發(fā)件人
setTo():收件人地址,數(shù)組形式,可以是多個收件人
setBody():郵件內容
addPart():郵件內容指定輸出類型,支持html內容輸出
attach():添加附件
setCc():抄送,支持多個郵箱地址
setBcc():密送,支持多個郵箱地址
常見問題
1. 報錯信息:Fatal error: Uncaught Swift_TransportException: Failed to authenticate on SMTP server with username xxx...
很顯然是郵件服務的賬號密碼不正確導致驗證不能通過。目前163免費郵和QQ郵箱等提供給第三方客戶端使用的SMTP/POP等服務需要設置一個授權碼,具體可以到郵箱里設置。然后將正確的郵箱賬號和授權碼配置到Swift Mailer中即可。
2. 報錯信息:PHP Fatal error: Uncaught Swift_TransportException: Connection could not be established with host smtp.163.com
不能連接上郵件服務器。如果出現(xiàn)這個情況,建議嘗試改成ssl協(xié)議。筆者在本地使用官方的25端口發(fā)送郵件一切正常,到放到公網(wǎng)服務器上就提示如上錯誤信息了,折騰了好久,改下協(xié)議和端口,成功了:
$transport = (new Swift_SmtpTransport('ssl://smtp.163.com', 465))