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

PHP 發送帶附件郵件:從手刻 MIME 到 PHPMailer 最佳實踐

     編輯:PHP 綜合知識

為什麼不建議手寫 MIME 郵件?

早期 PHP 開發者常自行組裝 MIME 郵件(如本文原始碼),但容易踩坑:編碼錯誤、附件損壞、郵件被判定為垃圾郵件、不支援 TLS/SSL、維護困難。現代專案強烈建議使用 PHPMailer 或 Symfony Mailer。

快速上手 PHPMailer(Composer 安裝)

composer require phpmailer/phpmailer

寄送帶附件郵件範例

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);
try {
    // SMTP 設定
    $mail->isSMTP();
    $mail->Host       = 'smtp.example.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'your@email.com';
    $mail->Password   = 'yourpassword';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 或 PHPMailer::ENCRYPTION_SMTPS
    $mail->Port       = 587;

    // 寄件人/收件人
    $mail->setFrom('from@example.com', '寄件者名稱');
    $mail->addAddress('to@example.com', '收件者名稱');
    $mail->addReplyTo('reply@example.com', '回覆名稱');

    // 附件
    $mail->addAttachment('/path/to/file.pdf', 'custom_name.pdf'); // 可選自訂檔名
    $mail->addAttachment('/path/to/image.jpg');

    // 內容
    $mail->isHTML(true);
    $mail->Subject = '測試帶附件郵件';
    $mail->Body    = '這是 HTML 格式郵件內容,含附件。';
    $mail->AltBody = '這是純文字備用內容。';

    $mail->send();
    echo '郵件已發送';
} catch (Exception $e) {
    echo "發送失敗:{$mail->ErrorInfo}";
}
?>

進階技巧

  • 多附件: 多次呼叫 addAttachment()。
  • 內嵌圖片: 使用 addEmbeddedImage(),HTML 中以 cid:xxx 參考。
  • 非同步發送: 配合隊列(如 Laravel Queue、RabbitMQ)避免阻塞回應。
  • DKIM/SPF/DMARC: 郵件伺服器層面設定,提高送達率。

若必須用原生 mail()(不推薦)

僅限極簡環境,需自行組裝完整 MIME 標頭、Base64 編碼附件、處理換行與界線字串,極易出錯。參考原始碼邏輯:建立 boundary、分段組裝 header/body/attachment、最後 mail($to, $subject, $message, $headers)。

結論:請直接使用 PHPMailer,省時、穩定、功能完整。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved