1. 程式人生 > >php Thinkphp結合composer實現smtp傳送郵件

php Thinkphp結合composer實現smtp傳送郵件

傳送郵件也算是網站的常用功能之一,相信很多人已經在網上找到相應的原始碼(我以前也是用的那套原始碼,程式碼很老了),為了避免重複造輪子和節約時間,使用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;
        }
    }
}

如果複製到自己專案中記得修改名稱空間!!!修改名稱空間!!!修改名稱空間!!!