tp配置邮箱发送邮件

14 篇文章 2 订阅

一、获取邮箱的授权码(这里以126邮箱为案例)

1.登录邮箱,点击设置

登录邮箱找到IMAP|SMTP 或 POP3|SMTP

2.开启IMAP|SMTP 或 POP3|SMTP服务

开启IMAP|SMTP 或 POP3|SMTP服务

3.获取授权码到授权码

二、下载邮箱类库

方法1.使用composer安装phpmailer(推荐使用此方法)

composer require phpmailer/phpmailer

方法2.手动下载引用

下载地址:https://github.com/PHPMailer/PHPMailer
下载PHPmailer类

三、封装通用函数

下面函数使用到的config配置文件

邮箱配置

方法1.composer安装的封装

/**
 * Notes:发送邮件
 * @param $tomail //收件人地址
 * @param string $subject  //主题
 * @param string $body  //内容
 * @param null $attachment  //附件
 * @param array $option // 额外参数
 * @return bool
 */
function send_mail($tomail, $subject = '', $body = '', $attachment = null, $option = array()) {
	// config读取的是配置文件里的配置
    $username = config('my_mail.platform_126.username');
    $senderName = config('my_mail.platform_126.sender_name', $username);
    $password = config('my_mail.platform_126.password');
    $defualtOption = array(
        'toname'            => '', // 接收方姓名
    );
    foreach($defualtOption as $key => $item){
        if(!isset($option[$key])){
            $option[$key] = $item;
        }
    }
    $mail = new \PHPMailer\PHPMailer\PHPMailer(); //实例化PHPMailer对象
    $mail->CharSet = 'UTF-8';           //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
    $mail->IsSMTP();                    // 设定使用SMTP服务
    $mail->SMTPDebug = 0;               // SMTP调试功能 0=关闭 1 = 错误和消息 2 = 消息
    $mail->SMTPAuth = true;             // 启用 SMTP 验证功能
    $mail->SMTPSecure = config('my_mail.platform_126.smtp_secure'); // 使用安全协议
    $mail->Host = config('my_mail.platform_126.host'); // 企业邮局域名
    $mail->Port = config('my_mail.platform_126.port'); //设置ssl连接smtp服务器的远程服务器端口号 可选465或587

    $mail->Username = $username;    //邮件发送人的用户名(请填写完整的email地址)
    $mail->Password = $password;    // 邮件发送人的 密码 (授权码)

    $mail->SetFrom($username, $senderName);
    $replyEmail = '';                   //留空则为发件人EMAIL
    $replyName = '';                    //回复名称(留空则为发件人名称)
    $mail->AddReplyTo($replyEmail, $replyName);  //回复的地址

    $mail->Subject = $subject;   //邮件标题
    $mail->MsgHTML($body);       //邮件内容

    $mail->AddAddress($tomail, $option['toname']);  //收件人地址,("收件人email","收件人姓名")

    if (is_array($attachment)) { // 添加附件
        foreach ($attachment as $file) {
            is_file($file) && $mail->AddAttachment($file);
        }
    }
    return $mail->Send() ? true : $mail->ErrorInfo;
}

方法2.通过引用到extend的封装

