3

を使用してメールを送信していZend_Mail_Transport_Smtpます。送信部分は正常に機能しますが、送信メールアカウントの「送信済み」フォルダにメールをコピーしようとして苦労しています。Zend_Mailからメッセージを生成するとき、私は取得し続けますCall to a member function getContent() on a non-object.

これが私がしていることです:

$config = array(
            'auth' => 'login',
            'username' => $from,
            'password' => $password);

$transport = new Zend_Mail_Transport_Smtp('smtp.123-reg.co.uk', $config);
Zend_Mail::setDefaultTransport($transport);
$mail = new Zend_Mail('utf-8');

$mail->addTo('foo@bar.com');
$mail->setSubject('Test');
$mail->setFrom('baz@bar.com', 'Baz');
$mail->setBodyText('This is the email');

$mail->send();

**$message = $mail->generateMessage(); <----- here is the problem**

*This is where I would append the message to the sent folder.*
$mail = new Zend_Mail_Storage_Imap
            array('host' => 'imap.123-reg.co.uk',
            'user' => 'baz@bar.com',
            'password' => 'p'
        ));
$mail->appendMessage($message,'Sent');

何かが足りないのか、これを完全に間違った方法で行っているのかはわかりません。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

0

わかりました、私は問題を回避する方法を見つけました。Zend_mailは、Zend_mailオブジェクトから実際に文字列を作成しないという点でバグがあり/不完全です(少なくともZF1では)。

私のソリューションは最もエレガントではないかもしれませんが、少なくともその実用的なソリューションです。私はSwiftMailerを使用することになりました。これは、電子メールの送信に非常に優れています(IMAPのものではなく、電子メールの送信のみを処理します)。swiftを使用してメッセージを作成したら-toString()メソッドを呼び出します-次に、Zend_mailのappendMessage()で使用できます。http://php.net/manual/en/function.imap-append.phpにあるrixtsaの投稿から解決策を入手しました。ZF2にはこの問題がない可能性がありますが、ZF1を使用している場合は、この方法を使用できます。

 // create the message
        $message = Swift_Message::newInstance()
                ->setSubject('The subject')
                ->setFrom(array('a@b.com'=> 'Alfa Beta'))
                ->setTo(array('recipient1@r.com','recipient2@r.com'))
                ->setBody('The body is here= could be')
                ->addPart('<q>If you want html body use this method/q>', 'text/html')
        ;
   //send the message
        $transport = Swift_SmtpTransport::newInstance('smtp.123-reg.co.uk', 25)
                ->setUsername($user)
                ->setPassword($password)
        ;
    $mailer = Swift_Mailer::newInstance($transport);
    $result = $mailer->send($message);

   // generate the string from the message
   $msg = $message->toString();

   // use the string with Zend_Mail_Storage_Imap's appendMessage()
   $mail = new Zend_Mail_Storage_Imap(
                    array('host' => 'imap.123-reg.co.uk',
                        'user' => $user,
                        'password' => $password
            ));
    $mail->selectFolder('Sent');
    $mail->appendMessage($msg);

誰かがより良い、よりエレガントな解決策を見つけることができることを願っています-あるいはさらに良い-バグが解決されることを願っています。しかし、今のところ、多くの読書と検索を行った後、私はSwiftMailerを使用してギャップを埋めることになりました。

于 2013-03-22T11:23:03.260 に答える