『ラゴン・ジュルナル』に来てくださってありがとうございます!

「JavascriptをOn」にしていない端末やブラウザで閲覧しているかたに、このアラートが表示されるようになっております。Javascriptを許可してからおたのしみくださいませ。

Chrome「設定」→「詳細設定」→「プライバシーとセキュリティー」→「サイトの設定」→「Javascript」を許可 iPhone「設定」→「Safari」→「セキュリティ」→「Javascript」をオン iPad「設定」→「Safari」→「詳細」→「Javascript」をオン Android「メニュー」→「設定」→「高度な設定」→「Javascriptを有効」など

【独自ドメインのメール設定の手順書】ムームードメイン, Netlify, AmazonSES(S3/Lambda), ses-forwarder, Gmail

対象のひと😊
・仕事や趣味で独自ドメインのメールアドレスがほしいひと
・あまり使わないので年額の固定費より従量課金にしたいひと
(=AmazonSESをつかってみたいひと)
・メールサーバーを管理したくないひと
・技術的なことをいとわないひと
・メール自体は慣れたGmailで送受信したいひと

微妙にちがうひと🙇‍♂️
・独自ドメインはRoute53で取得したいひと
・お名前メール(月額42円/77円)、さくらのメールボックス(月額87円)、ムームーメール(月額100円)で十分OKなひと
・Netlifyがまったく不明なひと(これを機にというかたはぜひ!)
・英語サイトがだめなひと
・そもそもタイトルにそんなにピンと来てないひと
・いくつもある技術的な設定につまずきたくないひと

必要なもの📩
・(できればコマンドの知識)
・(できればNetlifyにあげてるサイト)
・クレジットカード(独自ドメイン購入/AWSのアカウント登録用)
・Gmailアカウント
・エディター

AmazonSESの微妙なところ

まず、アマゾンのSESは10Mまでのメールしか送れません。ここは気をつけたいところです。ほかにも、ブラックリスト入りしたアドレスの解除がちょっと面倒かつ、アドレスごとに分けたりできないです。また、風のうわさ程度ですが、日本のキャリアメールと相性が悪いとの話もあります。言うまでもなく、アマゾンなのでリージョンがアメリカとかです。

私としては、いまのところなんの問題もないです。

ただ、メーラーシェアの約六割が「Gmail」と言われるなかで、Gmailに寄せた戦略をとりたいかたは素直に「G Suite(ジースイート)」のBasicプラン(月額680円/1ユーザー)に加入することをおすすめします。ラゴングラネもひとつだけG SuiteでIDを取得して、必要があればそのIDにエイリアス(別名処理)でアドレスを増やしています。ほかの独自ドメインはNetlifyとSESでやっています(基本的につかわないので)。

もうすこし詳しく言えば、六割のひとがGmailをつかっているなら、Gmail特有の「送信者アイコン」があったほうが識別してもらえるので好ましいと思います。SESからGmailを経由させてもアイコンは出ないはずなので(アイコン画像をグーグルサーバーから取ってきているので)、G SuiteでグーグルのIDをとったほうが無難でしょう。

余談ですが、Gmailの次世代メールサービスもあります。ややクセの強さはあるものの、おもしろいのでぜひ(月額99ドル)。

(まえがき①)迷惑メール防止二法

日本には、「迷惑メール防止二法」といって、「特電法」(特定電子メールの送信の適正化等に関する法律)と「特商法」(特定商取引に関する法律)があります。

ざっとまとめるとすれば、「承諾してないひとに送るな」「承諾(オプトイン)の記録をとっとけ」「拒否られたのに送るな」「送信者の氏名、会社名、配信停止用リンクを書け」「フェイク情報をつかうな」「苦情に対応しろ」「広告は広告とはっきり言え」です。

米国にも送る際は、「CAN-SPAM Act (Controlling the Assault of Non-Solicited Pornography and Marketing Act of 2003)」という規制法があるので注意してください。

これを意識して守らないと法に触れたり、レピュテーションに響いたりします。

(まえがき②)メールのレピュテーションについて

