【发布时间】:2013-03-08 02:31:50
【问题描述】:
我正在使用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');
我不确定我是否遗漏了任何内容或完全错误地执行此操作。任何帮助都会很棒。
【问题讨论】:
-
在您的代码中看不到
getContent()方法,这就是您的问题所在。$obj->getContent()和 $obj 之类的东西无论出于何种原因都不是对象。 -
getContent() 的异常在 Zend_Mime_Message.php(包含在 Zend_Mail.php 中)中被抛出。似乎当我创建和发送 Zend_Mail 消息时,Zend_Mail 实际上并没有创建 mime 部分。在 $mail->send(); 之后当我调用 '$mail->getPartCount()' 时,它返回 0。
-
stackoverflow.com/questions/10853413/… 也没有回答这个问题。无论如何,我可以将电子邮件部分作为字符串获取吗?
-
这甚至还有一个开放的错误。查看 Zend_Mail,您希望使用
generateMessage()获得的任何内容都必须首先添加addPart()作为 Zend_Mime_Part 对象。唯一的例外是附件。看不出这一切背后的原因。 -
好的,我找到了解决问题的方法。我的解决方案可能不是最优雅的,但至少是它的工作解决方案。我最终使用了 Swift Mailer——它在发送电子邮件方面非常优雅(它只处理发送电子邮件——而不是 IMAP 的东西)。一旦你使用 swift 创建了一条消息——调用 toString() 方法——那么你就可以使用 Zend_mail 的 appendMessage()。我从 rixtsa 在php.net/manual/en/function.imap-append.php 的帖子中得到了解决方案。也许ZF2没有这个问题,但是如果你在ZF1上你可以使用这个方法。