Ошибка Zend Mailer "Из заголовка, установленного дважды" - PullRequest
4 голосов
/ 18 марта 2011

Мой вопрос основан на Zend Mail

У меня есть класс, расширяющий Zend Mail. По сути, при регистрации предполагается отправлять пользователям два разных письма.

Он имеет две функции sendRegistrationMail и sendActivationMail, и оба метода используют один и тот же транспорт, инициализированный в конструкторе.

Вызов двух функций sendRegistrationMail работает, но вторая выдает ошибку: **From Header Set Twice**

class Mailer_Register_SendMail extends Zend_Mail
{

    public $_config;
    public $_transport;
    public $_email;
    public $_fromEmail;
    public $_fromFullName;


    public function __construct($email)
    {
        parent::__construct();

        $this->_config=array('auth'=>'login','ssl'=>'tls','username'=>"$email",'password'=>'12345678','port'=>'25');
        $this->_transport=new Zend_Mail_Transport_Smtp('127.0.0.1',$this->_config);
        $this->_email=$email;
        $this->_fromEmail="administrator@rta.com";
        $this->_fromFullName="RTAsys.com";
    }



    public function sendRegistrationMail()

    {
        $emailmessage="<h3>Welcome to the Atanik Authorization</h3></br>".
                        "<p>You will soon receive your activation email as a separate message</p>";

                        $fromemail=$this->_fromEmail;
                        $fromfullname=$this->_fromFullName;
                        $to=$this->_email;
                        $subject="Welcome to RTA";

                        $this->setBodyHtml($emailmessage);
                        $this->setFrom($fromemail,$fromfullname);
                        $this->addTo($to);
                        $this->setSubject($subject);

                        try {
                        $this->send($this->_transport);

                        }
                        catch (Zend_Mail_Transport_Exception $ex)
                        {

                        }


    }

    public function sendActivationMail()
    {


                    $subjectActivation="Activate Your Angaza Account";

                    $emailActivationMessage="Thank you for taking time to join Atanik
                    Authorization Please click the link below to activate your account now
                    http://localhost/RTAsys/public/Account/activate?email=".$this->_email;


                    $fromActivationEmail=$this->_fromEmail;

                    $fromActivationFullName=$this->_fromFullName;

                    $to=$this->_email;


                    $this->setBodyText($emailActivationMessage);
                    $this->setFrom($fromActivationEmail,$fromActivationFullName);
                    $this->addTo($to);
                    $this->setSubject($subjectActivation);
                    try
                     {
                    $this->send($this->_transport);
                     }
                     catch (Zend_Mail_Transport_Exception $ex)
                     {

                     }          
    } 
}
?>

1 Ответ

6 голосов
/ 18 марта 2011

Используйте clearFrom() для очистки заголовков во время каждой итерации, если вам действительно нужно использовать один и тот же объект Zend_Mail для одной итерации:

$mail = new Zend_Mail();
foreach ($users as $key => $user) {
    $mail->clearFrom();
    $mail->setFrom('foo@bar');
    // do some more stuff
}

Сама ошибка довольно очевидна: вы вызываетеsetFrom() более одного раза, что не нужно.Скорее всего, это вызвано тем, что экземпляр объекта Zend_Mail находится вне итерации и вызывается из этой итерации setFrom().

...