php Thinkphp結合composer實現smtp傳送郵件
阿新 • • 發佈:2018-12-30
傳送郵件也算是網站的常用功能之一,相信很多人已經在網上找到相應的原始碼(我以前也是用的那套原始碼,程式碼很老了),為了避免重複造輪子和節約時間,使用composer上的nette/mail包。
版本要求:
php:5.3.1+
nette/mail:2.3(更高的版本要php5.6+)
thinkphp:5.0+
關於composer的安裝百度上有很多,這裡不講述
安裝nette/mail
composer require nette/mail
使用
所有引數編碼使用UTF-8
郵件引數
use Nette\Mail\Message;
$mail = new Message;
$mail->setFrom('John <jo[email protected]>')//發件人
->addTo('[email protected]') // 收件人
->addTo('[email protected]') // 新增收件人
->setSubject('Order Confirmation') // 郵件主題
->setBody("Hello, Your order has been accepted."); // 郵件內容
html格式的郵件:
$mail->set HtmlBody('<h1>內容</h1>');
傳送郵件
use Nette\Mail\SendmailMailer;
$mailer = new SendmailMailer;
$mailer->send($mail);
先使用Message類填寫郵件資訊,使用SendmailMailer類傳送郵件
郵件配置
$mailer = new Nette\Mail\SmtpMailer([
'host' => 'smtp.gmail.com', // smtp主機地址
'username' => '[email protected] ', // smtp賬戶
'password' => '*****', // smtp密碼
// ssl配置資訊,如果沒有使用ssl形式傳送只要上面三個引數
'secure' => 'ssl',
'context' => [
'ssl' => [
'capath' => '/path/to/my/trusted/ca/folder',
],
],
]);
$mailer->send($mail);
完整程式碼
下面是在我專案中結合使用的,可以結合自己的專案修改
namespace library\service;
use app\admin\logic\ConfigLogic;
use Nette\Mail\Message;
use Nette\Mail\SmtpMailer;
use Nette\Utils\AssertionException;
use think\Exception;
class EmailService {
// SMTP伺服器
private $server;
// SMTP伺服器的埠
private $port = 25;
// SMTP伺服器的使用者郵箱
private $email;
//SMTP伺服器的使用者帳號
private $username;
//SMTP伺服器的使用者密碼
private $password;
// 發件人姓名
private $name = '';
public function __construct($config = []) {
// ConfigLogic是資料庫操作,也就是從資料庫中讀取配置
if (empty($config)) {
// 載入預設配置
$model = new ConfigLogic();
$config = $model->getSmtpConfig();
}
if (isset($config['server'])) $this->server = $config['server'];
if (isset($config['port'])) $this->port = $config['port'];
if (isset($config['email'])) $this->email = $config['email'];
if (isset($config['username'])) $this->username = $config['username'];
if (isset($config['password'])) $this->password = $config['password'];
if (isset($config['name'])) $this->name = $config['name'];
}
/**
* send: 傳送郵件
* @param string $accept 接收人
* @param string $title 郵件標題
* @param string $content 郵件內容
* @return bool 傳送成功返回true
*/
public function send($accept, $title, $content) {
$mail = new Message();
try {
$mail->setFrom($this->name . ' <' . $this->email . '>')
->addTo($accept)
->setSubject($title)
->setBody($content);
$mailer = new SmtpMailer([
'host' => $this->server,
'username' => $this->username,
'password' => $this->password,
]);
$mailer->send($mail);
return true;
} catch (AssertionException $e) {
return false;
}
}
}
如果複製到自己專案中記得修改名稱空間!!!修改名稱空間!!!修改名稱空間!!!