ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP5 を使用してメールを送信する方法

ThinkPHP5 を使用してメールを送信する方法

一个新手
一个新手オリジナル
2017-09-14 09:40:532858ブラウズ

1. Composer は phpmailer をインストールします


composer require phpmailer/phpmailer

2. ThinkPHP でメールサービスクラスをカプセル化します

拡張ディレクトリ extend/Mail.php ファイルにカプセル化します。内容は次のとおりです。注: 添付ファイルを送信する場合は、英語のパスを使用することをお勧めします。

中国語のパスを使用すると、添付ファイルの送信に失敗したり、添付ファイルなしでメールを受信したりする可能性があります。


上記で必要ないくつかの設定パラメータは、拡張機能設定ディレクトリ application/extra/mail.php ファイルに配置します。内容は次のとおりです:

<?php
/**
* 邮件服务类
*/
class Mail extends \PHPMailer
{
    function __construct()
    {
        date_default_timezone_set(&#39;PRC&#39;);                          // 默认时区设置
         $this->CharSet = config(&#39;mail.charset&#39;);                   // 邮件编码设置
        $this->isSMTP();                                           // 启用SMTP服务
        $this->SMTPDebug = config(&#39;mail.smtp_debug&#39;);              // Debug模式级别
        $this->Debugoutput = config(&#39;mail.debug_output&#39;);          // Debug输出类型
        $this->Host = config(&#39;mail.host&#39;);                         // SMTP服务器地址
        $this->Port = config(&#39;mail.port&#39;);                         // 端口号
        $this->SMTPAuth = config(&#39;mail.smtp_auth&#39;);                // SMTP登录认证
        $this->SMTPSecure = config(&#39;mail.smtp_secure&#39;);            // SMTP安全协议
        $this->Username = config(&#39;mail.username&#39;);                 // SMTP登录邮箱
        $this->Password = config(&#39;mail.password&#39;);                 // SMTP登录密码
        $this->setFrom(config(&#39;mail.from&#39;), config(&#39;mail.from_name&#39;));            // 发件人邮箱和名称
        $this->addReplyTo(config(&#39;mail.reply_to&#39;), config(&#39;mail.reply_to_name&#39;)); // 回复邮箱和名称
    } 
    /**
     * 发送邮件
     * @param  [type] $toMail      收件人地址
     * @param  [type] $toName      收件人名称
     * @param  [type] $subject     邮件主题
     * @param  [type] $content     邮件内容,支持html
     * @param  [type] $attachment  附件列表。文件路径或路径数组
     * @return [type]              成功返回true,失败返回错误消息
     */
    function sendMail($toMail, $toName, $subject, $content, $attachment = null)
    {
        $this->addAddress($toMail, $toName);
        $this->Subject = $subject;
        $this->msgHTML($content);      
        if($attachment) { // 添加附件
            if(is_string($attachment)){
                is_file($attachment) && $this->AddAttachment($attachment);
            }
            else if(is_array($attachment)){
                foreach ($attachment as $file) {
                    is_file($file) && $this->AddAttachment($file);
                }
            }      
        } 
        if(!$this->send()){ // 发送
            return $this->ErrorInfo;
        }
        else{
            return true;
        }
    }
}

注: 一般的なデフォルトのポートは 25 です。セキュリティ プロトコル ssl が使用されている場合、ポート番号は通常 465 または 587 です。
たとえば、126 メールボックス。 Alibaba Cloud サーバーでは、安全でないプロトコルのポート 25 が禁止されているため、安全なプロトコルを使用することをお勧めします。

3. テスト

コントローラーのメソッドにテスト コードを追加します:

<?php
/**
 * 邮件服务相关配置
 */
return [
	&#39;charset&#39; => &#39;utf-8&#39;,                  // 邮件编码
	&#39;smtp_debug&#39; => 0,                     // Debug模式。0: 关闭,1: 客户端消息,2: 客户端和服务器消息,3: 2和连接状态,4: 更详细
	&#39;debug_output&#39; => &#39;html&#39;,              // Debug输出类型。`echo`(默认),`html`,或`error_log`
	&#39;host&#39; => &#39;smtp.126.com&#39;,              // SMTP服务器地址
	&#39;port&#39; => 465,                         // 端口号。默认25
	&#39;smtp_auth&#39; => true,                   // 启用SMTP认证
	&#39;smtp_secure&#39; => &#39;ssl&#39;,                // 启用安全协议。&#39;&#39;(默认),&#39;ssl&#39;或&#39;tls&#39;,留空不启用
	&#39;username&#39; => &#39;yourname@example.com&#39;,  // SMTP登录邮箱
	&#39;password&#39; => &#39;yourpassword&#39;,          // SMTP登录密码。126邮箱使用客户端授权码,QQ邮箱用独立密码
	&#39;from&#39; => &#39;from@example.com&#39;,          // 发件人邮箱
	&#39;from_name&#39; => &#39;name&#39;,                 // 发件人名称
	&#39;reply_to&#39; => &#39;&#39;,                      // 回复邮箱的地址。留空取发件人邮箱
	&#39;reply_to_name&#39; => &#39;&#39;,                 // 回复邮箱人名称。留空取发件人名称
];

ここでは 126 メールボックス、セキュリティ プロトコル ssl、ポート番号 465 を使用し、HTML コンテンツを送信すると、テストは成功します。


以上がThinkPHP5 を使用してメールを送信する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。