使用PHP发送邮件 - 收到空白邮件

4

我将尝试用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;

I call the function like this:

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

奇怪的是,当我回显 $message 时,它没有回显 Subject is : ...。它回显了 Subject is : '.$_POST['subject'].'。就像 PHP 不起作用一样...

请问有人可以帮助我吗?

谢谢。


你在 template.php 中回显 $message 吗?它似乎只是一个变量! - Kiyarash
是的。我也尝试了使用return。 - teamo
尝试使用 echo... 对于这种情况,返回不合适... - Kiyarash
我试过使用 echo $message,但还是一样的... :( - teamo
1
也许你的文件路径不正确。../../ 你能提供你的文件结构吗?尝试使用这个工具来帮助你在文本中创建它:http://filestructuregenerator.com - CodeGodie
你不能在本地路径中使用HTTP的$context。PHP也无法运行。 - mario
2个回答

0

如果你只是想发送一封电子邮件,为什么要使用流上下文和 $ _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中有任何内容需要打印,您仍然可以使用此解决方案进行打印。

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();
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接