メールが正常に確実に届くには、いろいろな都合をクリアしていかなければなりません。そのひとつにメールアドレスのレピュテーション(評価)があります。

簡単に言えば、「開封率(メールの中の画像が読み込まれた割合)」「クリック率(メールの中のリンクがクリックされた割合)」「バウンス/ブロック率(届かなかったメールの割合)」「苦情率(迷惑メールに報告された割合)」「配信停止率(配信停止された割合)」で評価が決まります。

規制法を守っておらず、めちゃくちゃな営業メールばかり送っていると、どんどん迷惑メール報告されて、最悪のレピュテーションになります。それをメールシステム業者(ESP)のせいにしたくなりますが、ESPを変えたところでレピュテーションを引き継がれるので気をつけましょう。

いくつかあるスコアサイトでレピュテーションの確認もできます。(ただ、スコアが99点でもメールが到達せずに迷惑メールフォルダに振り分けられたりします)

ムームードメインで独自ドメインを取得

まえがきお読みくださりありがとうございました。私とおなじぐらいの年代だと「迷惑メールあたりまえ」ぐらいの感覚だと思いますが、迷惑メールはどんどん規制が強くなってるよ、というのが言いたいことでした。


それでははじめます。私はいろいろあってムームードメインを利用しています。なのでこの記事はムームードメイン前提で進みますね。

できるだけアマゾンウェブサービス内でやりたいかたはアマゾンのドメインシステムである「Amazon Route 53」を利用すると途中がすこしスムーズになりますし、セルフベンダーロックイン状態で管理がらくになります。

NetlifyのDNS設定

NetlifyでDNS(Domain Name System)を設定します。

ムームードメインのほうでも「ムームーDNS」という無料サービスがあるのになぜNetlifyでやるかというと、①CDN = Content Delivery Networkで早く表示できるから、②Netlifyと仲良しのHugoをつかっていて個人的に相性がいいからです。

  • Netlifyにログインして、独自ドメインを使いたいサイトを選択して、管理コンソールから歯車アイコンの「Domain Settings」→「Custom domains」→「Add custom domain」に購入した独自ドメインを入力して「Verify」。
  • ・画面が戻され、入力した独自ドメインが増えており、注意アイコンに「Check DNS configuration」が表示されます。こちらをクリック。
  • ・以下のレコードが自動で入ります。
  • >> ドメイン 3600 IN NETLIFY 割り振られたドメイン
  • >> wwwサブドメイン 3600 IN NETLIFY 割り振られたドメイン
  • 例)
  • >> lagon-journal.ink 3600 IN NETLIFY supergoodman657.netlify.com
  • >> www.lagon-journal.ink 3600 IN NETLIFY supergoodman657.netlify.com

ドメインというのは取得した独自ドメインのこと。「割り振られたドメイン」というのは、Netlifyにサイトを登録したときに自動で付与された謎のアドレス(URL)です。長い英語や数字のあとに「.netlify.com」が来ているやつですね。

もし「www」がないほうをメインで表示されるアドレス(プライマリードメイン)にしたいときは、さらに以下のレコードを追加します。注意事項も後述します。

  • >> ドメイン 3600 IN CNAME ドメインの左辺.netlify.com
  • 例)
  • >> lagon-journal.ink 3600 IN CNAME lagon-journal.netlify.com

ドメインの左辺というのは、セカンドレベルドメインのことです。たとえば「lagon-journal.ink」だったら「lagon-journal」の部分ですね。

DNSは右から探っていくので、ドットより右側を「トップレベルドメイン」、左側を「セカンドレベルドメイン」といいます。トップレベルドメインを「netlify.com」にしたドメインをValueに入れます。

余談ですが、「XXX.co.jp」のような場合は、coがセカンドレベルドメインでXXXがサードレベルドメインになります。あくまで右からドットで区切って数えていきます。

そして注意事項ですが、Netlify的には「www」のサブドメインがついているほうをメイン(プライマリードメイン)にしてほしいなとつよくお願いしている感じです。とくにこだわりがなければ、上のやつをいれずに「www」が表示されるかたちにするのを推奨します。どういう議論があるかについては、英語ですが下記の公式ページをご覧くださいませ(英語サイト)。

