【问题标题】:Zend_Mail sending special characters breaking email in clientZend_Mail 在客户端发送特殊字符破坏电子邮件
【发布时间】:2011-03-11 17:50:53
【问题描述】:

我正在使用 Zend_Mail 发送日志文件的电子邮件,但它发送邮件客户端不喜欢的狡猾字符。

我的代码:

<?php
$sBody = "errors.log (>= WARN):\n\n";
$rFile = fopen($sErrorsLog, "r");
while (!feof($rFile))
{
    $sLine = fgets($rFile);
    $sBody.= $sLine;
}

$oMail = new Zend_Mail();
$oMail->addTo($sTo)
      ->setFrom($sFrom)
      ->setSubject($sSubject)
      ->setBodyText($sMessage);

我收到的电子邮件正文:

errors.log (>= WARN):

时间戳|2010-07-05T09:48:03+10:00 消息|O:11:"ArrayObject":3:{s:9:"exception";O:32:"Zend_Controller_Action_Exception":7:{ s:25:"

错误日志包含(这是顶部的摘录)

时间戳|2010-07-05T09:48:03+10:00 消息|O:11:"ArrayObject":3:{s:9:"exception";O:32:"Zend_Controller_Action_Exception":7:{ s:25:"Zend_Exception_previous";N;s:10:"*message";s:64:"动作 "crgdtgdf" 不存在并且没有被困在 __call()";s:17:"Exceptionstring";s :0:"";s:7:"*code";i:40​​4;s:7:"*file";s:73:"/var/www/development/workspaces/s.rees/library/Zend/控制器/Action.php";s:7:"*line";i:485;s:16:"Exceptiontrace";a:4:{i:0;a:6:{s:4:"file"; s:73:"/var/www/development/workspaces/s.rees/library/Zend/Controller/Action.php";s:4:"line";i:515;s:8:"function";s :6:"__call";s:5:"class";s:22:"Zend_Controller_Action";s:4:"type";s:2:"->";s:4:"args";a: 2:{i:0;s:14:"crgdtgdfAction";i:1;a:0:{}}}i:1;a:6:

任何想法如何过滤/编码电子邮件以便显示所有日志输出? 我真的需要将所有详细信息通过电子邮件发送出去。

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    我解决了这个问题:

    $text = filter_var($text, FILTER_SANITIZE_SPECIAL_CHARS);
    

    【讨论】:

      【解决方案2】:

      PHP 的序列化数据在任何序列化对象的私有或受保护成员之前包含一个空字节。

      您将需要反序列化并重新处理输出,或者您需要在通过电子邮件发送它们之前去除空字节。

      【讨论】:

      • 啊,有道理。有没有一种简单的方法可以去除空字节?
      • 我刚刚做了 str_replace("\0", "", $sLine);它似乎工作:) 谢谢!
      • 这几乎是规范的做法,是的。 :)
      猜你喜欢
      • 2022-01-13
      • 2021-05-23
      • 2012-07-07
      • 2010-11-09
      • 2016-08-18
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多