2011-03-18 120 views
2

我使用PHP的mail()發送電子郵件,通過SMTP 但是,當我從[email protected]發送郵件時,我收到以下錯誤,SMTP服務器響應:550 - 目前不允許繼電器550通過此服務器

警告:郵件()[function.mail]:SMTP服務器響應:的550(ABC-7d3b78ff)[117.98.220.45]:1747目前不許可中繼550通過此服務器。也許你在過去的30分鐘內沒有登錄pop/imap服務器550,或者你的550電子郵件客戶端沒有打開SMTP認證。

這是我的代碼問題,還是我需要在服務器端進行更改?

這裏是我的代碼:

$header .= "\r\nMIME-Version: 1.0"; 
$header .= "\r\nContent-type: text/html; charset=iso-8859-1\r\n"; 

$from = $row["fromid"]; 
$to  = $row["email_addr"]; // [email protected] sending to other than same domain mail 
$subject = $row["subject"]; 

mail($to,$subject,$body,$header); 
+0

什麼SMTP服務器,你想送過來嗎?大多數服務器都配置爲不允許未經身份驗證的用戶進行中繼。 – payne 2011-03-18 17:52:05

+0

你使用的是誰的SMTP服務器? – 2011-03-18 17:53:26

+0

請勿打開服務器上的中繼。這是自殺。使用PHPMailer或Swiftmailer進行郵件發送 - 它們允許輕鬆配置SMTP用戶名/密碼。 PHP的內置mail()函數沒有。 – 2011-03-18 18:00:16

回答

2

它看起來像PHP的服務器被配置爲使用mail()時到SMTP服務器說話。該錯誤消息表明您的SMTP服務器希望您執行直接身份驗證,或者您要執行POP-before-SMTP身份驗證。如果您在共享主機上,我建議您的虛擬主機提供商如此聰明。

正如評論中提到的SwiftMailer是一個功能強大,易於使用的郵件庫,其中包括the ability to perform SMTP authentication。有些人還推薦PHPMailerPEAR's Mail,這兩者都能夠執行SMTP認證。

+0

另一種選擇,我的偏好,但這SMTP認證[使用Zend_Mail(http://framework.zend.com/manual/en/zend.mail.sending.html) – 2011-03-18 21:50:09

+0

我使用SMTP:mail.domain.com,通過inetrevolution Linux的服務器@Ates Goral-佩恩 – MMT 2011-03-20 16:02:13

+0

託管你的SMTP服務器需要身份驗證。你需要使用支持SMTP驗證郵件庫。我在我的回答中將他們三個聯繫起來。 – Charles 2011-03-20 16:28:59

1

這個問題是可以解決的,通過簡單地添加在你的PHP的follwing線:

ini_set(sendmail_from,'[email protected]'); 

因此,你的代碼將變爲:

$header .= "\r\nMIME-Version: 1.0"; 
    $header .= "\r\nContent-type: text/html; charset=iso-8859-1\r\n"; 

    $from = $row["fromid"]; 
    $to  = $row["email_addr"]; // [email protected] sending to other than same domain mail 
    $subject = $row["subject"]; 

    ini_set(sendmail_from,'[email protected]'); 
    mail($to,$subject,$body,$header); 
相關問題