<補足>

ちなみに、(ほかのサイトでときどき書くよう指定されている)Aレコードは「ドメイン→IPアドレスの変換レコード」で、そのまま「Address」という意味です。ホスト名があったほうが人間的にもわかりやすいんですね。ただ、アドレスや住所というとひとつだけのような感じもしますが、いくつでも設定できます。

今回、肝心のAレコードがないのは、Netlifyの特徴である早くて負荷の少ないCDNを活用したいからです。つまり、Netlifyがたくさん配置しているサーバーから読者にいちばんちかいやつが使われるので、私たちのほうで逆に「IPアドレス」を指定しないでおかないといけません。もちろんCDNなんて知ったこっちゃないよというひとは、AレコードでIPアドレスをひもづけて問題ありません。

また、CNAMEレコードは「Canonical Name」のことで、メインの名前のほかに別の名前もひもづけてるよという話です。「中部国際空港の住所」に対して、「セントレアの住所」を登録するイメージです。名前はちがえどおなじですね。ちなみに別名の登録なので、正規の名前がないと使えません。AレコードにいくついれてもいいのにCNAMEにするのは、IPアドレスに変更があったときにAレコードだけメンテナンスすればいいからというのがあります。

余談ですが、このサイトの「lagon-journal.ink」をdigコマンドで探ってみると「;; ANSWER SECTION: lagon-journal.ink. 20 IN A 157.230.XX.XXX」と出ます。ラベル、TTL、クラス、タイプ、リソースデータの順に出ます。

Netlifyのネームサーバー

ネームサーバを設定します。Netlifyで自動発行されたものをムームードメインのほうに入れます。ここまでは割とかんたんでしょうか。

  • ・Netlifyの管理画面に戻って「Domain」→「DNS Settings」の真ん中あたりに、「Nameservers」が連番で四つ表示されているのでコピーする。
  • ・ムームードメインで、コントロールパネル(コンパネ)から、「ドメイン管理」→「ドメイン操作」→「ネームサーバー設定」→「ネームサーバー設定変更」→「取得したドメインで使用する ※上級者向け」にさきほどのネームサーバー情報を四ついれます。浸透したら独自ドメインでサイトが表示されます。

Netlifyから自動でSSL証明書を取得する

上でやったDNS設定がすぐに浸透するはずなので、サイトの通信を暗号化するためのステップに進みます。前半の最後です。

  • ・DNS設定で入力した項目が緑色になってOKそうになったら、実際にアクセスしてみて確認する。
  • ・NetlifyのDNS設定画面の下にある「HTTPS」の「SSL/TLS certificate」にある「Let’s Encrypt certficate」をクリック。しばらくすると自動でSSL化します。Let’s Encryptの証明書は更新も自動です。

<補足>

「浸透」という言いかたのせいでうまく反映されなかったときひとのせいにしてしまいがちですが、もしすぐに反映されなかったらだいたいさっきの設定とかがまちがっていたり(とくにネームサーバ)、まだ未反映なのにアクセスしてネガティブキャッシュが残ってたりします。

すぐに反映されなくてSSL証明までいけないひとは、焦って独自ドメインのURLを連打するのではなく、まず確認していきます。(焦ってアクセスしてしまったひとは「そのサイトはないですよ」という情報がキャッシュされてしまって、しばらくその状態です。ネガティブキャッシュといいます。「$rndc flush」で消せますが。)

$ dig @a.gtld-servers.net -t ns 独自ドメイン +norec

コマンドが打てるひとは、こういった手探り系のコマンドで確認してみてください。じぶんの独自ドメインを打ち込むのがこわいひとは、まずグーグルとかで試してみて安心してください。

$ dig @a.gtld-servers.net -t ns https://www.google.com/?hl=ja +norec;

ちなみに英単語の「dig」は掘るという意味ですが、digコマンド自体は「domain information groper(ドメイン情報手探り)」の略です。

