Отправка электронной почты с использованием Zend Framework и PHP - PullRequest
6 голосов
/ 17 февраля 2010

Я работаю над формой, посредством которой, когда пользователь входит в свою учетную запись электронной почты и нажимает кнопку отправить, электронное письмо будет отправлено на его учетную запись электронной почты.

У меня все получилось. Просто это не отправляет письмо на мой счет. У кого-нибудь есть идеи? Конфигурация, которую я пропустил или что-то в этом роде?

Это образец с моего контроллера:

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');
}

Ответы [ 4 ]

27 голосов
/ 25 февраля 2010

Я рекомендую использовать 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 голос
/ 05 сентября 2013

В строке $mail->setBody($message);, измените его на $mail->setBodyText($message);

1 голос
/ 23 февраля 2010

На ZendCasts доступна очень полезная заставка, покрывающая Zend_Mail. http://www.zendcasts.com/introduction-to-zend_mail/2010/02/

1 голос
/ 17 февраля 2010

Прежде всего я бы переключился на использование Zend_Mail. Во-вторых, я бы использовал реальный почтовый аккаунт на SMTP-сервере и отправлял с него. Много раз существуют ограничения на отправку с самого сервера, но обычно это исправляет использование реального почтового сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...