>  기사  >  백엔드 개발  >  TP5는 이메일 전송 서비스 캡슐화 및 첨부 파일 전송 예를 구현합니다.

TP5는 이메일 전송 서비스 캡슐화 및 첨부 파일 전송 예를 구현합니다.

黄舟
黄舟원래의
2017-10-31 09:04:073830검색

이 글의 예시는 참고용으로 ThinkPHP5 패키지 메일 전송서비스의 구체적인 코드를 공유합니다. 구체적인 내용은 다음과 같습니다

1. Composer는 phpmailer

composer require phpmailer/phpmailer

2를 설치합니다.

extension 디렉터리에 있는extend/Mail.php 파일에 Encapsulated 넣어두었는데, 내용은 다음과 같습니다.

<?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;
    }
  }
}

참고: 첨부파일을 보내실 경우, 영문경로 사용을 권장합니다. 중국어 경로를 사용하면 첨부 파일이 전송되지 않고 첨부 파일 없이 이메일이 수신될 수 있습니다.

위에 필요한 일부 구성 매개변수를 확장 configuration 디렉터리 application/extra/mail.php 파일에 넣었습니다. 내용은 다음과 같습니다.

<?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;,         // 回复邮箱人名称。留空取发件人名称
]; 

참고: 일반적으로 기본 포트는 25입니다. 보안 프로토콜 SSL을 사용하는 경우 포트 번호는 일반적으로 465 또는 587입니다. 예를 들어 126 사서함입니다. Alibaba Cloud 서버는 비보안 프로토콜의 포트 25를 금지하므로 보안 프로토콜을 사용하는 것이 좋습니다.

더 많은 구성 매개변수를 보려면 소스 코드를 확인하세요. https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php

3 테스트

컨트롤러, 테스트 코드 추가:

public function mail()
{
  $mail = new \Mail;
  $ok = $mail->sendMail(&#39;xxxxxxxxx@qq.com&#39;, &#39;mingc&#39;, &#39;邮件来了&#39;, &#39;<p style="color: #f60; font-weight: 700;">恭喜,邮件成功!</p>&#39;, &#39;C:/Users/Administrator/Desktop/body.bmp&#39;);
  var_dump($ok);
}
  

여기에서는 126 사서함, 보안 프로토콜 SSL, 포트 번호 465를 사용하고 html 콘텐츠를 보냅니다. 테스트가 성공했습니다.

위 내용은 TP5는 이메일 전송 서비스 캡슐화 및 첨부 파일 전송 예를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.