AWSの登録

前半おつかれさまでした。すこしでも学びや進捗があったらうれしいです。

後半はアマゾンウェブサービスの話をします。NetlifyのDNSのところもふたたび追記しますので、消さずにタブで出しておいてくださいませ。

まずアマゾンのメール機能を利用するために、AWS(アマゾンウェブサービス)に登録します。とくになにもむずかしくないのでカットします。繰り返しますが、クレジットカードが必要です。

リージョン登録

AWSに登録したら、マネジメントコンソールの画面右上からリージョンを設定します。私は「米国西部(オレゴン)」を設定しております。

SESでつかうアドレスの登録

  • ・マネジメントコンソールの左上から「サービス」から検索窓に「ses」や「Simple Email Service」と打ち込んで、SESに移る。
  • ・SESのサイドバーから「Email Addresses」→「Verify a New E,ail Address」でアドレスを登録する。(最初は受信できないといけないので、Gmailでいつもつかっているやつ)
  • ・GmailでAWSからきているメールを承認する。(Congratulation!)

ここまででとりあえず「SESからGmailに送信」だけできるようになりました。ここからです。

SESに独自ドメインの登録

  • ・サイドバーから「Domains」→「Verify a New Domain」で送受信につかう独自ドメインを登録します。
  • ・「Generate DKIM Settings」にかならずチェックしてから、「Verify This Domain」。

画面にレコードがたくさん出てくるので、Netlifyのほうに登録しましょう。

DNSの追加設定

Domain Verification Record

  • >> _amazonses.lagon-journal.ink 3600 TXT xxxxxxxx

DKIM Record Set

  • >> abcdefg._domainkey.lagon-journal.ink. 3600 CNAME abcdefg.dkim.amazonses.com
  • >> hijklnm._domainkey.lagon-journal.ink. 3600 CNAME hijklnm.dkim.amazonses.com
  • >> opqrstu._domainkey.lagon-journal.ink. 3600 CNAME opqrstu.dkim.amazonses.com

Email Receiving Record

  • >> lagon-journal.ink 3600 MX 10 inbound-stmp.us-xxxxxx

おそらくこんな感じで3項目(5レコード)出てきたはずなので、すべて「Netlify」の「Domains」から先ほどとおなじように、レコード追加いたします。

注意点として、MXレコードのところに「10 inbound-stmp.us-xxxxxx」とあると思いますが、これは分けて入力します。つまり、「priority」の欄に「10」、「Value」の欄に「inbound-stmp.us-xxxxxx」をコピペしてください。

レコードの入力がうまくいかないと、ずっとオレンジ色の「pending verification(承認保留)」のままで、うまくいくと緑色の「verified(承認済み)」になります。うまくいっているはずのときは、右側のリサイクルアイコン(更新ボタン)を押すと緑になったりします。

<補足>

このレコードはなにをしているかというと、メールの受信設定と、メールがなりすましされないように電子署名の設定をしています。まえがきで書いた特電法やレピュテーションのために超重要な項目です。地味ですが。

ちなみに、DKIMというのは、DomainKeys Identified Mailといって、Yahoo!が開発しているメールの電子署名です。これを送信する側がメールのヘッダーに埋め込んで、受信する側のメーラーがDKIMのキーと照合してくれて、なりすましてないなと確認してくれます。ありがたいですね。

SNS時代に「なりすまし」というとしょぼい響きに聞こえるひともいるかもしれませんが、かなり重大な情報漏洩が「なりすましメール」から始まっていることは要チェックです。

MXレコード(MXリソースレコード)というのは、mail exchangeのことです。アマゾンの指示で優先度「10」と入れましたが、配送したい先がいくつもあるときはこの優先度順に送られます。

IAMユーザー作成とSMTPのトークンを発行する

  • ・SESのコンソール画面サイドバーから「SMTP Settings」をクリックし、「Create My SMTP Credentials」。
  • ・「IAM User Name」をじぶんの好きな名前にして「作成」すると、ダウンロードが始まります。(Chromeのかたは自動ダウンロード)
  • ・SESのコンソールでふたたび「SMTP Settings」、中央に各情報が出ているのでメモします。