function send_mail($tomail, $subject = '', $body = '', $attachment = null, $option = array()) {
	// config读取的是配置文件里的配置
    $username = config('my_mail.platform_126.username');
    $senderName = config('my_mail.platform_126.sender_name', $username);
    $password = config('my_mail.platform_126.password');
    $defualtOption = array(
        'toname'            => '', // 接收方姓名
    );
    foreach($defualtOption as $key => $item){
        if(!isset($option[$key])){
            $option[$key] = $item;
        }
    }
    $mail = new \PHPMailer\PHPMailer(); //实例化PHPMailer对象
    $mail->CharSet = 'UTF-8';           //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
    $mail->IsSMTP();                    // 设定使用SMTP服务
    $mail->SMTPDebug = 0;               // SMTP调试功能 0=关闭 1 = 错误和消息 2 = 消息
    $mail->SMTPAuth = true;             // 启用 SMTP 验证功能
    $mail->SMTPSecure = config('my_mail.platform_126.smtp_secure'); // 使用安全协议
    $mail->Host = config('my_mail.platform_126.host'); // 企业邮局域名
    $mail->Port = config('my_mail.platform_126.port'); //设置ssl连接smtp服务器的远程服务器端口号 可选465或587

    $mail->Username = $username;    //邮件发送人的用户名(请填写完整的email地址)
    $mail->Password = $password;    // 邮件发送人的 密码 (授权码)

    $mail->SetFrom($username, $senderName);
    $replyEmail = '';                   //留空则为发件人EMAIL
    $replyName = '';                    //回复名称(留空则为发件人名称)
    $mail->AddReplyTo($replyEmail, $replyName);  //回复的地址

    $mail->Subject = $subject;   //邮件标题
    $mail->MsgHTML($body);       //邮件内容

    $mail->AddAddress($tomail, $option['toname']);  //收件人地址,("收件人email","收件人姓名")

    if (is_array($attachment)) { // 添加附件
        foreach ($attachment as $file) {
            is_file($file) && $mail->AddAttachment($file);
        }
    }
    return $mail->Send() ? true : $mail->ErrorInfo;
}

参考资料

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面是一个使用 thinkphp6 发送邮件验证码的示例: 1. 首先,需要在 `config/mail.php` 文件中进行邮箱配置: ```php return [ // 默认发送邮件设置 'default' => [ // 邮件服务器地址 'host' => 'smtp.163.com', // 邮件服务器端口 'port' => 465, // 发件人邮箱地址 'username' => 'your_email@example.com', // 邮箱授权码,非邮箱登录密码 'password' => 'your_email_password', // 邮箱加密方式,ssl 或 tls 'secure' => 'ssl', // 默认发件人 'from' => [ 'address' => 'your_email@example.com', 'name' => 'your_name', ], ], ]; ``` 2. 然后,创建一个 `MailService` 类,用于发送邮件: ```php <?php namespace app\service; use think\facade\Cache; use think\facade\Config; use think\facade\View; use think\facade\Lang; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; class MailService { /** * 发送邮件验证码 * * @param string $email 邮箱地址 * @param string $type 验证码类型,例如 register、forget * @return boolean */ public function sendVerifyCode($email, $type) { // 生成验证码 $code = mt_rand(100000, 999999); // 邮件主题和内容 $subject = Lang::get('mail.' . $type . '_subject'); $body = View::fetch('mail/' . $type . '_body', ['code' => $code]); // 实例化 PHPMailer 对象 $mail = new PHPMailer(true); try { // 配置 SMTP 服务器 $mail->SMTPDebug = 0; // 调试:0 关闭,1 开启 $mail->isSMTP(); $mail->Host = Config::get('mail.default.host'); $mail->SMTPAuth = true; $mail->Username = Config::get('mail.default.username'); $mail->Password = Config::get('mail.default.password'); $mail->SMTPSecure = Config::get('mail.default.secure'); $mail->Port = Config::get('mail.default.port'); // 设置发件人、收件人、邮件主题、内容 $mail->setFrom(Config::get('mail.default.from.address'), Config::get('mail.default.from.name')); $mail->addAddress($email); $mail->Subject = $subject; $mail->Body = $body; // 发送邮件 $mail->send(); // 将验证码存入缓存,有效期为 5 分钟 Cache::set('verify_code:' . $email, $code, 300); return true; } catch (Exception $e) { return false; } } } ``` 3. 最后,在控制器中调用 `MailService` 类的 `sendVerifyCode` 方法即可: ```php <?php namespace app\controller; use app\service\MailService; use think\facade\Request; class UserController { /** * 发送注册验证码 * * @return json */ public function sendRegisterVerifyCode() { $email = Request::post('email'); if (!validate_email($email)) { return json(['code' => -1, 'msg' => '邮箱地址不正确']); } $mailService = new MailService(); if ($mailService->sendVerifyCode($email, 'register')) { return json(['code' => 0, 'msg' => '验证码已发送']); } else { return json(['code' => -1, 'msg' => '验证码发送失败']); } } } ``` 其中,`validate_email` 是一个自定义的函数,用于验证邮箱地址的合法性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值