1

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.comb@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版本
@SneakyThrows
private 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...
我这边贴出一部分代码

@SneakyThrows
private 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...


国子监阿创
131 声望8 粉丝

任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler