tags:

views:

1156

answers:

5
+4  Q: 

Mail returns false

I'm currently using a custom made library at my job. Until just rencently the library was working perfectly. It apparently return false since about today.

The library itself it basically a wrapper around the function mail. It builds the "boundaries" parts and everything.

Since the class is quite big enough I wont post it here ... but I'm wondering, what are the reasons in theory of why mail would return false?

  • SMTP is set in PHP.ini
  • Sender is set in headers
  • Sender is int the form of: sender<[email protected]>
  • Everything is sent correctly (body+headers+subject)
  • Assume that mail( ) works correctly on the website but on this specific page it just doesn't. I know it must be comming from me but would be fun to have somewhere to start looking for.
  • Oh and yeah the library is undocumented.

[edit] Just found a smaller function and still doesn't work, I'll print it out then:

function send_html($from, $email, $subject = "AUCUN", $message, $cc = "", $bcc ="", $priotity = "3") {
 $headers = "";
 $headers .= "MIME-Version: 1.0\r\n"; 
 $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

 if (strpos($from, "ourwebsite.com") != false || strpos($from, "rencontresportive.com") != "") {
  $headers .= "From: Ourwebsite.com <" . $from . ">\r\n";
 } else {
  $headers .= "From: " . $from . " <" . $from . ">\r\n";
 }

 $headers .= "X-Sender: <" . $from . ">\r\n";
 $headers .= "X-Priority: " . $priotity . "\r\n";
 $headers .= "X-Mailer: PHP\r\n";
 $headers .= "Return-Path: <[email protected]>\r\n";

 if ($cc != "") {
  $headers .= "cc:" . $cc . "\r\n";
 }
 if ($bcc != "") {
  $headers .= "bcc:" . $bcc . "\r\n";
 }
  if (mail($email, $subject, $message, $headers)) {
  return true;
 } else {
  return false;
 }
}

I called it with :

send_html([email protected], [email protected], utf8_decode("the subject"), "<h1>test</h1>");
+2  A: 

It's possible that the address you are trying to send it to, the server that handles it is rejecting the mail.

There are too many variables involved to say for sure.

Matt
+3  A: 

If the class is only a wrapper around the function mail, I would try printing to a file the parameters used when calling the mail function

Razvan Stefanescu
A: 

Is your assumption that the mail() function works one you have tested? I would check to make sure that the library isn't just passing a failure of the mail() function up.

If you have tested the assumption, I would review the return statements from the library and see if I could find what would cause a false value. That's often reasonably possible even in undocumented code.

acrosman
It's mail itself that is returning false. I made sure to verify the return value of mail.
Erick
+2  A: 

Try setting the

ini_set('sendmail_from', $from);

If you could show us the code it would be easier to see what is going wrong.

Alix Axel
Thanks eyze for pointing me in the right direction.
txyoji
+2  A: 

I just had the same problem. After a php upgrade, the mail function always returns false.

I used this little snippet to check it out:

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
echo 'I am : ' . `whoami`;
$result = mail('[email protected]','Testing 1 2 3','This is a test.');
echo '<hr>Result was: ' . ( $result === FALSE ? 'FALSE' : 'TRUE') . $result;
echo '<hr>';
echo phpinfo();

The solution was setting a value in my php.ini for 'sendmail_from' and 'sendmail_path'. The correct values in my case were:

sendmail_from = "[email protected]"
sendmail_path = "/usr/sbin/sendmail -t -i"

(I'm using CentOS 5.3 w/ Zend Server CE.)

You could use set_ini() to set the value of 'sendmail_from', but the 'sendmail_path' var must be setup in your php.ini or http.conf.

txyoji