Why is this php script not mailing me?

匿名 (未验证) 提交于 2019-12-03 02:31:01

问题:

I'm running the example from chapter 1 in Head First's PHP and MySQL. I placed the files on Head Fist's site on apache's /var/www folder and the thing runs. Yet, why isn't php's mailto working?

edit: btw, I'm working on Ubuntu 10.04

I added two debugging lines to the script:

$testmail = mail($to, $subject, $msg); echo 'WAS IT MAILED? <br />'.$testmail; 

Why isn't printing WAS IT MAILED? TRUE? Why isn't it mailing?

Edit: Is the fact that I'm mailing to my gmail address relevant?

Here's the script:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <title>Aliens Abducted Me - Report an Abduction</title> </head> <body>   <h2>Aliens Abducted Me - Report an Abduction</h2>  <?php   $name = $_POST['firstname'] . ' ' . $_POST['lastname'];   $when_it_happened = $_POST['whenithappened'];   $how_long = $_POST['howlong'];   $how_many = $_POST['howmany'];   $alien_description = $_POST['aliendescription'];   $what_they_did = $_POST['whattheydid'];   $fang_spotted = $_POST['fangspotted'];   $email = $_POST['email'];   $other = $_POST['other'];    $to = 'antoniorueda18@gmail.com';   $subject = 'Aliens Abducted Me - Abduction Report';   $msg = "$name was abducted $when_it_happened and was gone for $how_long.\n" .     "Number of aliens: $how_many\n" .     "Alien description: $alien_description\n" .     "What they did: $what_they_did\n" .     "Fang spotted: $fang_spotted\n" .     "Other comments: $other";    $testmail = mail($to, $subject, $msg);   echo 'WAS IT MAILED? <br />'.$testmail;    echo 'Thanks for submitting the form.<br />';   echo 'You were abducted ' . $when_it_happened;   echo ' and were gone for ' . $how_long . '<br />';   echo 'Number of aliens: ' . $how_many . '<br />';   echo 'Describe them: ' . $alien_description . '<br />';   echo 'The aliens did this: ' . $what_they_did . '<br />';   echo 'Was Fang there? ' . $fang_spotted . '<br />';   echo 'Other comments: ' . $other . '<br />';   echo 'Your email address is ' . $email; ?>  </body> </html> 

And here's the html form:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <title>Aliens Abducted Me - Report an Abduction</title>   <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body>   <h2>Aliens Abducted Me - Report an Abduction</h2>    <p>Share your story of alien abduction:</p>   <form method="post" action="report.php">     <label for="firstname">First name:</label>     <input type="text" id="firstname" name="firstname" /><br />     <label for="lastname">Last name:</label>     <input type="text" id="lastname" name="lastname" /><br />     <label for="email">What is your email address?</label>     <input type="text" id="email" name="email" /><br />     <label for="whenithappened">When did it happen?</label>     <input type="text" id="whenithappened" name="whenithappened" /><br />     <label for="howlong">How long were you gone?</label>     <input type="text" id="howlong" name="howlong" /><br />     <label for="howmany">How many did you see?</label>     <input type="text" id="howmany" name="howmany" /><br />     <label for="aliendescription">Describe them:</label>     <input type="text" id="aliendescription" name="aliendescription" size="32" /><br />     <label for="whattheydid">What did they do to you?</label>     <input type="text" id="whattheydid" name="whattheydid" size="32" /><br />     <label for="fangspotted">Have you seen my dog Fang?</label>     Yes <input id="fangspotted" name="fangspotted" type="radio" value="yes" />     No <input id="fangspotted" name="fangspotted" type="radio" value="no" /><br />     <img src="fang.jpg" width="100" height="175"       alt="My abducted dog Fang." /><br />     <label for="other">Anything else you want to add?</label>     <textarea id="other" name="other"></textarea><br />     <input type="submit" value="Report Abduction" name="submit" />   </form> </body> </html> 

回答1:

From the PHP Docs for mail():

It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.

Also: the mail() message could have been accepted into the mail queue, yet bounced due to various reasons. Your best bet is to check your mail logs - which will vary depending on your operating system and sendmail program.

When sending mail from a web server it's very likely that the message is being categorized as spam - depending on the configuration of the receiving mail server, this may result in the message being sent to the spam folder or being automatically deleted.



回答2:

Since this seems to be a test/development webserver run

<?php echo get_cfg_var('cfg_file_path'); 

it will print which php.ini was used by this instance of php. Open this php.ini in a text editor and set the following values (the directive should already already in there, you only have to change their values)

display_startup_errors = On display_errors = On error_reporting = E_ALL 

Then re-start the webserver and try again. You will probably get some error/warning messages. Edit your original question and add those messages.



回答3:

mail-function could be disabled. Check your /var/log/mail.log if you're under UNIX.



回答4:

First of all, Try writing the PHP code at the top of the web page, by checking the submit input type in POST.

Also have you set up or checked the send mail functionality of your server? Sometimes it is not set / enabled by default. Try sending a simple mail first to check it, and if that does not work, contact the server administrator immediately or submit a support ticket to your server.

Edit:- From your code, normally the variable "$testmail" will always provide "TRUE" or "1" value, if the syntax of the "mail()" function is correct. It will only return false, if the mail has not been queued for delivery.

Another point is that try using the following code:-

mail($to, $subject, $message, $headers, "-femail.address@example.com");  

where "$headers" will contain the proper headers, and the 5th parameter could be your email address pre-pended with "-f".

<?php     $headers = 'MIME-Version: 1.0' . "\r\n";     $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";     $headers .= "From: My site<noreply@my_site.com>" . "\r\n";     $headers .= "Reply-To: info@my_site.com" . "\r\n";     $headers .= "Return-Path: info@my_site.com" . "\r\n";     $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n"; ?> 


回答5:

Maybe you didn't install a mail server.

Here is a good guide. http://library.linode.com/email/exim/send-only-mta-ubuntu-9.10-karmic



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!