ShinobiLayer: SendGridでClick TrackingやOpen Trackingを無効にする方法（Postfix + SMTP API）

#1. はじめに
[SendGrid初心者のための注意点（SoftLayer版）](http://qiita.com/testnin2/items/ceb27d418a017c0c3490) にて紹介したように、SendGridはどのパッケージを選択するかによって、デフォルトの送信オプションが異なります。特に注意するべき項目は、Click TrackingやOpen Trackingです。詳細は先述のリンクをご確認下さい。
リレーサーバーによっては、SendGridへの転送前にPostfixにてX-SMTPAPIヘッダを付与することで、メール送信時にClick Tracking/Open Trackingを無効にすることが可能です。ここでは、Postfixをリレーサーバーとして利用している際に、SendGridのX-SMTPAPIヘッダを付与することで、各種設定を切り替える方法を提示します。

#2. Postfixの導入と構成

##2.1 Postfixの導入
今回は執筆時点で最新のCentOS7を利用しています。SASL認証を使用するので、cyrus-sasl-plainも併せて導入しておきます。

```text:Postfixの導入
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

# yum install -y postfix cyrus-sasl-plain

# postconf |grep mail_version
mail_version = 2.10.1
milter_macro_v = $mail_name $mail_version

```

##2.2 SendGridと連携するためのリレー設定
`/etc/postfix/main.cf`に以下の設定を追記します（最低限必要なもののみ記載しています）。yourSendGridUsernameとyourSendGridPasswordの箇所は、SendGridのuserid/passwordを入力します。ちなみに、pcreとはPerl Compatible Regular Expressions（Perl 互換正規表現）のことです。

```text:/etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = static:yourSendGridUsername:yourSendGridPassword
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
header_checks = pcre:/etc/postfix/header_checks
```

参考URL
https://sendgrid.kke.co.jp/docs/Integrate/Mail_Servers/postfix.html
https://knowledgelayer.softlayer.com/procedure/e-mail-delivery-service-server-side-configuration-centos-plesk-postfix

#3. X-SMTPAPIヘッダ付与の設定
Postfixでのリレー時にX-SMTPAPIヘッダを付与するために、`/etc/postfix/header_checks`に以下の設定を追記します。ここでは、subscriptiontrack、clicktrack、opentrackを全て無効にする際の例を挙げています。もし有効にしたい場合は全て{"enable":1}を設定して下さい。

```text:/etc/postfix/header_checks
/^From:/ PREPEND X-SMTPAPI: {"filters":{"subscriptiontrack":{"settings":{"enable":0}},"clicktrack":{"settings":{"enable":0}},"opentrack":{"settings":{"enable":0}}}}
```

全て作業が完了したら、設定を反映させるためにPostfixを再起動します。

```text:postfixの再起動
# systemctl restart postfix
```

参考URL
https://sendgrid.kke.co.jp/docs/API_Reference/SMTP_API/
https://sendgrid.com/docs/Utilities/smtpapi_validator.html
http://hoursofop.tumblr.com/post/17760274650


#4. テスト

以下のように端末からテストします。

```
# sendmail xxxxx@xxx.xxx.xxx
From:test@test.com
To:xxxxx@xxx.xxx.xxx
Subject: Test4
This is test4
http://www.yahoo.co.jp
.
```

すると、maillogから、X-SMTPAPIがヘッダーに付与されている旨の情報が確認できます。

```text:/var/log/maillog
Mar  7 22:34:00 osc01 postfix/pickup[22110]: C13B2FC30D: uid=0 from=<root>
Mar  7 22:34:00 osc01 postfix/cleanup[26093]: C13B2FC30D: prepend: header From:test@test.com from local; from=<root@osc01.localdomain> to=<xxxxx@xxx.xxx.xxx>: X-SMTPAPI: {"filters":{"subscriptiontrack":{"settings":{"enable":0}},"clicktrack":{"settings":{"enable":0}},"opentrack":{"settings":{"enable":0}}}}
Mar  7 22:34:00 osc01 postfix/cleanup[26093]: C13B2FC30D: message-id=<20160307133400.C13B2FC30D@osc01.localdomain>
Mar  7 22:34:00 osc01 postfix/qmgr[2397]: C13B2FC30D: from=<root@osc01.localdomain>, size=441, nrcpt=1 (queue active)
Mar  7 22:34:02 osc01 postfix/smtp[26095]: C13B2FC30D: to=<xxxxx@xxx.xxx.xxx>, relay=smtp.sendgrid.net[xxx.xxx.xxx.xxx]:587, delay=48, delays=46/0.14/1.1/0.29, dsn=2.0.0, status=sent (250 Ok: queued as vG74ZLh5TnCCvxnH3mkz_A)
Mar  7 22:34:02 osc01 postfix/qmgr[2397]: C13B2FC30D: removed
```

ちなみにFree Packageであっても、Click TrackingやOpen Trackingの有効・無効は切り替え可能でした。

* Click TrackingやOpen Trackingを無効に設定した時={"enable":0}<br>
![001.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/b36a8403-f9a2-42df-3798-aa867b2733b1.jpeg)
* Click TrackingやOpen Trackingを有効に設定した時={"enable":1}<br>
![002.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/8da118c6-2dc2-254c-d736-107e97138c5f.jpeg)