关于Zend_Mail发送邮件时检验EMAIL地址有效性的问题

diplodocus 2009-12-30 03:07:14
或许大家都知道,zend framework中的zend_mail发送邮件功能很方便,但是我调试的时候发现了一个缺点(暂时说是它的缺点吧,我也不知道是我不会用还是框架的缺点)

就是发送邮件的时候,当发件人或者收件人的EMAIL地址不存在的时候就会报错。曾经也试过用 Zend_Validate_EmailAddress
但是最后都失败了

代码如下

$mailTransport = new Zend_Mail_Transport_Smtp('smtp服务器地址', array('auth' => 'login','username' => '账号','password' => '密码'));

$mail = new Zend_Mail('utf-8');
$mail->setBodyHtml('邮件内容');
$mail->setSubject('邮件主题');
$mail->setFrom('发件人EMAIL地址', '发件人称呼');
$mail->addTo('收件人1EMAIL地址', '收件人1称呼');
$mail->addTo('收件人2EMAIL地址', '收件人2称呼');
$mail->send($mailTransport);


用try..catch

try{
$mailTransport = new Zend_Mail_Transport_Smtp('smtp服务器地址', array('auth' => 'login','username' => '账号','password' => '密码'));

$mail = new Zend_Mail('utf-8');
$mail->setBodyHtml('邮件内容');
$mail->setSubject('邮件主题');
$mail->setFrom('发件人EMAIL地址', '发件人称呼');
$mail->addTo('收件人1EMAIL地址', '收件人1称呼');
$mail->addTo('收件人2EMAIL地址', '收件人2称呼');
$mail->send($mailTransport);
}catch(Zend_Mail_Exception $e){
echo "邮件发送失败";
}

但是当其中一个收件人的EMAIL地址不存在的时候就全部不能发送了?
难道有几个收件人的话就要try..catch几次?

现在问题是,当发件人或者收件人的EMAIL地址不存在的时候,就会发送失败,而且还会提示一大堆的错误。

Fatal error: Uncaught exception 'Zend_Mail_Protocol_Exception' with message 'Mailbox' in D:\AppServ\www\ZendMail\Zend\Mail\Protocol\Abstract.php:406 Stack trace: #0 D:\AppServ\www\ZendMail\Zend\Mail\Protocol\Smtp.php(289): Zend_Mail_Protocol_Abstract->_expect(Array, 300) #1 D:\AppServ\www\ZendMail\Zend\Mail\Transport\Smtp.php(207): Zend_Mail_Protocol_Smtp->rcpt('www1@lianglong....') #2 D:\AppServ\www\ZendMail\Zend\Mail\Transport\Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail() #3 D:\AppServ\www\ZendMail\Zend\Mail.php(1038): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail)) #4 D:\AppServ\www\ZendMail\index.php(117): Zend_Mail->send(Object(Zend_Mail_Transport_Smtp)) #5 {main} thrown in D:\AppServ\www\ZendMail\Zend\Mail\Protocol\Abstract.php on line 406


我现在想要解决的设想是:
1.当其中某个收件人的EMAIL地址不存在的时候自动跳过,就是只发送有效的EMAIL地址,这样就不会出错了?
2.在准备发送的时候就检查EMAIL地址的有效性,只有有效的地址才进入发送环节。

...全文
174 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
diplodocus 2009-12-30
  • 打赏
  • 举报
回复

$mailTransport = new Zend_Mail_Transport_Smtp('smtp服务器地址', array('auth' => 'login','username' => '账号','password' => '密码'));
try{
$mail = new Zend_Mail('utf-8');
$mail->setBodyHtml('邮件内容');
$mail->setSubject('邮件主题');
$mail->setFrom('发件人EMAIL地址', '发件人称呼');
$mail->addTo('收件人1EMAIL地址', '收件人1称呼');
$mail->send($mailTransport);
}catch(Zend_Mail_Exception $e){
echo "给收件人1的邮件发送失败";
}

try{
$mail = new Zend_Mail('utf-8');
$mail->setBodyHtml('邮件内容');
$mail->setSubject('邮件主题');
$mail->setFrom('发件人EMAIL地址', '发件人称呼');
$mail->addTo('收件人2EMAIL地址', '收件人2称呼');
$mail->send($mailTransport);
}catch(Zend_Mail_Exception $e){
echo "给收件人2的邮件发送失败";
}


我知道可以这样实现,但是这样效率会不会比较低呢?
如果是上千封EMAIL,循环那么多次。。

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