問い合わせフォームの送信先を設定して、保存しました。画面を開き直しても、フォームは「準備中」のままでした。
設定は間違っていません。読まれるタイミングが違っただけでした。
問い合わせの受け取りを外部サービスに任せるまでの判断と、その設定でつまずいた3点です。環境変数がいつ読まれるか、保存したら見られなくなる値のこと、そして「正しく弾けているか」の確かめ方を書きます。
なぜ自分でメールを送らないのか
このサイトには、メールを送る手段がありません。足すこと自体はできますが、そこから先が長い。
迷惑メール扱いされないためには、そのドメインから送ってよいという宣言をDNSに置く必要があります。SPFとDKIMと呼ばれるものです。
すでに何かの設定が入っている状態で足すと、書き方を誤った瞬間にメールが届かなくなります。
しかも壊れたことは、こちらからは分かりません。誰かに「返信が来ない」と言われるまで、正常に見え続けます。
問い合わせを1本受け取るために、この重さを引き受けるのは割に合わないと判断しました。受け取りだけ外に出すことにします。
求めているのは、転送先1つだけ
ボット対策も、エラーの出し分けも、入力の確認も、すべてサイト側に置いてあります。外のサービスに任せているのは「受け取って、メールで転送する」という一点です。
この形にしておくと、乗り換えの費用が小さくなります。別のサービスに移すときに変えるのは送信先のURL1つで、コードには触りません。
外部サービスの機能を使い込むほど、そのサービスの形に合わせた作りになります。便利ですが、離れにくくもなります。
「何を任せないか」を先に決めておくほうが、あとから選び直せます。
つまずき1:環境変数は、ビルドのときに読まれる
送信先のURLは、コードに書かずに環境変数として置いています。保存して、サイトを開き直しました。変わりません。
| 思っていたこと | 実際 |
|---|---|
| 設定を保存すれば、次のアクセスから反映される | 作り直すまで、前の状態のまま |
このサイトはページを先に作ってしまう構成なので、環境変数を読むのはページを作るときです。あとから設定を足しても、すでに作られたページは古い状態を抱えたままになります。
配信サービスの画面にも「変更を反映するには新しいデプロイが必要です」と出ていました。読んでいませんでした。保存した時点で終わったつもりになっていたからです。
つまずき2:保存すると、見られなくなる値がある
環境変数を保存するとき、種別を2つから選べました。
| 種別 | あとから値を見られるか |
|---|---|
| 設定値 | 見られる |
| 秘密 | 見られない |
今回は「秘密」を選びました。訪問者に配るファイルへ混ざってほしくない値だからです。
ただしこれは、自分でも二度と確認できないという意味でもあります。今回は発行元の画面でいつでも見られるURLなので困りませんが、そうでない値なら、保存する前に控える必要がありました。
つまずき3:相手側の防御が、こちらの正常な送信を弾く
受け取り側のサービスにも、独自のボット対策が用意されています。画像の文字を読ませるあれです。
この対策は「人がブラウザで操作している」ことを前提にしています。
今回はサイトのサーバーから相手のサーバーへ送る形なので、有効になっているとこちらの正常な送信まで弾かれます。
今回は既定で無効になっていたので何もせずに済みましたが、有効な状態で繋いでいたら「設定は合っているのに届かない」で長く悩むところでした。二重に掛けた対策が、互いを打ち消すことがあります。
正しく弾けているかは、画面では分からない
繋いだあと、4つ試しました。
| 送ったもの | 期待 | 結果 |
|---|---|---|
| 普通に書いて送る | 通る | 通った |
| 開いた直後に送る | 断る | 断られた |
| アドレスの形が違う | 断る | 断られた |
| 見えない欄を埋めて送る | 捨てる | 「送信しました」と出た |
最後のものは、わざとそうしています。機械に「その欄を避ければ通る」と分からせないためです。
そのぶん、画面を見ているだけでは、弾けたのか通ったのかが区別できません。確認するには受信箱を見て、届いていないことを確かめる必要があります。実際に届いていたのは4件のうち1件だけでした。
正しく動いた証拠が「画面に出ない」「メールが来ない」という形をしている場合、確認の手順を別に決めておかないと、確認そのものを忘れます。
今回の学び
まず、設定を保存した時点では、まだ何も変わっていないことがあるということ。読まれるのがページを作るときなら、作り直すまでは古いままです。保存できたことと、効いていることは別でした。
次に、隠すと、自分からも見えなくなること。訪問者に見せたくない値を隠すのは正しい判断ですが、その値を次に必要とするのは自分かもしれません。保存する前に控えるかどうかを決めておく必要がありました。
そして、対策は二重に掛けると打ち消し合うことがあること。自分の側で弾いているのに相手の側でも弾いていると、通したいものが通りません。どこで何を見ているかを1回並べて書き出すのが、結局早い道でした。

コメントを残す