【问题标题】:How to trigger one mail for multiple errors如何为多个错误触发一封邮件
【发布时间】:2013-04-22 10:51:18
【问题描述】:

我有一个如下的 MYSQL 表,如果在程序执行期间发生任何错误,它会记录数据库错误。这部分工作正常。

现在我计划通过在发生数据库错误时触发邮件来扩展功能。所以我可以尽快参加。

我遇到的问题是,如果出现一个错误,我会收到一封邮件。如果发生 100 个错误,我会收到 100 封无用的邮件。尽管一个小时内发生了多少错误,我想要做的是收到一封邮件。现在我只是在向表中插入数据时使用PHP邮件函数发送邮件。

鉴于我无法编写一个每小时向我发送一次邮件的 cron 作业,因为我想在发生错误时立即收到邮件。

我怎样才能完成它?

【问题讨论】:

  • 显示代码你如何根据错误发送电子邮件??
  • 现在发生的每个错误我都会发送一封邮件。只是 PHP 邮件功能。
  • 为每个执行分配一个队列号之类的东西?然后只发送有错误的电子邮件/队列号?我猜不可能这么简单……
  • 设置邮件之间的时间间隔,以便新邮件将检查该时间间隔内的所有错误并仅发送包含所有错误的邮件..
  • @Coderanonymous 我该怎么做

标签: php mysql email error-handling


【解决方案1】:

您也可以在数据库表中设置一个标志,用于存储该错误是否已通过电子邮件报告,以及错误发生的日期时间。决定您希望获取电子邮件报告的时间,例如每小时整点。然后,当您发现错误并将其插入数据库时​​,检查是否有任何未完成的错误需要报告,以及它们的时间时间戳是否超过了您确定的时间,如果是,则将它们全部分组并通过电子邮件发送报告。

【讨论】:

    【解决方案2】:

    我做的是

    已发生数据库错误意味着它可能是一个简单的错误或致命的错误,例如 MySQL 服务器已消失。那时尝试访问数据库将毫无用处。

    • 即时创建错误日志文件。
    • 如果文件大小为 0 字节/不存在,我会触发一封电子邮件,然后将错误记录到新创建的文件中。
    • 如果出现更多错误,我会将它们全部记录下来。
    • 处理错误后,我清除/删除文件。
    • 下次出现错误时,我会再次收到邮件。

    我知道它具有删除文件的唯一手动工作。但是你用这个方法解决了很多问题。

         /**
         * THIS FUNCTION LOGS THE ERRORS TO THE FILE
         * @param  string  $error_details Details of The Error
         * @return bool            
         */
        function saveErrorToFile($error_details){
    
            $file_path = JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'error_log.txt';
            if(!JFile::exists($file_path ))
            {
                //create the file and write the error
                JFile::write($file_path,$error_details);
    
                //send the mail with the error
                $mail =& JFactory::getMailer();
                $mail->setSender(array('support@abc.com', 'support'));
                $mail->setSubject('DATABASE ERROR');
                $mail->setBody($error_details);
                $mail->IsHTML(true);
                $mail->addRecipient('dasun@abc.com');
                $mail->Send();
    
            }
            else
            {
                //read the existing content of the file and append with the new error
                $file_content = JFile::read($file_path);
                $file_content = $file_content."\n\n".$error_details;
                JFile::write($file_path,$file_content);
            }
    
            return true;  
        } 
    

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2010-09-07
      • 1970-01-01
      • 2018-06-08
      • 2017-11-29
      • 2013-05-07
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      相关资源
      最近更新 更多