SendGrid对接教程(Java版本)

前言

最近因为工作须要,须要接入SendGrid邮件渠道商
本人也在网络上找了很多材料,发现大部分的材料都是零零碎碎的,并没有一篇残缺的教程。
本人也是摸索了一段时间,因而将对接流程分享给大家,也算留个笔记,当前或者本人也能用得着(如有错别字,请留言纠正,感恩)。
另外,因为自己次要从事与Java语言开发,因而本文次要以Java代码为案例,其余语言的应该也能够起到借鉴的作用

对接依赖

首先是maven依赖

<dependency>    <groupId>com.sendgrid</groupId>    <artifactId>sendgrid-java</artifactId>    <version>4.9.0</version></dependency>

只须要依赖单个jar包即可,无需其余的依赖

Sender认证

认证地址:https://app.sendgrid.com/sett...
认证的次要作用就是,你认证后,才会有具体邮件下发sneder,认证分两种形式认证

集体认证

集体认证的话,发送者就是固定的,比方:
你认证了achuang@163.com这个sender,那么发送者只能是achuang@163.com

域名认证

个别公司外部会应用这种形式来认证,比方:
认证了域名achuang.com,那么a@achaung.com、b@achuang.com等以认证域名结尾的发送者都能够作为发送者来下发邮件

AppKey设置

在应用api前,咱们须要配置生成一个appKey
设置appKey地址(须要登录):https://app.sendgrid.com/sett...
因为波及到后盾操作,我在这就不截图了,其实也很简略,如有问题请留言。

SMTP对接

对于对接api,要做一个简略的阐明
对接api也分为不同的版本:V2版本、V3版本
尽管分不同的版本,然而好消息是,咱们只须要引入上述一个依赖即可,接下来咱们看下两种形式别离如何应用

V2版本
private static void sendEmail() throws IOException {    String apiKey = "后盾的appkey,具体查看appKey的设置";    Email from = new Email("发送者邮箱");    String subject = "邮件主题";    Email to = new Email("收件人邮箱");    Content content = new Content("text/html", "<h1>and easy to do anywhere, even with Java</h1>");    Mail mail = new Mail(from, subject, to, content);    SendGrid sg = new SendGrid(apiKey);    Request request = new Request();    request.setMethod(Method.POST);    request.setEndpoint("mail/send");//留神这个类型,下发邮件的时候不要批改    request.setBody(mail.build());//设置申请体    Response response = sg.api(request);//发送申请    System.out.println(response.getStatusCode());    System.out.println(response.getBody());    System.out.println(response.getHeaders());}
V3版本
@SneakyThrowsprivate static void sendEmailV3() {    String apiKey = "后盾的appkey,具体查看appKey的设置";    SendGrid sg = new SendGrid(apiKey);    Request request = new Request();    request.setMethod(Method.POST);    request.setEndpoint("/mail/send");    // Create mail    Mail mail = new Mail();    Personalization personalization1 = new Personalization();    personalization1.addTo(new Email("收件人邮件地址", "收件人名称"));    personalization1.addCustomArg("version", "1.0");//留神:自定义参数,会在回调的时候返回    mail.addPersonalization(personalization1);    mail.setFrom(new Email("发件人邮箱", "发件人名称));    mail.setSubject("Your Example Order Confirmation");    //内容对象    Content content = new Content();    content.setType("text/html");    content.setValue("<p>Hello from Twilio SendGrid!</p><p>Sending with the email service trusted by developers and marketers for <strong>time-savings</strong>, <strong>scalability</strong>, and <strong>delivery expertise</strong>.</p><p>%open-track%</p>");    mail.addContent(content);    request.setBody(mail.build());    Response response = sg.api(request);    System.out.println(response.getStatusCode());    System.out.println(response.getBody());    System.out.println(response.getHeaders());}

V3版本的操作空间,比V2版本的要高很多,上述代码中,只有局部集体需要的代码,具体其余比方附件、抄送、批量发送等性能大家能够自行钻研下
至此,邮件下发这块应该是完结了,接下来咱们看看回调

回调

回调地址配置

咱们想要SendGrid回调咱们,那么咱们是不是须要提供一个口子供它回调(回调在SendGrid官网叫做Event Webhook)
咱们能够间接在后盾配置回调地址:https://app.sendgrid.com/sett...
配置的时候,有一个Authorization Method,如果没有抉择None即可
同时能够抉择你须要订阅的事件类型,比方:关上、点击、拒收等

内容解析

回调的内容格局参考:https://docs.sendgrid.com/for...
我这边贴出一部分代码

@SneakyThrowsprivate void doCallBack(SendGridEmailNoticeMessage message) {    switch (message.getEvent()) {        case "delivered"://达到            doDelivered(message);            break;        case "bounce"://拒收            doBounce(message);            break;        case "unsubscribe"://退订            doUnsubscribe(message);            break;        default:            log.error("不反对的SendGrid事件类型:{}", JsonUtils.toString(message));    }}

大家依据本人的需要,来解决本人的业务逻辑即可
另外:如果返回的内容中短少须要的数据,能够在下发的时候通过自定义的形式下发
还有其余想理解的或者问题,能够在下方留言

相干链接

留神须要梯子哦

官网:https://sendgrid.com/
登录:https://app.sendgrid.com/
回调事件报文:https://docs.sendgrid.com/for...
谬误排查:https://www.thinbug.com/q/422...
对接api入口:https://docs.sendgrid.com/for...
自定义参数:https://docs.sendgrid.com/for...
邮件发送文档:https://docs.sendgrid.com/api...
设置appKey:https://app.sendgrid.com/sett...
发件人认证地址:https://app.sendgrid.com/sett...
配置回调地址:https://app.sendgrid.com/sett...