kratsg Posted September 14, 2008 Share Posted September 14, 2008 So, I'll show you two codes in a class which handles the loading of the variables in the email, and actually sending the email itself: <?php public function load_email($to='',$subject='',$message='',$cc='',$bcc='',$mail_type='') { //always be sure everything has been defaulted just in case it somehow cached $this->recipient = null; $this->subject = null; $this->message = null; $this->sender = "hanyTV <[email protected]>"; $this->cc = null; $this->bcc = null; $this->headers = null; $this->loaded = false; if(empty($to)){ return array(false,"missing","recipient"); } elseif(empty($subject)){ return array(false,"missing","subject"); } elseif(empty($message)){ return array(false,"missing","message"); } elseif(!$this->check_email_address($to)){ return array(false,"invalid format","recipient"); } elseif(!empty($cc) && !is_array($cc)){ return array(false,"invalid format","cc"); } elseif(!empty($bcc) && !is_array($bcc)){ return array(false,"invalid format","bcc"); } $this->recipient = $to; $this->subject = $subject; $this->message = wordwrap($message,70); $this->sender = "From: ".$this->sender."\r\n"; if(!empty($cc)){ $this->cc .= "Cc: "; foreach($cc as $add){ $this->cc .= "$add, "; } $this->cc .= "\r\n"; } if(!empty($bcc)){ $this->bcc .= "Bcc: "; foreach($bcc as $add){ $this->bcc .= "$add, "; } $this->bcc .= "\r\n"; } //format the headers correctly with the From,CC,BCC, etc... if($mail_type == 'html'){//send html mail by formatting headers FIRST $this->headers = 'MIME-Version: 1.0' . "\r\n"; $this->headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; } else {//we are not sending html mail, so we must strip the message of all html $this->message = strip_tags($this->message); } $this->headers .= $this->sender.$this->cc.$this->bcc; $this->loaded_email = true; return array(true); } public function send_email() { if($this->loaded_email){ $sent = mail($this->recipient,$this->subject,$this->message,$this->headers); echo "<textarea rows=4 style='width:100%;'>mail(".$this->recipient.",".$this->subject.",".$this->message.",".$this->headers.");</textarea>"; return array($sent); } else { return array(false,"did not call","load_email()"); } } ?> load_email() is a function, inserting the values as needed, will validate each value, and basically build the headers for the email. send_email() does what it says, if load_email() was executed successfully, it will send the email. As you see in the code, I had it output a textarea to show exactly what values I was passing to the mail() function: mail(********@aol.com,Hey,I've got some things for you to look at if you have time.,From: hanyTV <[email protected]> ); The output tells me that I'm passing the values into the function CORRECTLY, and yet it will not send :-\ On another note, looking into php.net's manual, i tried the following code: $to = '[email protected]'; $subject = 'the subject'; $message = 'hello'; $headers = 'From: [email protected]' . "\r\n" . 'Reply-To: [email protected]' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); And it didn't work, directly by using php.net's code, and I'm still not getting any errors. Any ideas? Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/ Share on other sites More sharing options...
sKunKbad Posted September 14, 2008 Share Posted September 14, 2008 Try sending a simple mail: <?php // The message $message = "Line 1\nLine 2\nLine 3"; // In case any of our lines are larger than 70 characters, we should use wordwrap() $message = wordwrap($message, 70); // Send mail('[email protected]', 'My Subject', $message); ?> If something simple won't work, then the problem is the server, not the code. Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/#findComment-640795 Share on other sites More sharing options...
kratsg Posted September 14, 2008 Author Share Posted September 14, 2008 Ok, so I've tried a different domain, and it looks like it works with a @gmail.com address. Also, it works with @yahoo.com. It seems like it fails with any @aol.com address (which confuses me). I've checked the spam folder, and the email just never gets sent. Anyone know why AOL would not receive the email? Try sending a simple mail: <?php // The message $message = "Line 1\nLine 2\nLine 3"; // In case any of our lines are larger than 70 characters, we should use wordwrap() $message = wordwrap($message, 70); // Send mail('[email protected]', 'My Subject', $message); ?> If something simple won't work, then the problem is the server, not the code. I tried sending your simple email code, and it does work, just not with an AOL domain (and perhaps some others, but I don't have THAT many different email accounts o_o) Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/#findComment-640796 Share on other sites More sharing options...
kratsg Posted September 14, 2008 Author Share Posted September 14, 2008 Ok, so I've finally solved it with a VERY weird solution. The additional parameter in the mail() function must be set for AOL mail to even accept it (something about not having "nothing@" for a default email address which is set by your host). So it looks like this: mail("recipient","subject","message","headers","-fYOURNAME@YOURDOMAIN"); Where yourname@yourdomain was a web mail account that was set up through cPanel. Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/#findComment-640822 Share on other sites More sharing options...
sKunKbad Posted September 14, 2008 Share Posted September 14, 2008 This is actually pretty normal behavior. Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/#findComment-641445 Share on other sites More sharing options...
kratsg Posted September 15, 2008 Author Share Posted September 15, 2008 Well, I have another website that sends mail just fine to AOL without that additional parameter. So, relative to that site, it was very odd. Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/#findComment-641896 Share on other sites More sharing options...
rpmorrow Posted September 15, 2008 Share Posted September 15, 2008 Hi, I seem to be having the same problem but I can't get it working. I've tried making a simple example, but it still no good... <?php $to = "[email protected]"; $subject = "Hi!"; $body = "Hi, How are you?"; $headers="From: [email protected] \r\n" . "Reply-To: [email protected] \r\n" . "X-Mailer: PHP/" . phpversion(); if (mail("$to","$subject","$body","$headers")) { echo("<p>Message successfully sent!</p>"); } else { echo("<p>Message delivery failed...</p>"); } ?> It always says it is sent, but I get nothing. There is another page on the site using the mail() function and it works fine. I just can't see why. Link to comment https://forums.phpfreaks.com/topic/124119-solved-mail-function-is-not-working-any-ideas/#findComment-642105 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.