2012-07-24 35 views
1

我有一個簡單的PHP文件,它將利用mail()發送電子郵件。我在Window服務器機器中使用WAMP服務器。但是,當我嘗試運行代碼時,它會返回錯誤,我試圖以此鏈接的方式解決錯誤。 http://www.php.net/manual/en/ref.mail.php#77499PHP郵件()在Window中不起作用?

但是,它仍然無效,系統響應以下錯誤消息:

Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in C:\wamp\www\NFC\notification.php on line 56 

所以我想問一下,如果在鏈接中提供的方法正確與否,如果它是不正確的話,我怎麼能解決這個問題,併成功發送電子郵件。
下面是我的PHP文件中的代碼,我想發送一封電子郵件回自己,但「失敗」被打印出來

$subject = "Simple mail"; 
$message = "This is a test mail"; 
$from = "[email protected]"; 
$header = "Form: ".$from; 

if(mail($from, $subject, $message, $header)) 
    print "success<br>"; 
else 
    print "fail<br>"; 

我只是按照上面的鏈接方式,所以在這裏在php.ini

[mail function] 
; For Win32 only. 
; SMTP = 

; For Win32 only. 
; sendmail_from = 

; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 
; sendmail_path = "C:\wamp\sendmail\sendmail.exe -t" 

; Force the addition of the specified parameters to be passed as extra parameters 
; to the sendmail binary. These parameters will always replace the value of 
; the 5th parameter to mail(), even in safe mode. 
; mail.force_extra_parameters = 

及以下sendmail.ini:

[sendmail] 

; you must change mail.mydomain.com to your smtp server, 
; or to IIS's "pickup" directory. (generally C:\Inetpub\mailroot\Pickup) 
; emails delivered via IIS's pickup directory cause sendmail to 
; run quicker, but you won't get error messages back to the calling 
; application. 

smtp_server=mail.test.com 

; smtp port (normally 25) 

smtp_port=25 

; SMTPS (SSL) support 
; auto = use SSL for port 465, otherwise try to use TLS 
; ssl = alway use SSL 
; tls = always use TLS 
; none = never try to use SSL 

smtp_ssl=auto 

; the default domain for this server will be read from the registry 
; this will be appended to email addresses when one isn't provided 
; if you want to override the value in the registry, uncomment and modify 

;default_domain=test.com 

; log smtp errors to error.log (defaults to same directory as sendmail.exe) 
; uncomment to enable logging 

error_logfile=error.log 

; create debug log as debug.log (defaults to same directory as sendmail.exe) 
; uncomment to enable debugging 

;debug_logfile=debug.log 

; if your smtp server requires authentication, modify the following two lines 

auth_username= 
auth_password= 

; if your smtp server uses pop3 before smtp authentication, modify the 
; following three lines. do not enable unless it is required. 

pop3_server=mail.test.com 
[email protected] 
pop3_password=abcdef 

; force the sender to always be the following email address 
; this will only affect the "MAIL FROM" command, it won't modify 
; the "From: " header of the message content 

[email protected] 

; force the sender to always be the following email address 
; this will only affect the "RCTP TO" command, it won't modify 
; the "To: " header of the message content 

force_recipient= 

; sendmail will use your hostname and your default_domain in the ehlo/helo 
; smtp greeting. you can manually set the ehlo/helo name if required 

hostname= 
+0

您的$頭一個錯字。將「Form:」更改爲「From:」 – Pedryk 2012-07-24 06:52:40

+0

您已將'r'和'o'轉換爲'「From:」。$ from「 – 2012-07-24 06:52:51

+0

哦,輸入錯誤,我先修復並嘗試。對不起,我是個粗心的程序員。 – Conrad 2012-07-24 06:54:10

回答

0

首先,作爲信息消息稱,你必須確保你有一個「從:」發送電子郵件時頭。

然後,你確定你的郵件服務器在端口25上正確運行嗎? 您可以使用netstat命令對此進行測試。

如果你只是想測試郵件,你還可試試這個: http://www.toolheap.com/test-mail-server-tool/

+0

實際上,我不確定郵件服務器是否真的在運行 – Conrad 2012-07-24 10:00:23

+0

如果我使用netstat -nab找不到SMTP,是不是說我沒有在我的機器上運行郵件服務器? – Conrad 2012-07-24 10:03:54

+0

是的,如果您的系統沒有使用您的PHP服務器端口,那麼您或者沒有運行SMTP服務器,或者您的服務器端口在另一個端口上運行(php.ini屬性smtp_port默認爲25 btw) – 2012-07-26 07:20:26