こんな感じのやつ。

  • >> Server Name: email-smtp.us-xxxxxxx
  • >> Port: 25,465 or 587
  • >> Use Transport Layer Security(TLS): Yes
  • >> Authentication: Your SMTP credentials

ダウンロードしたクレデンシャル情報のファイルと、SMTPの設定は最後に使うのでとっておいてください。

メール送受信のルールをつくる(S3のバケットをつくる)

メールを利用するためには、まず受信して承認リンクを踏んだりしないといけないので、メールが受け取れる状態をつくります。

  • ・SESのコンソール画面サイドバーから「Rule Sets」→「Create a Receipt Rule」をクリック。

メールの受信について、ルールを決めるのがアマゾン流。複数ルールをつくって、マッチした条件のルールが毎回適応されます。今回はとりあえずひとつだけつくります。

<Step 1>

  • ・つかいたいメールアドレスを入力して「Add Recipient」。Verifiedになったら「Next Step」。

<Step 2>

  • ・「Add action」の「<Select an action type>」を選択し、プルダウンから「S3」を選択。
  • ・「S3 bucket」の「<none>」をプルダウンして「Create S3 buckets」を選択。
  • ・Bucket Nameを求められるので、世界にひとつしかないだれとも絶対にかぶらない名前にしてあげてください。「Create Bucket」
  • ・「Object key prefix」は「mails」にしましょう。「Next Step」。

<Step 3>

  • ・「Rule name」をつけたら完了です。hoge-mail-ruleとかでいいと思います。

<Step 4>

確認のみ。改めて「Rule Sets」→「View Active Rule Set」で確認できます。しておきましょう。

<補足1>

急につくらされたS3というのは、「Simple Storage Service」といって、かんたんに言えばEvernoteやGoogleDriveのようなものです。ウェブでつかえるファイルとかいれとくやつのアマゾン版です。ありがたくつかわせてもらいます。次の章でいちおう中身のチェックもしておきましょう。

<補足2>

ここでつくったバケットの名前をこのあとちょいちょい書かされるので、覚えておくか、どこかにメモっておくといいかもしれません。

さっきのS3のバケットをみる

  • ・コンソール左上の「サービス」から検索窓にいき、「S3」と入力してS3に行く。
  • ・さっきのバケットがあることを確認。クリックして中に入る。
  • ・「mails」というフォルダがあることを確認する。

あとでまた承認メールのために戻ってきますので、別タブでとっておくといいかもしれません。

SESの送信制限解除の申請をする

どのタイミングでもいいと思うのですが、あたらしいことがたくさんあってつかれたはずなので、ここらで事務作業。ちょっとちがうあたまをつかいます。

SESでは、最初の段階だと「サンドボックス」というテスト環境しか与えてもらえていません。実際に外の世界と送受信したいときは、「サンドボックスから出して〜」という申請をしなくてはいけません。なので、しましょう。

制限解除まで1日ぐらいかかることもありますので、このあたりは気長に待ちます。サンドボックスが解除されたらメールがきます。なにはともあれ、以下の手順で申請しておきます。

  • ・SESのコンソールに戻って、サイドバーから「Sending Statistics」→「Request a Sending Limit Increase」をクリック。
  • ・「サポート」画面に連れていかれ、「サービス制限の緩和」にチェックがあたっており、下部の「分類」のところに「SES送信制限」と自動で入っているはずです。
  • ・それぞれの項目を正直に埋める。(日本語OK)

いちおう私のやつを載せておきます。利用規約やAUPは確認しましょう。ウェブサイトもあるならいれたほうがいいです。「明確にリクエストされた受信者にのみ送信します」「バウンスや苦情を処理するプロセスがあります」というのは、まえがきで書いた重要なやつです。「はい」にしてください。このあと処理をやりましょう。

<分類>

  • >> 制限タイプ:SES送信制限
  • >> メールの種類:取引
  • >> ウェブサイトのURL:https://lagon-journal.ink
  • >> 私は〜:はい(三つとも)

