【GCP】Google Cloud Platformからメールを送信するには工夫がいる

今回は、GCPからメールを送信する方法について解説するよ

普通はできると思うだけど、他のサーバとどこか違うの?

そうなんだ、普通はメール送信は当たり前にできることだと思うんだけど、GCPだとちょっと工夫が必要なんだ。

そうなんだ!
何が違うかぜひ教えてほしいです。

目次

GCPから直接メールは送れない!?

GCPの制限で普通にはメールが送れない

通常メールを送る場合には、メールサーバに対してアクセス=>認証=>メールを送信という流れになります。

ところが、GCPはメールサーバのアクセスに必要なポート(25)をファイアウォールによってガードされています。これは、マニュアルにも記載されており、対応するにはそれなりに知識が必要となります。

標準メールポートの使用

Google Cloud は、宛先 TCP ポート 587 または 465 を使用して外部宛先 IP アドレスに送信されるトラフィックに制限を設定しません。暗黙の下り(外向き)許可ファイアウォール ルールは、このトラフィックをブロックする下り(外向き)拒否ファイアウォール ルールが作成されない限り、このトラフィックを許可します。

不正使用のリスクがあるため、宛先 TCP ポート 25 が VPC ネットワークの外部にある場合、その宛先への接続はブロックされます。これには、Google Workspace での SMTP リレーの使用が含まれます。ただし、一部のプロジェクトにはこの制限がなく、ポート 25 での外部 SMTP 下り(外向き)が許可されます。詳細については、ブロックされたトラフィックと制限されたトラフィックをご覧ください。

GoogleCloudサービス ComputingEngine ガイド
https://cloud.google.com/compute/docs/tutorials/sending-mail?hl=ja

これが原因で通常APIを使用して実現できるメール送信が、できなくなっています。

どうすればよいのか?

通常使用されるポート番号を使用しなければ、メールを送信することができます。
その手法はいくつかあります。
こちらのURLにも紹介されています。
https://cloud.google.com/compute/docs/tutorials/sending-mail?hl=ja

①メール転送サービスを利用する
②別ポートで実現する
③プラグインを使って、SMTPサーバ経由で送信する

今回は、①の手法について解説します。

メール転送サービスとは

サービスの種類や違い

サービス名特徴
SendGrid・GCPサービス推奨
・フリープランあり(1000通/月)
一般利用者向け
ただし、有料プランを使用するための審査が難しい、企業利用には向かない
Mailjet・GCPサービス推奨
・プランが柔軟
・企業利用の審査が通りやすい

サービスの契約と設定

今回は企業向けを意識して、「Mailjet」について説明します。

まずはサービスの契約

以下のURLからアカウント登録画面に進みます。
https://app.mailjet.com/signup

新規ユーザ登録を行います。
・担当者名
・会社名
・会社ホームページ
が必要になります。

初期プラン「Free」でも月あたり6000通、1日あたり200通のメール転送は無料で行ってくれます。
それ以上を使う場合は、「Change plan」から設定が必要です。(今回は割愛)

次のページでも支払い情報を設定できます。(今回は割愛)

「Complete order」を押下するとメールが届きます。

メールから「activate処理」を行えば、申請処理は完了です。

転送メールの設定

次は、転送するメールの設定を行います。
ダッシュボード上から「Get started with Mailjet」に進みます。

順番に、指示に従って設定していきます。

特に送信元ドメインを設定する項目が重要です。

「Add domain」から設定を追加します。

「Label」と「Domain」を入力したら、設定内容の有効化を行います。

ドメイン設定を行っているDNSサーバに対して、DNSレコードを追加して設定します。
※DNSの知識が必要になるので注意です。

成功すると、一覧画面に「active」とつきます。ここまで進めば設定は完了です。

GCP上で使うAPIキーを作成

GCPにメール転送サービスを紐づけるには、APIキーが必要になります。
アカウントページからAPIキー(API KEY + Secret KEY)を発行します。

以下のウィンドウで、APIキーが表示されます。

※必ずメモしてください。次回以降は伏字でのみ表示されます。
分からなくなった場合は再発行となるため、各所の設定をやり直す必要があります。

GCP上の設定

次は、GCP上での設定を行います。
基本的には以下URLの手順に従って設定を行います。
https://cloud.google.com/compute/docs/tutorials/sending-mail/using-mailjet?hl=ja

ここからの内容はLinux(Debianをベースにする)の知識が必要になります。

aptコマンドを使って、メールソフト「postfix」をインストールします。
※)sudoは管理者権限で実行するための補助コマンドです。

$sudo apt update && sudo apt -y install postfix libsasl2-modules

次にインストールしたpostfixの設定ファイルを変更します。
変更はviコマンドを使用します。
変更内容は、URL内の記載に従ってください。

$sudo vi /etc/postfix/main.cf

次にpostfixからmailjetを接続するため、sasl用の設定ファイルを編集します

$sudo vi /etc/postfix/sasl_passwd

記載内容は以下の通りです。

in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY

YOUR_API_KEY
YOUR_SECRET_KEY
の部分をmailjetで取得したAPIキーを記載します。

マッピングするsaslファイルを実行形式に変更します。
実行形式に変更にはpostmapコマンドを使用します。
以下の実行結果で「sasl_passwd.db」が出来上がれば成功です。

$sudo postmap /etc/postfix/sasl_passwd
$sudo ls -l /etc/postfix/sasl_passwd*

最後に、postfixを実行します。
以下のコマンドにより、postfixが常時動作する(windowsではサービス、Linuxではデーモンという)状態になります。

sudo /etc/init.d/postfix restart

あとは、メールを送信する処理を行うと、GCPからmailjetを経由してメールが送信されます。

メール送信の際には注意が必要です。
送信元アドレス(From)が、自分のドメインと同じである必要があります。
(mailjetに設定したドメインを使わないと転送されない)
正しく、送信元アドレスを設定しましょう。

まとめ

知らないと、落とし穴にはまっていました。ありがとうございます。

知っておけば回避できる内容なので、GCPを使う際には検討してみてね。

・GCPからメールを送る場合には、標準の設定ではうまくいかない
・メールを送る方法には3種類ある
自分に合った方法を選択して、メール送信できるようにしましょう

このブログ記事はお役に立てましたか?

よかったらシェアしてね!
  • URLをコピーしました!

このブログ記事を執筆したパソコン講師

「テクこや」の知恵袋「はかせ」です。

基礎的なことからマニアックなことまで、いろいろなジャンルで見ている方の「なるほど」を引き出していきます(*'ω'*)

わからないことがあれば、お気軽に相談室まで(^^)/

質問などあれば気軽に書き込んでくださいね♪

コメントする

目次