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

PHP MIME 郵件發送類別應用範例:附件與中文主旨支援

     編輯:PHP 相關知識

使用情境

展示如何使用 mime_mail 類別發送包含附件(GIF 圖片)的中文郵件,並包含基本的 Referer 檢查與郵箱格式驗證。

完整應用程式碼

<?php
// 防止跨站濫用:檢查 Referer 來源與郵箱格式
if (!preg_match("!^(https://)?".getenv("SERVER_NAME")."!", getenv("HTTP_REFERER")) ||
    !preg_match("/^.+@.+\..+/", $myemail)) {
    echo " ";
} else {
    include "mime_mail.inc";

    $filename = "php_logo.gif";
    $content_type = "image/gif";

    // 讀取附件二進位內容
    $fd = fopen($filename, "r");
    $data = fread($fd, filesize($filename));
    fclose($fd);

    // 建立郵件物件
    $mail = new mime_mail;
    $mail->from = $myemail;
    $mail->to = $myemail;
    $mail->subject = "歡迎!";
    $mail->body = "這是真正的電子郵件訊息,當然....你可以寫成一行以上。";

    // 加入附件
    $mail->add_attachment($data, $filename, $content_type);

    // 發送
    $mail->send();
    echo "郵件已送出,請檢查您的信箱。";
}
?>

關鍵點解析

  • Referer 檢查:簡單防止表單被外部網站提交,但 Referer 可偽造,非絕對安全。
  • 附件處理:fread() 讀取二進位檔案,傳給 add_attachment() 時需指定正確 MIME 類型。
  • 中文主旨/內文:類別內部應處理 Base64/Quoted-Printable 編碼,否則中文會亂碼。
  • 錯誤處理缺失:範例未檢查 send() 回傳值,生產環境需加入 try-catch 或回傳值判斷。

類別定義參考 (mime_mail.inc)

核心方法:

  • add_attachment($data, $name, $ctype):加入附件或內文(內文以 text/plain 加入)
  • build_multipart():構建 multipart/mixed MIME 結構,產生邊界字串
  • get_mail():組裝完整郵件標頭與內文
  • send():呼叫 PHP mail() 發送

現代替代建議

  1. PHPMailer:功能最完整、社群最活躍、支援 SMTP/SSL/OAuth2/HTML/附件/內嵌圖片/多語系。
  2. Symfony Mailer:現代化架構、支援多種傳輸器、整合 Twig 模板。
  3. Laravel Mail:若使用 Laravel 框架,內建優雅語法與隊列支援。

結語

此範例展示了早期 PHP 發送複雜 MIME 郵件的典型做法,理解其原理有助於除錯與維護舊系統,但新專案強烈建議採用成熟函式庫,避免重複造輪子並獲得持續的安全更新。

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