0

PHP で E メール クラスを作成しましたが、投稿データが空の場合でも常に成功を返します。例外は明らかに機能しておらず、なぜメールも送信されないのか疑問に思っています。コードは次のとおりです。

<?php

class Contact
{
    private $toEmail = 'example@outlook.com', $subject = 'Personal Site - Contact';
    private $name, $email, $message;

public function __constructor(array $arr)
{
    if(!empty($arr['name']) && !empty($arr['email']) && !empty($arr['msg']))
    {
        $this->name = $this->ValidateName($arr['name']);
        $this->email = $this->ValidateEmail($arr['email']);
        $this->msg = $this->SanitizeMessage($arr['msg']);

        $this->SendMail($this->name, $this->email, $this->msg);
    }
    else
    {
        throw new Exception("Please fill all the required fields");
    }
}

private function ValidateName($name)
{
    if(ctype_alpha($name))
    {
        return $name;
    }
    else
    {
        return null;
    }
}

private function ValidateEmail($email)
{
    if(filter_var($email, FILTER_VALIDATE_EMAIL))
    {
        return $email;
    }
    else
    {
        return null;
    }
}

private function SanitizeMessage($msg)
{
    return htmlentities($msg);
}

private function SendMail($name, $email, $msg)
{
    $mailHeader = "From: " . $email . "\r\n"; 
    $mailHeader .= "Reply-To: " . $email . "\r\n"; 
    $mailHeader .= "Content-type: text/html; charset=iso-8859-1\r\n";

    $messageBody = "Name: " . $name . "";
    $messageBody .= "Email: " . $email . "";
    $messageBody .= "Comment: " . nl2br($msg) . "";

    if(mail($this->toEmail, $this->subject, $messageBody, $mailHeader))
    {
        return true;
    }
    else
    {
        throw new Exception('Message couldn\'t be sent');
    }
}
}

try
{
    $obj = new Contact($_POST);
}
catch(Exception $ex)
{
    echo json_encode($ex);
}

echo json_encode('Message was sent succesfully');

?>
4

1 に答える 1

4

コンストラクターは__construct()ではなく__constructor()です。その関数は呼び出されません。
また、コンストラクターでアクションを実行したり、変数を設定したりしないでください。これは問題ありませんが、実際に新しいオブジェクトを作成するときにメールを送信することは、ほとんどの開発者にとって予想外です。

于 2013-09-19T19:42:15.800 に答える