前回我们我们演示了如何使用SendGrid来发送邮件,但现在有个需求,就是需要实时获取发送邮件的状态(如:发送成功与否,对方有没有收到,收到之后的处理-打开,删除,判定为垃圾邮件等),这就需要用到SendGrid的WebHook功能了,下面我们具体来看看如何使用。
创建WebService
首先SendGrid的WebHook需要指定一个用作接收通知的WebService URL,如下:
@RequestMapping(value="/eventReceiver", method = RequestMethod.POST)
@ResponseBody
public void sendGridEventHook(@RequestBody String jsonString) throws IOException {
ObjectMapper mapper = new ObjectMapper();
List<Event> events = mapper.readValue(jsonString, new TypeReference<List<Event>>() {});
for (Event event : events) {
LOGGER.info("email: " + event.getEmail() + ", event: " + event.getEvent());
}
}
因为SendGrid的WebHook的数据是以POST传递的JSON串,所以我们的WebService需要指定一个字符串作为参数。
上面的Event
是一个自定义的实体类,里面包含了WebHook传递的各种数据。
以上的WebService部署到服务器之前是在本地运行的,是局域网的IP,要让SendGrid能够访问到,必须要映射成外网IP,这里我们可以通过nat123的外网映射功能,具体用法自行到网上查找。
SendGrid的设定
要让SendGrid能够访问到我们的WebService,我们需要在SendGrid的网页上进行绑定。
打开https://app.sendgrid.com/settings/mail_settings
,然后展开Settings -> Mail Settings -> Event Notification
进行WebHook的设定。如下图所示:
API文档
具体用法请参见以下API文档:
https://sendgrid.com/docs/API_Reference/Event_Webhook/event.html