Background

最近剛好工作上有需要寄送Email的服務,所以紀錄一下如何串接市面上既有的 Email Service. 後來我選擇了 Mailgun email service。 理由有幾個: 1. 無腦串接,透過API即可 2. 每個月有10,000封免費的量,評估了一下夠用 3. 精美的UI介面, 4. 豐富的Tracking info(open,click, unsubscribe等)

Mailgun

要先綁定一張新用卡

到你的DNS更新你的 dns record,基本上照他的教學步驟走都沒啥大問題,但記得如果你要 Tracking 比較特殊的 event 時你必須多加一個 CNAME 的 record。 到 Domain Settings 的頁面中可看到相關的資訊。

Screen-Shot-2019-07-16-at-12.55.38-AM

API

ok! 上面都設定完之後,我們要透過API來串接 mailgun service。以下程式都以 python code 當作範例。

import requests

APIHOST = "https://api.mailgun.net/v3/$YOUR_DOMAIN/messages"
APIKEY = $APIKEY


requests.post(
    APIHOST,
    auth=("api", APIKEY),
    data={
        "from": "Taiker <service@$YOUR_DOMAIN>",
        "to": ["liang0816tw@gmail.com"],
        "subject": "Tracking Event",
        "html": "<html>It is so simple to send a message.<br/>Right?<br/><a href='https://google.com'>Google Link</a></html>",
    },
)

執行這段程式後應該會收到 EMAIL,同時透過 Mailgun 的 Logs 應該也看得到相對應得 log

Screen-Shot-2019-07-16-at-1.04.48-AM

那接著我們打開這封 Email,並點擊 Email 中的 link。(可以反覆開啟點擊) 再返回 Logs 查看發現結果如下:

Screen-Shot-2019-07-16-at-1.24.48-AM

我們發現我們想要Tracking的event都有到Logs中記錄著。

Tag

上面一個section我們順利的tracking到我們想要的資訊,但是發現有個問題,如果我想要的是Unique Open 或是 Unique Click 怎麼辦呢? 這時我們就要利用 Tag 來幫助我們, mailgun 提供了 Tag 的欄位在 API 中使用:

requests.post(
    APIHOST,
    auth=("api", APIKEY),
    data={
        "from": "Taiker <service@$YOUR_DOMAIN>",
        "to": ["liang0816tw@gmail.com"],
        "subject": "Tracking Event",
        "html": "<html>It is so simple to send a message.<br/>Right?<br/><a href='https://google.com'>Google Link</a></html>",
        "o:tag": ["12345"]
    },
)

例如上面的程式碼我們增加了Tag: 12345。(記得每封email最多只能有三個tags)

接著我們執行程式來發送Email,收到後一樣多次打開和點擊連結。接著我們要到 Analytics 的選單中:

Screen-Shot-2019-07-16-at-1.52.17-AM

在上圖中我們可以看到多了一個12345的tag,列表中也顯示了 Unique opens&Unique clicks 兩個我們想要的資訊,當然點進去後可以更多詳細的資料,但這邊我就不細講了。

OK! 以上就是對 Mailgun service 所做的簡單紀錄。

Reference