1

I have a simple PHP file which will make use of the mail() to send email. I am using WAMP server in a Window server machine. However, when I try to run the code, it returns error, I have tried to tackle the error in the way given in this link http://www.php.net/manual/en/ref.mail.php#77499

However, it still does not work, the system response the following error messages:

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

So I would like to ask if the method provided in the link is correct or not, if it is incorrect, then how can I tackle the problem and send the email successfully.
Below is the code in my php file, I am trying to send an email back to myself, but "fail" is being printed out

$subject = "Simple mail";
$message = "This is a test mail";
$from = "me@test.com";
$header = "Form: ".$from;

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

I just follow the way in the above link, so here is the 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 =

And below is 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
pop3_username=me@test.com
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

force_sender=me@test.com

; 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=
AnFi
  • 10,493
  • 3
  • 23
  • 47
Conrad
  • 933
  • 4
  • 19
  • 34
  • You have a typo in your $header. Change "Form:" to "From:" – Pedryk Jul 24 '12 at 06:52
  • You've transposed the `r` and `o` in `"From: ".$from` – Scott Stevens Jul 24 '12 at 06:52
  • Oh, a typing error, I fix it and have a try first. Sorry, I am a careless programmer. – Conrad Jul 24 '12 at 06:54
  • 1
    `mail($from,...` as you use it is incorrect too. It looks like you can set the from address there. See [php mail](http://www.php.net/manual/en/function.mail.php) and you will see that the first parameter to `mail()` is the `to` address – bart s Jul 24 '12 at 06:57
  • 1
    Use XAMPP. It has an SMTP mail server/client included. But even with that you may also not be able to send mails because your ISP will probably block them. – Alvin Wong Jul 24 '12 at 06:58
  • I have corrected this syntax error, but the same error message still exist, have anyone met the same situation before? – Conrad Jul 24 '12 at 07:00
  • Also have you configure mail server,port, username, password to php.ini ????? – Hiren Soni Jul 24 '12 at 07:00
  • i recommend WAMPP. the error reporting off wampp is much better (and nicer) than the one of XAMP.... (http://www.wampserver.com/en/) – Mathlight Jul 24 '12 at 07:01
  • After you changed settings in `php.ini` or so, you need to restart Apache. – Alvin Wong Jul 24 '12 at 07:02
  • @bart s, I know, this should be ok, as I am trying to send the mail back to myself. So Alvin, may I ask how should I change the configuration? – Conrad Jul 24 '12 at 07:02
  • ya, I have restarted it, but the same error comes, that is why I seek help here, as I have tried every method I know, I have also checked whether the SMTP service is installed in my window, but it should be ok. TWCrap, are you talking about XAMPP? – Conrad Jul 24 '12 at 07:04
  • **post what you've set/changed/tried in `php.ini`** – Alvin Wong Jul 24 '12 at 07:06
  • ok, I try to install XAMPP first – Conrad Jul 24 '12 at 07:14

2 Answers2

0

First of all, as the info message says, you must make sure that you have a "From:" header when sending an email.

Then, are you sure you have your mail server running correctly on port 25? You can test this with the netstat command.

If you just want to test mailing, you could as well try this: http://www.toolheap.com/test-mail-server-tool/

Steven De Groote
  • 2,187
  • 5
  • 32
  • 52
  • actually, I am not sure whether the mail server is really running – Conrad Jul 24 '12 at 10:00
  • If I cannot find a SMTP by using netstat -nab, does it mean I do not have a mail server running in my machine? – Conrad Jul 24 '12 at 10:03
  • Yes, if your server port that is used by PHP is not in use by your system, then either you have no SMTP server running, or you have it running on another port (the php.ini property smtp_port is defaulted to 25 btw) – Steven De Groote Jul 26 '12 at 07:20
-2

try this

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
   'Reply-To: webmaster@example.com' . "\r\n" .
   'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

?>

Hiren Soni
  • 574
  • 3
  • 11