Jex’s Note

Linux Email 寄信

sendmail

使用本機寄信的套件

安裝

sudo apt-get install sendmail

測試

sendmail xxx@example.com
Subject: Test from example.com
Hello~anyone!
.

Q&A

如果網站 hostname 有改過, 會發現寄信很慢, 甚至要一分鐘以上

/etc/hosts127.0.1.1 加上以下兩個 hostname :

127.0.1.1   ubuntu 106-185-47-26 106-185-47-26.localhost
如果 example.com 當作 gmail 的信箱, 主機 hostname 又設定成 example.com 的話

如果寄到

sendmail xxx@example.com
Subject: Test from example.com
Hello~anyone!
.

就會得到寄不出信的錯誤

/home/jxxx/dead.letter... Saved message in /home/jxxx/dead.letter

/var/log/mail.log 也會報錯

sm-mta[17354]: s6T7p65B017354: Milter (opendkim): error connecting to filter: Connection refused by localhost

會有這樣的訊息, 是因為主機認為是寄到 localhost 的, 所以就不會寄出

解決方法是把 hostname 改掉

echo "newHostname" > /etc/hostname
hostname -F /etc/hostname

/etc/hosts 記得也要設對 :

127.0.0.1       localhost
127.0.1.1       newHostname newHostname.localhost

然候就能順利寄信了

如果找不出問題

可以用 sendmail 指令寄信並觀查 /var/log/mail.log 出現什麼

使用 mailgun

mailgun是一個可以幫你寄送 email 的服務, 你或許不想用本機的寄,

可能考量到容易被當垃圾信或是不希望 server 在寄信時被 block 住,

那麼你可以考慮用 mailgun, 它的好處有 :

  • 建立在 HTTP 協定, 所有 API 都是 RESTful 的, 白話點就是用 curl 就能寄信了
  • 提供主流語言的 library, 使用 Package management 裝完就可以直接用了
  • 免費 10,000 封 email 幫你寄, 不需預綁信用卡
  • Custom domain

使用自己的 domain

點選 Add New Domain, 輸入 jex.tw, 接著以下步驟照著他頁面上的指示設定

登入你的 domain 代管網站 (ex: godaddy), 到 DNS ZONE 那設定

CName (Alias)

Host        Points To
---------------------
email       mailgun.org

MX (Mail Exchanger)

Priority    Host    Points To
-----------------------------
10          @       mxa.mailgun.org
10          @       mxb.mailgun.org

TXT (Text)

Host            TXT Value
-------------------------
@               v=spf1 include:mailgun.org ~all
k1._domainkey   k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcRvHyhPC9tltbqtKqUCNxJ39l5QAqQm7NWipFV40XG4KF2WVm0brd6U360VDng97vzlHBkEBS+chpa11L+grAhxFiGewFYRQ3rATl90eA1NKpGSBlm4yqig0P+fo++1j1EiA2Gn3KllTdPnVrWsRLaPN+***************cKQIDAQAB

接下來等 mailgun 那邊都生效就完成了, MX 會稍微比較久一點才會 active

Test

使用 CURL 寄信測試, 將以下指令中的這行 -F to=your_email@gmail.com 改成你 gamil 帳號

curl -s --user 'api:key-7******************************5' \
    https://api.mailgun.net/v3/jex.tw/messages \
    -F from='Contact <contact2@jex.tw>' \
    -F to=jxxxlin@gmail.com \
    -F subject='Hello' \
    -F text='Testing some Mailgun awesomness!'

如果收到以下回覆代表 mailgun 回覆成功, 到 gmail 信箱查看信是否成功收到

{
  "id": "<20150520110053.16306.14890@jex.tw>",
  "message": "Queued. Thank you."
}

可以到 https://mailgun.com/app/logs/<your domain> 下查看寄信的狀況

將 GoDaddy 購買的 domain 綁到自己的 Gmail

gmail 必須為企業版, 一個月一個帳號 5 美金

1) 先到 google apps for work 註冊

2) 為 GoDaddy 代管的網域建立 MX 記錄, 登入後設定 DNS

在 MX 紀錄那把預設的資料刪除, 加上以下設定

Priority    Host    Points To
10          @       ASPMX.L.GOOGLE.COM
20          @       ALT1.ASPMX.L.GOOGLE.COM
30          @       ALT2.ASPMX.L.GOOGLE.COM
40          @       ASPMX2.GOOGLEMAIL.COM
50          @       ASPMX3.GOOGLEMAIL.COM

如果有用 mailgun 或他服務寄信直接刪掉之前 MX, 新增 Gmail MX 就好了, mailgun 依然可以寄信

簡易方式避免被分到垃圾郵件

1) 使用 Gmail SMTP 寄信, 但一天最多寄 100 封 (Web UI 的話一天是 500 封)

2) 設定 From Reply-To, 並且確認 server 與 domain 是在同一個地方

From: Robot<robot@jex.tw>
Reply-To: contact@jex.tw

ref :

Comments