<リクエスト1>

  • >> リージョン:米国西部(オレゴン)
  • >> 制限:希望する1日あたりの送信クォータ
  • >> 新しい制限値:4,000

<リクエスト2>

  • >> リージョン:米国西部(オレゴン)
  • >> 制限:希望する最大送信レート
  • >> 新しい制限値:14

<説明>

メールの用途を書けば大丈夫です。「このメールをつかって、取引先やお客さんと連絡をとります。」など。私の場合は「応募」にも使用するということを書きました。要するに、悪さしませんよ、ちゃんとつかいますよ、というアピールの場です。

<コンタクトオプション>

日本語とwebにして、申請完了です。

かなり大詰めまできました。まだ大変なのが残っています。

LambdaでメールをGmailに転送 ①aws-lambda-ses-forwarderをダウンロード

ボスのいるエリアまできました。さきに「Lambda(ラムダ)」というのは、これまたアマゾンが提供してくれているサービスで、環境とかつくらずにやりたいことだけ実行してくれるやつです。

たとえば、S3のバケットにこういうことが起こったら、Lambdaでこういう処理をする、という関数を書いておけば、それをやってくれるということです。

今回は、S3で受け取ったメールを、SESの横流し機能を用いて、Lambdaに転送してもらうという処理を書きます。ただ、そんなすごい処理を書くのはたいへんなので、すでにつくって公開してくださっているかたの恩恵にあずかりたいと思います。

こちらのGitHubに飛ぶと、arithmetricさんの「aws-lambda-ses-forwarder」というやつが公開されています。緑色の「Clone」をクリックするといろいろでてくるので、一番下の「Download ZIP」でZIPファイルをもらいます。

ちなみに、右上の「Star」というところを押せば、高評価を送ることができます。あとで押しておくといいかもしれません。

LambdaでメールをGmailに転送 ②サンプルの中身を抜き出す

ZIPを展開して、隣に「my-lambda-ses」みたいな名前のフォルダをつくっておき、展開した「aws-lambda-ses-forwarder」のなかにある「example」フォルダの中身を「my-lambda-ses」の中にコピペします。

具体的には「index.js」と「package.json」というファイルです。

<補足1>

わかるひとは以下のコマンドで代用。

$ cd 好きなところ
$ git clone https://github.com/arithmetric/aws-lambda-ses-forwarder.git
$ mkdir my-lambda-ses
$ cp -r aws-lambda-ses-forwarder/example/ my-lambda-ses/
$ cd my-lambda-ses/

「cp -r」は、コピーコマンドの小文字アールオプションで、ディレクトリごとコピーしてくれます。「aws-lambda-ses-forwarder/example/」の中身一式を「my-lambda-ses/」にコピーしてねってことです。

<補足2>

JSON(ジェイソン)というのは、JavaScript Object Notationのアクロニムで、人間でも読みやすいファイル形式で、軽くて、いろんなプログラミング言語でつかえるため重宝します。

LambdaでメールをGmailに転送 ②じぶん用の設定に書き直す

まず「index.js」をエディターなどでひらいて、書き換えます。

var LambdaForwarder = require("aws-lambda-ses-forwarder");

exports.handler = function(event, context, callback) {
  var overrides = {
    config: {
      fromEmail: "noreply@example.com",
      emailBucket: "s3-bucket-name",
      emailKeyPrefix: "mails/",
      forwardMapping: {
        "info@example.com": [
          "example.john@example.com"
        ]
      }
    }
  };
  LambdaForwarder.handler(event, context, callback, overrides);
};

中央の「config」のところが設定で、じぶん用に書き換えます。念のため私のやつも例示しておきます。

  • >> fromEmail: "noreply@lagon-journal.ink"(転送元のアドレス)
  • >> emailBucket: "lagonjournalbucket"(さっきつくったS3のバケット名です)
  • >> emailKeyPrefix: "mails/"
  • >> forwardMapping: {"info@lagon-journal.ink"(受信設定したアドレス) ["lagon.journal@gmail.com"(受信メールを転送したいGamil)]}

