首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHPMailer 發送郵件完整封裝函數:支援 SMTP、附件、HTML、編碼設定

     編輯:PHP 綜合知識

封裝函數

<?php
/**
 * 發送郵件
 * @param string $title     主旨
 * @param string $content   內容(支援 HTML)
 * @param string $from      寄件者信箱
 * @param string $to        收件者信箱
 * @param string $charset   編碼,預設 utf-8
 * @param string $attachment 附件路徑(可選)
 * @return bool
 */
function send_mail($title, $content, $from, $to, $charset = 'utf-8', $attachment = '') {
    require_once __DIR__ . '/PHPMailer/PHPMailerAutoload.php'; // Composer 自動載入更佳

    $mail = new PHPMailer(true); // true 啟用例外拋出
    try {
        $mail->CharSet = $charset;
        $mail->isSMTP();
        $mail->Host       = 'smtp.qq.com';          // SMTP 伺服器
        $mail->Port       = 465;                    // SSL 埠
        $mail->SMTPSecure = 'ssl';                  // 加密方式
        $mail->SMTPAuth   = true;
        $mail->Username   = $from;                  // 寄件信箱
        $mail->Password   = 'your_smtp_password';   // 應用專用密碼(非登入密碼)
        $mail->setFrom($from, '系統通知');
        $mail->addAddress($to);
        $mail->addReplyTo($from, '系統通知');
        $mail->Subject = $title;
        $mail->msgHTML($content); // 自動產生純文字版
        $mail->AltBody = strip_tags($content);      // 非 HTML 客戶端備用

        if ($attachment && file_exists($attachment)) {
            $mail->addAttachment($attachment);
        }

        $mail->send();
        return true;
    } catch (Exception $e) {
        error_log("Mailer Error: {$mail->ErrorInfo}");
        return false;
    }
}

使用範例

<?php
$ok = send_mail(
    '歡迎註冊',
    '

Hello!

感謝加入我們。

', 'noreply@example.com', 'user@gmail.com', 'utf-8', '/path/to/welcome.pdf' ); echo $ok ? '寄送成功' : '寄送失敗';

關鍵設定說明

進階:批次寄送、佇列非同步

<?php
// 批次:建立單一 SMTP 連線重複使用
$mail = new PHPMailer(true);
$mail->isSMTP();
// ... 共用設定 ...
$mail->smtpConnect(); // 手動建立連線

foreach ($users as $user) {
    $mail->clearAddresses();
    $mail->addAddress($user['email']);
    $mail->Subject = "專屬優惠 {$user['name']}";
    $mail->msgHTML($template);
    $mail->send();
}
$mail->smtpClose();

// 生產環境建議:寫入 Redis/RabbitMQ 佇列,Worker 非同步發送,避免阻塞 Web 請求。

常見問題排查

  1. 連線逾時:檢查防火牆、安全群組、埠號、SSL/TLS 模式。
  2. 認證失敗:確認應用程式密碼、是否開啟「安全性較低的應用程式存取權」(Gmail 已棄用,需用應用程式密碼)。
  3. 進垃圾桶:設定 SPF/DKIM/DMARC、避免垃圾郵件關鍵字、使用專屬域名、保持 IP 信譽。
  4. 附件不見:addAttachment 路徑必須為伺服器絕對路徑且可讀。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
設定說明
SMTPSecuressl(465 埠)或 tls(587 埠),依信箱提供商。
PasswordGmail/QQ/Outlook 等需開啟「應用程式密碼」或「SMTP 授權碼」,非帳號登入密碼。
msgHTML()自動內嵌圖片、產生文字版,優於手動 Body + AltBody。
CharSet統一 utf-8,避免中文亂碼。
例外模式new PHPMailer(true) 讓錯誤拋出例外,便於 try-catch 處理。