用PHP发送电子邮件 - 空白电子邮件接收

时间:2015-06-28 02:02:08

标签: php email

我正在尝试使用PHP发送电子邮件。

我的问题实际上是,发送的电子邮件是空白的......

我的PHP功能:

function sendMail($template, $Email_Subject, $USR_Id, $USR_Email) {

    $postdata = http_build_query(
        array(
            'subject' => $Email_Subject
        )
    );

    $opts = array('http' =>
        array(
            '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 <noreply@company.com>' . "\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); 
}

我的template.php页面:

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

我这样称呼函数:

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

奇怪的是,当我回复$message时,它不会回应我Subject is : ...。它回应了我Subject is : '.$_POST['subject'].'。就像PHP不能工作......

有人帮我吗?

感谢。

2 个答案:

答案 0 :(得分:0)

如果您只是想发送电子邮件,为什么要使用stream-contexts和$ _POST?这应该使用输出缓冲(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 <noreply@email.com>' . "\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); 
}

在模板中,您可以使用sendMail函数中可用的所有变量,因此请使用$ Email_Subject而不是$ _POST。显然,如果$ _POST中有任何内容你想要打印,你仍然可以使用这个解决方案。

答案 1 :(得分:0)

我创建了一个发送电子邮件的课程。如果它对你有用,请告诉我

    <?php
class scSendMail
{
    protected $from;
    protected $toList;
    protected $replyTo;
    protected $subject;
    protected $message;
    public function __construct()
    {   
        register_shutdown_function(array($this,'__destruct'));
        $this->setFrom("updates@planetonnet.com");
        $this->setReplyTo("noreply@planetonnet.com");
        $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 ;
    }


}
?>

使用它时,只需使用以下

<?php
include_once("scSendMail.php");
$test1=new scSendMail();
$test1->addInToList("abc@example.com");
$test1->addInToList("abc@anotherexample.com");
$test1->setSubject("Hi! This is test email");
echo $test1->sendMail();
?>