使用codeigniter和sendgrid Webhook获取电子邮件状态

时间:2019-10-07 12:26:47

标签: codeigniter-3 webhooks sendgrid-api-v3

我已经集成了sendgrid来发送邮件。我还想跟踪用户是否打开了邮件,然后单击邮件内的链接。
这就是我使用sendgrid的原因。 使用它,我可以发送邮件,但不能跟踪邮件状态(是否打开邮件,是否单击链接)。
我尝试了下面的代码发送邮件。

 function sendMail($toMails, $body, $subject, $ccMails = array(), $bccMails = array()) {
        $ci = &get_instance();
        if (empty($toName)) {
            $toName = $toMails;
        }
        $sendMail = $ci->config->item('sendMail');
        $email = new \SendGrid\Mail\Mail();
        $email->setFrom($ci->config->item('from'), "From User name");
        $email->setSubject($subject);

        $email->addTos($toMails); //for multiple user pass array with emails and names
        $email->addCcs($ccMails);
        $email->addBccs($bccMails);
        $email->addContent("text/html", $body);
        $email->setFooter(false, "", "<strong>If you don't want to receive this type of email in the future, please <a href='http://w3schools.com'>Unsubscribe</a>.</strong>");
        //$email->setSpamCheck(true, 1, "http://localhost:8081/");
// Tracking Settings
        $email->setClickTracking(true, true);
        //$email->setOpenTracking(true, true);
        $sendgrid = new \SendGrid($ci->config->item('key'));
        try {
            $response = $sendgrid->send($email);
        } catch (Exception $e) {
            echo 'Caught exception: ', $e->getMessage(), "\n";
        }
        if ($sendMail) :
            if (!$response->statusCode()) :
                _pre($response->headers());
                return false;
            else :
                return true;
            endif;
        endif;

    }

可以正常工作,只是它会进入垃圾邮件。

现在下面的代码,我用来获取每个电子邮件ID的详细信息。

 $sendgrid = new \SendGrid($this->config->item('key'));
        $query_params = json_decode('{"start_date": "2019-10-07","end_date": "2019-10-07","to_email": "cadmin1@getnada.com","subject":"This is a subject test"}');
        $response = $sendgrid->client->stats()->get(null, $query_params);
        _pre($response->body());
        exit;

上面的代码仅提供给我明智的日期数据,但我也希望提供明智的电子邮件ID。
但是尽管为此添加了一个参数,但我仍然没有得到期望的输出。

https://sendgrid.com/docs/for-developers/sending-email/getting-started-email-activity-api/#filter-by-recipient-email
我使用了上面的演示,在该演示中,他们使用了curl,但是我使用的是CodeIgniter。 我不确定sendgrid版本,这就是为什么我同时添加了两个版本标签,我使用了API一。

有人对此有适当的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我已经实施了webhooks来存档我的愿望输出。
为此,需要按照documentation shows

的步骤进行操作

之后,需要创建一个页面,我们可以从中获取邮件状态。 在执行该页面时,它会根据活动返回数据。

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: *');

$data   = file_get_contents("php://input");
$events = json_encode($data, true);

$requestData = array('response' => $events);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "<url which we earlier set for webhook as per documentation>");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close($ch);

?>

我使用了Curl来获取欲望输出。