🌟
sendgridのSMTPでメールを送る方法(nc/go)
背景
クラウドのSMTPサーバで遊ぶ夢は各社のVMからのOP25Bで儚く潰えたため、SendGridを使うことにした。APIでは添付ファイルサイズの制限(20MB)があるが、SMTPで送るには設定上の制限はないとのこと(ただし、大きなサイズのファイルを送らないよう強く推奨)なので、こちらを試すことにする。
Sendgridコントロールパネルからの設定
sender verification
Settings->Sender Verification
spamに使われないよう、登録時にも用途などの人力確認などありました。アカウントが作成されたらコンソールにログイン(英語のみ)
送信元のアドレスとして使えるようにするにはドメイン単位かアドレス単位かの指定がありどちらでもよいですが実行しておきます。ドメインの方がSPF/DKIMなども対応してくれるようなのでよいかと思います。アドレス単位の送信元にフリーメールアドレスを入力すると、「推奨しない」と言われてしまいます。これはフリーメールのドメイン自体にSPF/DKIMを設定できないからでしょう。
設定完了するとこんな感じになります。SMTPのfromでこのアドレスを指定します(envelope fromも)
APIKeyの作成
Settings->API Keys
Create API Keyをクリックして、作成します。
Restricted AccessのMail Sendだけ権限あればとりあえずOK
Keyが作成されるので、こちらの文字列を保存。この画面でしか表示されません。
これで準備完了
SMTPで送信してみる
SMTPAUTHには以下の情報を使います。
- ID:apikey
- pw:上で作成したキー文字列
SMTPAUTHに必要な情報を用意しておきます。
> echo -n 'apikey' | openssl base64
> echo -n '<apikey>' | openssl base64
つなぎます
> nc smtp.sendgrid.com 587
EHLO test
250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN
AUTH LOGIN
334 VXNlcm5hbWU6
YXBpa2V5
334 UGFzc3dvcmQ6
<apikeyのデコード文字列>
235 Authentication successful
MAIL From:*<sender verificationしたアドレス>*
250 Sender address accepted
RCPT To:*john.doe@gmail.com*
250 Recipient address accepted
DATA
354 Continue
From: *<sender verificationしたアドレス>*
To: *john.doe@gmail.com*
Subject: test
testmail
.
250 Ok: queued as
メールヘッダのfrom,to,subjectがないとエラーになるっぽいです。
goの実装
こちらです。
環境変数にするid/pwは平文で設定してください
Discussion