Invia un'e-mail in PHP – Ricevi un'email vuota

Sto cercando di submit un'e-mail con PHP.

Il mio problema è in realtà, l'email inviata è vuota …

La mia function PHP:

function sendMail($template, $Email_Subject, $USR_Id, $USR_Email) { $postdata = http_build_query( arrays( 'subject' => $Email_Subject ) ); $opts = arrays('http' => arrays( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $message = file_get_contents('../../mail/'.$template.'.php', false, $context); // Start configuring the email $headers .= 'From: Company <[email protected]>' . "\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; mail($USR_Email, $Email_Subject, $message, $headers); } 

La mia pagina template.php:

 $message = '<html> ... <h1>Subject is : '.$_POST['subject'].'</h1> ... <\html>'; echo $message; 

Chiamo la function in questo modo:

 sendMail("template", "Account Activation", $USR_Id, $USR_Email); 

Quello che è strano è quando echo il $message , non mi fa eco Subject is : ... Mi fa eco il Subject is : '.$_POST['subject'].' . Come se PHP non wheresse funzionare …

Qualcuno che mi aiuti per favore?

Grazie.

Se stai solo cercando di submit un messaggio di posta elettronica, perché stai utilizzando contesti stream e $ _POST? Questo dovrebbe essere fatto usando il buffer di output ( http://php.net/manual/en/book.outcontrol.php ):

 function sendMail($template, $Email_Subject, $USR_Id, $USR_Email) { // everything output between ob_start and ob_end_clean will be stored // in a temporary buffer, instead of being send the browser ob_start(); require('../../mail/'.$template.'.php'); $message = ob_get_clean(); // Start configuring the email $headers = 'From: Company <[email protected]>' . "\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; mail($USR_Email, $Email_Subject, $message, $headers); } 

Nel model è ansible utilizzare tutte le variables disponibili nella function sendMail, quindi utilizzare $ Email_Subject anziché $ _POST. Ovviamente, se c'è qualcosa in $ _POST che ti piacerebbe printingre puoi ancora farlo usando questa soluzione.

Ho creato una class per submit email. Per favore fathemes sapere se è utile a voi

  <?php class scSendMail { protected $from; protected $toList; protected $replyTo; protected $subject; protected $message; public function __construct() { register_shutdown_function(arrays($this,'__destruct')); $this->setFrom("[email protected]"); $this->setReplyTo("[email protected]"); $this->setSubject("Update from PlanetOnNet.com"); } public function __destruct() { unset($this->from); unset($this->toList); unset($this->replyTo); unset($this->subject); unset($this->message); } public function sendMail() { $return =NULL; $headers ='From: '.$this->getFrom()."\r\n" . 'Reply-To: '.$this->getReplyTo(). "\r\n" . 'MIME-Version: 1.0' . "\r\n". 'Content-type: text/html; charset=iso-8859-1' . "\r\n". 'X-Mailer: PHP/' . phpversion(); foreach($this->toList as $to) { if(mail($to, $this->getSubject(), $this->getMessage(), $headers)) { $return.='<br>mail sent to: '. $to; } else { $return.='<br>mail couldnt sent to: '. $to; } } return $return; } public function setFrom ($tmpFrom ) { $this->from = $tmpFrom ; } public function getFrom () { return $this->from ; } public function addInToList ($tmpTo ) { $this->toList[] = $tmpTo ; } public function setReplyTo ($tmpReplyTo ) { $this->replyTo = $tmpReplyTo ; } public function getReplyTo () { return $this->replyTo ; } public function setSubject ($tmpSubject ) { $this->subject= $tmpSubject ; } public function getSubject () { return $this->subject ; } public function setMessage ($tmpMessage ) { $tmpMessage.='<br>You are getting this message on behalf of <a href="http://planetonnet.com/">planetonnet.com</a><br> login to your account area for more '; $this->message = stripslashes($tmpMessage) ; } public function getMessage () { return $this->message ; } } ?> 

E mentre lo usi, usa semplicemente come segue

 <?php include_once("scSendMail.php"); $test1=new scSendMail(); $test1->addInToList("[email protected]"); $test1->addInToList("[email protected]"); $test1->setSubject("Hi! This is test email"); echo $test1->sendMail(); ?>