我正在处理一个表格,当用户输入他们的电子邮件帐户并点击发送时,会向他们的电子邮件帐户发送一封电子邮件。
我已经解决了所有问题。只是它没有将电子邮件发送到我的帐户。有人有主意吗?是否有我遗漏的配置?
这是来自我的控制器的样本:
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');
}
答案 0 :(得分:27)
我建议您使用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.
}
答案 1 :(得分:1)
首先,我将切换到使用Zend_Mail。其次我会在某个地方的smtp服务器上使用真实的邮件帐户并从中发送。很多时候从服务器本身发送限制,但使用实际的邮件服务器通常会修复此问题。
答案 2 :(得分:1)
在ZendCasts上有一个非常有用的屏幕截图,涵盖Zend_Mail http://www.zendcasts.com/introduction-to-zend_mail/2010/02/
答案 3 :(得分:1)
在第$mail->setBody($message);
行中,将其更改为$mail->setBodyText($message);