2012-06-06

使用 PHPMailer 寄送需要驗證的 SMTP Mail - 以 Gmail 為例

PHP 內建的 mail() 不支援 SMTP 驗證,若使用 PEAR 的 Mail 又需要額外的權限,這時 PHPMailer 就是一個不錯的選項。

先去下載 PHPMailer,目前版本是 5.1,解壓縮後,複製 class.phpmailer.php 與 class.smtp.php 到專案裡。

class Base {

  // 包一層,方便抽換實做方式,以及log使用
  public static function mail($subject, $body, $to) {

    // 要在 php.ini 設定 error_log 的路徑
    error_log("Send mail to $to");

    // 預設使用 Gmail
    Moca::gmail($subject, $body, $to);
  }
 
  private static function gmail($subject, $body, $to) {
    require_once("class.phpmailer.php");
    require_once("class.smtp.php");
 
    $mail = new PHPMailer();

    $mail->IsSMTP();
    // 設定SMTP需要驗證
    $mail->SMTPAuth = true;
    // Gmail的SMTP主機需要使用SSL連線
    $mail->SMTPSecure = "ssl";
    // Gamil的SMTP主機
    $mail->Host = "smtp.gmail.com";
    // Gamil的SMTP主機的SMTP埠位為465埠。
    $mail->Port = 465;
 
    // 設定驗證帳號
    $mail->Username = "...@gmail.com";
    // 設定驗證密碼
    $mail->Password = "...";
    // 設定寄件者信箱
    $mail->From = "...@gmail.com";
    // 設定寄件者姓名
    $mail->FromName = "...";
 
    // 設定收件者
    $mail->AddAddress($to);
    // 設定密件副本
    // $mail->AddBCC("...@gmail.com");
 
    // 設定信件字元編碼
    $mail->CharSet="utf-8";
    // 設定信件編碼,大部分郵件工具都支援此編碼方式
    $mail->Encoding = "base64";
    // 設置郵件格式為HTML
    $mail->IsHTML(false);
    // 每50自斷行
    $mail->WordWrap = 50;
 
    // 傳送附檔
    // $mail->AddAttachment("upload/...");
    // 傳送附檔的另一種格式,可替附檔重新命名
    // $mail->AddAttachment("upload/...", "newname.zip");
 
    // 郵件主題
    $mail->Subject = $subject;
    // 郵件內容
    $mail->Body = $body;
 
    // 附加內容
    // $mail->AltBody = '這是附加的信件內容';
 
    // 寄送郵件
    if(!$mail->Send()) {
      return "郵件無法順利寄出! Mailer Error: ".$mail->ErrorInfo;
    }
  }
}

沒有留言:

張貼留言