所以我正在建立一个联系页面。当然它会有一个表格,需要发送。 我让班级发送电子邮件:
<?php
namespace Site\Mail;
use Zend\Mail\Message;
use Zend\Mail\Transport\Sendmail;
class SendEMail {
public function SendEMail($to, $from, $subject, $body) {
$message = new Message();
$message->addTo($to)
->addFrom($from)
->setSubject($subject)
->setBody($body);
$transport = new Sendmail();
try {
$transport->send($message);
return true;
} catch (\Exception $e) {
return false;
}
}
}
?>
在控制器中我有
public function emailAction () {
$request = $this->getRequest();
$vm = new ViewModel();
$vm->setTerminal(true);
if ($request->isPost()) {
$to = "some@mail.com";
$from = $request->getPost("email");
$subject = "Messaggio inviato da ".$request->getPost("nome")." (tel. ".$request->getPost("phone").")";
$body = $request->getPost("messaggio");
$mail = new SendEMail($to, $from, $subject, $body);
if (!$mail) {
$vm->setVariables(array(
"result" => "no"
));
return $vm;
} else {
$vm->setVariables(array(
"result" => "yes"
));
return $vm;
}
}
$vm->setVariables(array(
"result" => "This script needs POSTDATA."
));
return $vm;
}
我禁用了布局以允许Ajax / Jquery脚本加载它,它就像一个魅力(我会告诉你它虽然我认为它不会导致我的问题)
$(document).on('submit', 'form', function() {
$.ajax({
url:$("form").attr("action"),
method:"POST",
beforeSend: function() {
$("form").css("opacity", 0.5);
},
complete: function() {
$("form").css("opacity", 1);
},
success: function(responseText) {
$("body").append("<div id='popupmessage'>"+responseText+"</div>");
},
error: function(errorThrown) {
$("body").append("<div id='popupmessage'>"+errorThrown+"</div>");
}
}).always(function() {
$("#popupmessage").delay(1000).fadeOut(300, function () {
if($(this).length>0) {
$(this).remove();
}
});
});
return false;
});
问题是我的SendEMail()
函数看起来总是返回true,即使我在sendmail.ini中设置了错误的设置(我正在使用sendmail)。
我的错是什么?我感谢任何帮助。谢谢。
答案 0 :(得分:1)
当我实施我的电子邮件方法时,我无法通过以下方式获得例外:
catch(\ Exception $ e){ return false;}
对我来说,获得它并不是那么重要。但是在某些时候我注意到当域不存在或者错误时我得到了一个例外,所以我将异常缩小到了。
} catch (\Zend\Mail\Protocol\Exception\RuntimeException $e) {
$error = true;
}
因此,如果这不是您想要的,我会假设进行此更改会为您提供比runtimeException更多的内容,或者您可以按照假设返回给您想要的结果的方式保留它
} catch (\Zend\Mail\Protocol\Exception $e) {
$error = true;
}
我希望这会有所帮助。祝你好运。
更新
我注意到我正在使用SMTP传输(more details)所以这就是我使用协议Exception的原因。如果你在Zend Library里面检查,你会看到另一个文件夹Zend \ Mail \ Exception。所以在try catch中尝试一下,例如
} catch (\Zend\Mail\Exception $e) {
$error = true;
}
如果这不起作用,请尝试缩小异常范围:在文件夹中,您将看到6个异常类在try catch(\ Zend \ Mail \ Exception \ AnExceptionClass)中测试每个异常类
我希望这会有所帮助。