views:

98

answers:

5

I need to test a function that uses PHP's mail()
How can I do this without uploading the script to a server and test it online?
What's even more I am developing with no Internet connection at all.
I am on Mac OSX running localhost from XAMPP.

+1  A: 

Edit the php.ini central file with your current mail server for sending out mails...

For example, sendmail...

sendmail_path =/usr/sbin/sendmail

Look for the above line in your php.ini and see if it is commented or not and change it to your working mail server path.

Also if you dont know where the php.ini is, you could always run a php with the above code to see it:

<? phpinfo(); ?>

SIDE NOTES: Make sure your mail server is running and that you can send mails using it from a command line for example. If that is possible and you have changed php.ini it will work just fine.

Here is some more reference to the same question i belive: http://stackoverflow.com/questions/2450589/php-mail-using-sendmail-on-mac-os-x-leopard-10-5-8

Prix
Does this work without an Internet connection? What do you mean with "your current mail server"? Do I need to run my own mailserver? Which program?
FFish
yes you need, i dont know what you have installed but if you have sendmail, that is one. You can send it locally if you have it configured to do so ... for example if you want to send an email from [email protected] to [email protected] you must have both domains configured in your machine so the servers knows where to delivery it otherwise it will try to send it to the outside to find it out.
Prix
Yes, configure sendmail. Also, note, you can test locally by sending the email to [email protected] (like [email protected]). Then use mail command from command line to check. I believe that doesn't require a net connection as it goes through local loop.
Ben
A: 

Setup a pop3 server in local Machine. Many available for free. and send mails within your local domain using sendmail.

By default its not required to set the sendmail path in Linux. at least I never needed it. just use the mail() function and hit mails on local domain

That would be a SMTP server buddy pop3 is to actually receive emails not send mails out.
Prix
LOL Ya But where would the sendmail send the mails ???????????he have no internet connection.Okay ??????Thats the reasonhe needs a POP3 Server to run a local test.>> we are not talking about SMTP server. its sendmail
having access to the machine as he does with only the mail server he can verify it without having to go thru a pop3 connection.
Prix
A: 

Hmm. I haven't tried this, but in php.ini you can set "sendmail_path" ... so in theory you could write your own shell script that simply wrote the input into text files, and change your php.ini to use that? Then simply run tests and check text files!

James
A: 

You don't have to install an MTA on your computer to test PHP's mail() function. On Unix based systems (Linux, *BSD, OS X, etc.) you can set sendmail_path to something like tee mail.out > /dev/null. This will put the emails (including the headers) in a file called mail.out.

Here is an example of how it would work:

daniel@daniel-laptop:~$ cat | php -d sendmail_path='tee mail.out > /dev/null'
<?php
mail('[email protected]', 'the subject', 'the body');
?>
daniel@daniel-laptop:~$ cat mail.out
To: [email protected]
Subject: the subject
X-PHP-Originating-Script: 1000:-


the body

You can set sendmail_path in your php.ini file. If you want to append emails to the file instead of overwriting each time, you can use tee -a instead of just tee.

Daniel Egeberg