使用 Zend Framework 和 PHP 发送电子邮件
Posted
技术标签:
【中文标题】使用 Zend Framework 和 PHP 发送电子邮件【英文标题】:Sending email using Zend Framework and PHP 【发布时间】:2011-01-17 16:44:52 【问题描述】:我正在制作一个表单,当用户输入他们的电子邮件帐户并单击发送时,一封电子邮件将发送到他们的电子邮件帐户。
我已经解决了一切。只是它不会将电子邮件发送到我的帐户。谁有想法?有没有我遗漏的配置?
这是来自我的控制器的示例:
public function retrieveemailAction()
$users = new Users();
$email = $_POST['email'];
$view = Zend_Registry::get('view');
if($users->checkEmail($_POST['email']))
// The Subject
$subject = "Email Test";
// The message
$message = "this is a test";
// Send email
// Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.
// Use if command to display email message status
if(mail($email, $subject, $message, $headers))
$view->operation = 'true';
else
$view->operation = 'false';
$view->render('retrieve.tpl');
【问题讨论】:
如果你在 localhost 上测试你的代码,你需要做一些特殊的配置。 特殊配置是什么意思?有例子吗? 【参考方案1】:在$mail->setBody($message);
行中,改为$mail->setBodyText($message);
【讨论】:
【参考方案2】:我建议您使用Zend_Mail
而不是mail()
。它会自动处理很多东西,而且效果很好。
您有 SMTP 服务器吗?尝试在没有您自己的 SMTP 服务器的情况下发送邮件可能会导致邮件无法发送。
这是我使用 Zend_Mail
和 Gmail 发送邮件时使用的:
在Bootstrap.php
,我配置了一个默认的邮件传输:
protected function _initMail()
try
$config = array(
'auth' => 'login',
'username' => 'username@gmail.com',
'password' => 'password',
'ssl' => 'tls',
'port' => 587
);
$mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
Zend_Mail::setDefaultTransport($mailTransport);
catch (Zend_Exception $e)
//Do something with exception
然后,我使用以下代码发送电子邮件:
//Prepare email
$mail = new Zend_Mail();
$mail->addTo($email);
$mail->setSubject($subject);
$mail->setBody($message);
$mail->setFrom('username@gmail.com', 'User Name');
//Send it!
$sent = true;
try
$mail->send();
catch (Exception $e)
$sent = false;
//Do stuff (display error message, log it, redirect user, etc)
if($sent)
//Mail was sent successfully.
else
//Mail failed to send.
【讨论】:
【参考方案3】:ZendCast 上有一个非常有用的关于 Zend_Mail 的截屏视频 http://www.zendcasts.com/introduction-to-zend_mail/2010/02/
【讨论】:
【参考方案4】:首先我会改用 Zend_Mail。其次,我会在某处的 smtp 服务器上使用真实的邮件帐户并从那里发送。很多时候从服务器本身发送有限制,但是使用实际的邮件服务器通常可以解决这个问题。
【讨论】:
以上是关于使用 Zend Framework 和 PHP 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Zend Framework 和 PHP 发送电子邮件
PHP Zend Framework:禁用布局和视图 - 用于AJAX