<?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 ? '寄送成功' : '寄送失敗';
| 設定 | 說明 |
|---|---|
SMTPSecure | ssl(465 埠)或 tls(587 埠),依信箱提供商。 |
Password | Gmail/QQ/Outlook 等需開啟「應用程式密碼」或「SMTP 授權碼」,非帳號登入密碼。 |
msgHTML() | 自動內嵌圖片、產生文字版,優於手動 Body + AltBody。 |
CharSet | 統一 utf-8,避免中文亂碼。 |
| 例外模式 | new PHPMailer(true) 讓錯誤拋出例外,便於 try-catch 處理。 |