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

PHP Socket 發送郵件進階:實作 SMTP AUTH LOGIN 認證

     編輯:PHP 相關知識

解決免費郵件服務商要求 SMTP 認證的完整實作

早期 PHP mail() 或簡易 Socket 發信無需認證,但 263、163、新浪等主流免費郵件服務商陸續啟用 SMTP AUTH,導致舊程式失效。本文詳細說明 SMTP AUTH LOGIN 機制,並提供 send_mail 類別修改指南,實作基於 Base64 的挑戰-回應認證流程。

SMTP AUTH LOGIN 流程解析

C: AUTH LOGIN
S: 334 dXNlcm5hbWU6        (Base64 "username:")
C: dXNlcm5hbWU6            (Base64 編碼的帳號)
S: 334 cGFzc3dvcmQ6        (Base64 "password:")
C: cGFzc3dvcmQ6            (Base64 編碼的密碼)
S: 235 Authentication successful

關鍵修改點

  1. 建構子新增認證參數:$auth、$authuser、$authpasswd
  2. HELO 改為 EHLO:若 $auth 為真則發送 EHLO,否則維持 HELO
  3. 認證邏輯:依序發送 AUTH LOGIN、Base64 帳號、Base64 密碼,各步驟檢查 334/235 回應碼
  4. 多行回應處理:修改 do_command() 迴圈讀取直到回應碼後為空格(單行結束)

測試程式碼

<?php
include("sendmail.class.php3");
$sendmail = new send_mail("smtp.263.net", true, "username", "password", "hello", true);
$sendmail->send("to@email.com", "from@email.com", "測試", "This is a test!");
?>

安全性建議

  • 程式碼中包含明文帳密,部署至公開伺服器極度危險
  • 建議申請專用發信帳號,限制權限與發信額度
  • 生產環境請改用 PHPMailer 等支援 TLS/SSL 的成熟函式庫
  • CRAM-MD5 機制較安全但實作複雜,本文未涵蓋

此實作為早期 SMTP 認證過渡期產物,現代專案強烈建議使用支援 STARTTLS、OAuth2 的郵件函式庫。

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