我在PHP中创建了一个电子邮件类,但即使帖子数据为空,它也总是返回成功。这些例外显然不起作用,我想知道它为什么不发送任何电子邮件。这是代码:
<?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');
?>
答案 0 :(得分:4)
构造函数为__construct()
,而不是__constructor()
。永远不会调用该函数
此外,避免在构造函数中执行操作,设置变量,这没关系,但实际上在创建新对象时发送邮件对于大多数开发人员来说是意外的。