star76.jp

Google Compute Engineインスタンスからメールを配信する(SendGrid)

Share...Tweet about this on TwitterShare on FacebookGoogle+

Google Compute Engine(GCE) は、Google Cloud Platform のコンピューティングサービスで、Amazon Web Servicesでいうところの EC2に相当するサービスです。

GCEで作成したインスタンスからメールを送信してみたら、Connection timed out となって失敗したので、色々調べてみるとどうやらoutboundでPort25が遮断されているようでした。
そこで、GCEの Networking and Firewalls というドキュメントを見てみると、

Blocked traffic

Compute Engine blocks or restricts traffic through all of the following ports/protocols between the Internet and virtual machines, and between two virtual machines when traffic is addressed to their external IP addresses through these ports (this also includes load-balanced addresses).

Note: These restrictions do not apply for traffic between two virtual machines through their network IP addresses.

All outgoing traffic to port 25 (SMTP) is blocked.
Most outgoing traffic to port 465 or 587 (SMTP over SSL) is blocked, except for known Google IP addresses.
Traffic that uses a protocol other than TCP, UDP, and ICMP is blocked, unless explicitly allowed through Protocol Forwarding.

なんと、25番だけでなく、465や587も閉じているとのこと。

ということで、メール配信サービスの SendGrid を使って、メール配信することにしました。

以下、作業手順です。
SendGridのアカウントは、事前に作成しておきます。

1. Postfixのインストール

まずは、GCEのインスタンスにPostfixをインストールします。

2. 認証用ファイルの作成

sasl_passwd ファイルに、以下を記述します。

postfixユーティリティを使用して、sasl_passwd.db ファイルを作成します。

postfixの main.cf を、以下のように修正します。

postfixを再起動します。

3. メール送信チェック

メールが送信されるか確認してみます。

正常にメッセージが送信されると、以下のようなログがでます。

status=sent (250 Delivery in progress) が返ってきていることを確認して下さい。

ダッシュボードはこのような感じで、送信カウント数が増えていました。
SendGridDashboard.png

4. 認証用ファイルの削除

正常にメールが送信できたことが確認できたら、認証用ファイルを削除します。

以上です。簡単にできて、便利ですね☆

Share...Tweet about this on TwitterShare on FacebookGoogle+

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">