ちゃんと設定できたらセーブして、「my-lambda-ses」をZIPに戻します。私はここの設定を凡ミスしていたことに気づかず、かなり時間をつかってしまいました。

<補足>

コマンドがわかるひと用にzip用のコマンドおいておきます。

$ cd いまいるところ/my-lambda-ses/
$ npm install
$ zip -r my-lambda-ses ./*

LambdaでメールをGmailに転送 ③Lambda操作のためのIAMロールをつくる

さきほども一瞬だけ出てきたIAM(アイアム)というのは、「Identity and Access Management」のことで、AWS内でサービスをまたぐときの権限まわりの設定です。

  • ・AWSマネジメントコンソール画面から「サービス」→「IAM」。
  • ・IAMのサイドバーから「ロール」→「ロールの作成」。
  • ・「このロールを使用するサービスを選択」では「Lambda」を選択して、次のステップへ。
  • ・「ポリシー」の作成。以下のJSONファイルをじぶん用に書き換えて貼り付けます。
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
         ],
         "Resource": "arn:aws:logs:*:*:*"
      },
      {
         "Effect": "Allow",
         "Action": "ses:SendRawEmail",
         "Resource": "*"
      },
      {
         "Effect": "Allow",
         "Action": [
            "s3:GetObject",
            "s3:PutObject"
         ],
         "Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
      }
   ]
}

最後の「”Resouce”: “arn~~~~S3-BUCKET-NAME/*“」とあるところの「S3-BUCKET-NAME」の部分だけを、さきほどのS3のバケット名に書き換えます。

  • ・JSONを貼り付けたら、「ポリシーの確認」をクリック。
  • ・「名前」は「lambda-send-mail-policy」などにする。
  • ・「説明」もおなじように入れておきましょう。
  • ・「ポリシーの作成」でポリシー作成完了。

ロールの作成画面に戻って、続きをやります。

  • ・「Attachアクセス権限ポリシー」を選ぶために、検索窓に「lambda-send-mail-policy」を入れて先ほどつくったポリシーを選択
  • ・「タグの追加」はスルー。
  • ・「ロール名」は「lambda-send-mail-role」などにしましょう。
  • ・「ポリシー」に「lambda-send-mail-policy」が入っていることを確認して、「ロールの作成」。

LambdaでメールをGmailに転送 ④Lambdaの関数をつくる

ようやくです。①で「S3で受け取ったメールを、SESの横流し機能を用いて、Lambdaに転送してもらうという処理を書きます。」と説明したやつを、実際にLambdaに入力します。

  • ・左上「サービス」の検索窓から「Lambda」→「関数の作成」。
  • ・名前は「mail-forwarder」、「ランタイム」は「Node.js 12.x」、「ロール」は「既存のロールを選択」、「既存のロール」は先ほどつくった「lambda-send-mail-role」。そして、関数の作成。
  • ・Lambdaのコンソール画面になるので、「基本設定」から「タイムアウト」を「1分」ぐらいに。
  • ・「関数コード」の「コードエントリタイプ」を「.zipファイルをアップロード」、「関数パッケージ」から先ほどの書き換えてつくった「my-lambda-ses.zip」をアップロードします。
  • ・アップロードできたら右上「保存」。

ここでうまくいかないときは、おそらく先ほどの③書き換えとZIP化のところにミスがありそうです。見直したり、ほかのひとの情報を参考にしましょう。休むのも手です。

LambdaでメールをGmailに転送 ⑤SES側でLambdaを呼び出す

SESに戻って、今度はLambdaを呼び出します。

  • ・SESのコンソール画面サイドバーから「Rule Sets」→「View Active Rule Set」をクリック。
  • ・さっきつくったルールをクリック。(すでにS3のアクションが入っているやつです)
  • ・「Actions」→「Add action」→「<Select an action type>」のプルダウンで「Lambda」を選択。
  • ・「Lambda function」の「<none>」プルダウンから、さきほどつくった「mail-forwarder」を選択。
  • ・「Save Rule」すると関数へのアクセスができないというエラーメッセージが出るので「Add permissions」で権限が通ります。

LambdaでメールをGmailに転送 ⑥S3のバケットにもルールをつくる

ここからは単純作業に戻ってきます。

  • ・S3のバケットに移動します。
  • ・並んでいるタグから「管理」→「ライフサイクル」→「ライフサイクルルールの追加」を選択。
  • ・ルール名は「mail-lifecycle」とかにして次へ。「ストレージクラスの移行」はスルー。
  • ・「失効の設定」は、「現行バージョン」と「オブジェクトの現行バージョンを失効する」にチェック。日数は「3」とか「5」ぐらいがいいですかね。
  • ・次へ行って、確認してOKです。

LambdaでメールをGmailに転送 ⑦テストメールをS3で確認

なにかしらのメールアドレスから、受信設定した独自ドメインのアドレス(info@lagon-journal.ink)に送ってみてください。S3のバケットにそれらしきものが追加されたらOKです。

S3からは失効日数で消えるので、保存したい場合は「ダウンロード」で保存してください。これからやるGmailへの転送処理が完了したら、Gmail側に残るのでS3からダウンロードする必要はなくなります。

LambdaでメールをGmailに転送 ⑧Gmail側で受け取り設定

IAMユーザーとSMTPのトークンを設定した段階でもできますが、最後に持ってきました。「IAMユーザー作成とSMTPのトークンを発行する」でもらったクレデンシャル情報とSMTP情報をGamilの設定に入れていきます。

  • ・「Gmail」を開いて、右側の歯車アイコン→「設定」→「アカウントとインポート」タブ。
  • ・「名前」→「他のメールアドレスを追加」で黄色い別画面へ。
  • ・「名前」にはメールの表示名、「メールアドレス」は独自ドメインのメールアドレス。(「エイリアスとして扱います」は無視して次のステップ)
  • ・SMTPの情報をコピペ。「ユーザー名」「パスワード」は、ダウンロードしたクレデンシャルファイルのなかの「Smtp Username」「Smtp Password」が対応しています。「TLS」のほうの丸ボタンをチェック。
  • ・うまくコピペできたら、承認メールを送ったという画面が表示。

LambdaでメールをGmailに転送 ⑨S3で承認メールを承認

S3のバケットに入っていき、いちばん最新のファイルをダウンロードします。中身は暗号化されているのですが、メールなので拡張子を「.eml」に変えればプレーンテキストでみられます。承認リンクを踏んで「確認」を押せば、Gmailとひもづきます。

これでGmailから送受信できるようになっているはずです。新規メールで選べる送信元が増えていると思います。試しに送ったりしてみてください。(もちろん送信制限解除されたらの話ですが)

<補足>

拡張子とかがわからないかたは、暗号化されたテキストを以下のリンク先にぶちこんで変換するとおなじ文面が手に入ります。

さいごに:つまり次へのはじまり

「設定!設定!設定!」とおつかれさまでした。サーバーサイドは、設定とエラーの嵐ですよね。今日わからなくても、明日になってると急にわかったりします。私も理解するのに丸々二日ぐらいかかりました。

そして、Gmailで送受信できるようになったら終わりではなく、いまはSESのスタート地点に立っただけなので、ここからはSESをもっとちゃんと理解する旅が始まります。

一緒にがんばっていきましょう。おつかれさまでした。

この次に読みたい記事

参考にした記事

Written by Aisaka, Chihiro
Copyright LagonGlaner and Author

「ラゴン・レキシク Lagon Lexique」は、ことばとの出会いを大切にするランダム語釈表示サービスです。ふだんの生活では出会えないことばが収録。どなたでも無料なのであそんでみてください!

運営や著者に声を送る かしこまらず、あなたの温度感で。 フォームへ飛ぶ
Liana Mikah
ブログ 思いつづるひとつひとつの日々。
Agathe Marty
エッセー それぞれが一回に懸けるもの。
daniel petreikis