とあるユーザー様からの不具合報告を頂き、調査してみると「フォーム送信ボタンを押すと無条件でメールカウントが加算される」という残念な実装になっていました。
フォーム入力で検証エラーが発生して、メール送信が行われていないのに、カウントだけ増えて連番が飛んでしまい欠番が生じてしまうようです。
不具合改修の際に「メールカウント増加の条件判定」で少し混乱することがあったので、カウント増加の仕様について記録を残しておきます。
目次
動作状態とメールカウントの仕様表
コンタクトフォームの動作/設定モードにおける、各機能(メール送信/メッセージ保存/カウント増加)の挙動について表で示します。
動作状態 | メール送信 | メッセージ保存 (Flamingo) | メール カウント増加 | |
---|---|---|---|---|
送信(成功) | mail_sent | 〇 | 〇 | 〇 |
送信(失敗) | mail_failed | ✕ | 〇 | 〇 or ✕ |
デモモード | demo_mode: on | ✕ | ✕ | ✕ |
スキップモード | skip_mail: on | ✕ | 〇 | 〇 |
保存抑制モード | do_not_store: true | 〇 | ✕ | 〇 |
メールカウント増加の条件判定
メールカウントを増加させるかどうかの条件について、コンタクトフォームの動作/設定モード毎に解説します。
メールカウントを増加させるかどうか判断する、基本的な設計方針は「送信メッセージの実態データが存在するか」で判断しています。
言葉での説明が難しいですが、それぞれ解説していきます。
メール送信(成功)
メールカウントは、増加されます。
一番基本となる動作です。メール送信が行われ、メッセージ保存も行われます。
メール送信もメッセージ保存も行われ「送信メッセージの実態データ」は存在します。なのでメールカウントを増加する必要があります。
メール送信(失敗)
メールカウントは、増加されます。(※オプションで変更可能)
メール送信を行い、送信に失敗した場合の動作です。送信に失敗したメッセージも保存されます。
送信結果が異なるだけで、メール送信もメッセージ保存も行われ「送信メッセージの実態データ」は存在します。なのでメールカウントを増加する必要があります。
デモモード/demo_mode
demo_mode: on をその他の設定に追加すると、そのコンタクトフォームはデモモードで動作するようになります。このモードでは、メール送信のプロセスがスキップされ、「送信完了しました」と応答メッセージが返るだけになります。
https://contactform7.com/ja/additional-settings
メールカウントは、増加されません。
その名の通りデモとして動作します。メールの送信プロセスは行われず、送信結果も正常に完了したものとして扱われます。そのためメッセージ保存も行われません。
見た目上の動作のみが行われるだけで「送信メッセージの実態データ」は存在しません。なのでメールカウントを増加する必要はありません。
スキップモード/skip_mail
skip_mail 設定は demo_mode とほとんど同様に機能しますが、skip_mail はメールの送信だけをスキップします。demo_mode とは異なり、skip_mail は Flamingo のメッセージ保存のような他の活動には影響しません。
https://contactform7.com/ja/additional-settings
メールカウントは、増加されます。
デモモードと似ていますが、メールの送信プロセスのみが行われません。ただしメール送信以外は、本来通りの動作をするこが求められるモードになります。そのためメッセージ保存は行われます。
実際のメール送信が行われないだけで「送信メッセージの実態データ」は存在します。なのでメールカウントを増加する必要があります。
保存抑制モード/do_not_store
この設定は Flamingo 等のメッセージ保存モジュールに対してこのコンタクトフォーム経由のメッセージを保存しないように指示します。
https://contactform7.com/ja/additional-settings
メールカウントは、増加されます。
メッセージの保存が行わないように抑制されます。メッセージ保存以外は、本来通り動作することとなります。
メッセージを保存しないだけで「送信メッセージの実態データ」は存在します。なのでメールカウントを増加する必要があります。