【问题标题】:How do I receive and use webhook data sent from Mailgun?如何接收和使用从 Mailgun 发送的 webhook 数据?
【发布时间】:2014-07-21 18:50:45
【问题描述】:

我正在使用 MailGun API 中的 webhook 来在电子邮件送达时通知我。

我使用 RequestBin 服务查看正在发送的数据:

domain: domain.com
token: 6o02nxnu-7grjkvkzxdyn2lsm0w7fagidgxzon8-cucz8u15w0
signature: a4d27e390495691fb4b8fb76b3b8a71c90cf8cd467140f5c3d36e023ec343e5c
Message-Id: <20140721155006.120305.72293@domain.com>
timestamp: 1405957808
X-Mailgun-Sid: WyJjZjMyNCIsICJjaHJpc3NlY2tsZXJAZ21haWwuY29tIiwgIjAxNzBiNSJd
message-headers: [["Received", "by luna.mailgun.net with HTTP; Mon, 21 Jul 2014 15:50:06 +0000"], ["Content-Type", ["multipart/alternative", {"boundary": "21586684bc984a0cbc485d4a862fc34c"}]], ["Mime-Version", "1.0"], ["Subject", "Please Check Your Account"], ["From", "Sender Name <testemail@domain.com>"], ["To", "Chris <anotheremail@gmail.com>"], ["X-Mailgun-Sid", "WyJjZjMyNCIsICJjaHJpc3NlY2tsZXJAZ21haWwuY29tIiwgIjAxNzBiNSJd"], ["Date", "Mon, 21 Jul 2014 15:50:08 +0000"], ["Sender", "testemail@domain.com"]]
recipient: email@domain.com
event: delivered

我现在正在尝试使用他们通过 POST 数组发送的信息并将其插入到我的数据库中。

我可以直接从它们发送的 POST 数组中获取以下变量:

$recipient_email = $_POST['recipient']; //This works
$timestamp = $_POST['timestamp']; //This works

我无法直接从 POST 数组中获取以下变量。它们位于我不熟悉的“消息头”变量中的数据类型中。我怎样才能访问这些?

$sender_name = ?;
$sender_email = ?;
$recipient_name = ?;
$subject = ?;

$sql = 'INSERT into mail SET
        from_name = "'.$sender_name.'",
        from_email = "'.$sender_email.'",
        to_name = "'.$recipient_name.'",
        to_email = "'.$recipient_email.'",
        subject = "'.$subject.'",
        date = "'.$timestamp.'"';

$result = $conn->query($sql) or die(mysqli_error($conn));

【问题讨论】:

标签: php json api webhooks mailgun


【解决方案1】:

嗯,message-headers 是一个数组数组。对于每个子数组,第一项(键0)是“标签”,第二项(键1)是“值”。所以你可以这样做:

foreach ($POST['message-headers']} as $i => $header) {
    switch( $header[0] ) {
        case 'Subject'
            $subject = $header[1];
            break;
        case 'Sender'
            $sender_email = $header[1];
            break;
        /* Any other cases that I'm too lazy for now ...*/
    }
}

(虽然建立一个 $header[0] 与变量名的映射,然后简单地循环而不使用 switch 可能更容易阅读,但这只是我的口味。)

但是请参数化 SQL 查询!否则你很快就会被黑。

【讨论】:

    【解决方案2】:

    这是我在 Django 应用程序中所做的......

    我刚刚将所有 post dat 记录到日志文件中并使用 tail 命令对其进行监控

    1) 你可以在 PHP 中做同样的事情,比如将代码记录到错误日志中

    2) 错误日志(json_encode($_POST));

    3)检查监控你从mailgun收到的帖子数据

    4) 并使用所需的参数:)

    这里是python代码:

        sender    = request.POST.get('sender')
        recipient = request.POST.get('recipient')
        subject   = request.POST.get('subject', '')
    
        body_plain = request.POST.get('body-plain', '')
        body_without_quotes = request.POST.get('stripped-text', '')
        body_html = request.POST.get('body-html', '')
    

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多