0

在几个 Delphi XE2 项目中,我设置了 Eurekalog 以通过“HTTP 上传”发送错误报告,效果很好,因为我使用 PHP 脚本捕获错误报告,将其保存在目录中并通过电子邮件发送给我:

<?php

require 'PHPMailerAutoload.php';

foreach ($_FILES as $key => $value)
{
    $uploaded_file = $_FILES[$key]['tmp_name'];
    $server_dir = 'upload/';
    $server_file = $server_dir . date("Y-m-d H-i-s ") . basename($_FILES[$key]['name']);
    $ext = strtoupper(pathinfo($server_file, PATHINFO_EXTENSION));
    if ($ext != 'EL')
    {
        continue;
    }
    if (move_uploaded_file($uploaded_file, $server_file))
    {
        echo '<html>';
        echo '<head>';
        echo '<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=UTF-8">';
        echo '<title>Bug submission</title>';
        echo '</head>';
        echo '<body>';
        echo 'Thank you!<br />';
        echo "<!--\n";
        echo "<EurekaLogReply>Thank you for your feedback!</EurekaLogReply>\n";        
        echo "-->";
        echo '</body>';
        echo '</html>';

        SendBugReportMessage('auserofmyprogram@usersofmyprogram.com',
                             'A User of my program',
                             'Eurekalog Bug Report',
                             'This is a bug report from Eurekalog.',
                             'eurekalog.bugreport@mysite.com',
                             $server_file,
                             basename($server_file)
                             );
    }    
}

function SendBugReportMessage($AFrom, $AFromName, $ASubject, $ABodyText, $ARecipient, $AFileToAttach, $ANameOfFile)
{
    $email = new PHPMailer();
    $email->From      = $AFrom;
    $email->FromName  = $AFromName;
    $email->Subject   = $ASubject;
    $email->Body      = $ABodyText;
    $email->AddAddress($ARecipient);
    $file_to_attach = $AFileToAttach;
    $email->AddAttachment($file_to_attach, $ANameOfFile);
    return $email->Send();
}

?>

现在我有几个程序使用这个相同的 PHP 脚本来上传他们的错误报告。但是,发送到此 PHP 脚本的错误报告始终名称为“BugReport”。那么,在 PHP 脚本中如何获取发送错误报告的程序的名称,以便我可以通过附加程序名称来保存它并将程序名称包含在邮件主题中?或者是否可以通过在 Delphi 代码的一侧实现某些东西来解决?还是在Eurekalog?

Eurekalog 版本是 7.1.0.0

4

2 回答 2

1

您可以为此使用网络字段。EurekaLog 具有OnCustomWebFieldsRequest事件处理程序,它允许您更改任何基于 Web 的发送方法的 Web 字段(例如 HTTP 上传、带有 HTTP API 的错误跟踪器等)。

分配这样的事件处理程序:

uses
  EEvents;

procedure AddApplicationName(const ACustom: Pointer; ASender: TObject { TELWebSender }; AWebFields: TStrings; var ACallNextHandler: Boolean);
begin
  AWebFields.Values['Application'] := AnsiLowerCase(ExtractFileName(ParamStr(0)));
end;

initialization
  RegisterEventCustomWebFieldsRequest(nil, AddApplicationName);
end.

然后,您可以从脚本访问新的“应用程序”字段。对于 PHP,它将是 $_REQUEST["Application"] 或 $_POST["Application"]

于 2014-10-07T14:46:57.150 回答
0

对于此特定任务,您还可以使用OnCustomFileName 事件处理程序来更改用于发送的文件名。您对 AFileType = ftZIP(如果您要发送打包的 .elp 报告)或 AFileType = ftBugReport(如果您要发送未打包的 .el 报告)感兴趣。

于 2014-10-07T15:20:49.697 回答