ContactForm7から送信したメールが迷惑メール判定されるのを防ぐ

WordPressでサイトを作って、公開前に念のため問い合わせフォームの送信テストをしよ〜っと思って送ってみたら
あれ?届かない、、、あ!迷惑メールフォルダに振り分けられてる!…という経験はないでしょうか?

わたしは多々あります。

迷惑メールに振り分けられる原因

ContactForm7に限らず、Wordpressでは、php mailという仕組みを使ってメールを送信しています。
Wordpressが稼働しているサーバーを通じてメールを送信するので、本来使うべきメール送信サーバーと違っていたり
稼働サーバーとメール送信サーバーを同一のものと認識してもらえなかったり…。

Gmailを例に挙げると、Fromに書いてあるメールアドレスと送信元のアドレスが違っている、
また「セキュリティ:このメールは shared-server.net で暗号化されませんでした 」と警告が出ていませんか?

送信元とメールアドレスが違う場合、偽装してメールを送信していると思われて迷惑メールに振り分けられてしまうことがあります。
最悪の場合、サーバー側でスパムメールと判定され、受信すらされなくなってしまいます。

迷惑メールに振り分けられないための対策

ある程度仕方がないものと思ってあまり真剣に取り組んでいなかったのですが
ちょっと真面目に対策を考えてみることにしました。

見つけた対策方法は3つ

1については、根本的な解決策ではありませんが
今回のような問題以外にもかなりお役立ちなプラグインなので
この機会に導入しておくのもいいかな…と思い、メモ的に残しておきます。

対策1.「Flamingo」を使ってWP管理画面で問い合わせを確認

通常、ContactForm7で送信されたメッセージはどこにも保存されません。
なので、もしサーバー側でスパム判定をされてしまうと、せっかくのお問い合わせがパーに…!

そんな問題を回避できるのが、プラグイン「Flamingo」です。
「ContactForm7」の作者さんが作られたプラグインなので、導入がとてもスムーズ!

「Flamingo」の設定方法

使い方はいたって簡単です。

プラグイン→「Flamingo」で検索→インストール&有効化

これだけですぐに使えるのですが、
デフォルトでは送信されたお問い合わせ一覧をみると、

・[your-subject](件名)
・[your-name](送信者の名前)
・[your-email](メールアドレス)

が表示されています。

フォームの内容を変更している場合、正しく表示されなくなってしまうので
コンタクトフォーム編集ページの「その他の設定」タブに以下のように記述します。

flamingo_email: "[メールアドレスに指定したフィールド名]"
flamingo_name: "[送信者に指定したフィールド名]"
flamingo_subject: "[タイトルに指定したフィールド名]"

また、送信者名が二つに分かれている場合や
会社名と担当者名を表示させたい場合には、下記のように記述することもできます。

flamingo_name: "[会社名に指定したフィールド名] [担当者に指定したフィールド名]"

これで、お問い合わせメールが届かない!となっても慌てずに済みますね。

対策2.「WP Mail SMTP」でスパム判定を回避

WP Mail SMTP」は、SMTPサーバーを使ってメール送信することができるプラグインです。
Wordpressが稼働しているサーバーを通さず、メールサーバーから送信します!という設定ができるのです、ありがたい。
(※プラグインの設定次第でphp mailも使えますが、今回は割愛します。)

「WP Mail SMTP」の設定方法

プラグイン→「WP Mail SMTP」で検索→インストール&有効化

あとは、
「設定」→「WP Mail SMTP」で各設定を行っていきいます。
利用しているメールサーバーの情報を用意してください。

送信元アドレス:設定したいアドレス
送信者名:設定したい送信者名
メーラー:「WordPressの全てのメールをSMTP経由で送信する。」
返信先:任意でチェックしてください

SMTP ホスト:利用しているメールサーバーのSMTPホスト(例:121.122.xxx.xx)
SMTP ポート:暗号化にSSLを選ぶ場合は465、TLSの場合は587がほとんどですが、サーバー毎にご確認ください。
暗号化:SSLもしくはTLS
認証:はい
ユーザー名:メールアカウントのユーザー名
パスワード:メールアカウントのパスワード

変更を保存したら、「テストメールの送信」へ!

送信完了すると、エラーメッセージかと思うようなメッセージがずらーっと出てきますが
冒頭に「bool(true)」と出ていれば設定OK!
実際に届いたメールを確認してみてください。
「セキュリティ:標準的な暗号化(SSLもしくはTLS)」となっているはずです◎

設定は合っているのに「bool(false)」となる場合

functions.phpに下記を入れてみてください。
※プラグインファイルに直接書き込む方法もありますが、プラグインの更新が出来なくなるのは怖いので、functions.phpへ!

<?php
function my_wp_mail_smtp_custom_options ( $phpmailer ) {
	if ( isset( $phpmailer->SMTPAuth ) ) {
		if ( $phpmailer->SMTPAuth == true ) {
			$phpmailer->SMTPOptions = array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true));
		}
	}
	return $phpmailer;
}
add_filter("wp_mail_smtp_custom_options","my_wp_mail_smtp_custom_options");
?>

もしくは、「SMTP Mailer」というプラグインも
「WP Mail SMTP」と同様の働きをしてくれるので、function.phpを触るの苦手…という方にはこちらもおすすめです。

参考:「SMTP Mailerでスパム判定回避。WP Mail SMTPで発生する送信エラーも対応

対策3.DNSレコードを設定して、スパム判定を回避

これは、wordpressの稼働サーバーとメール送信サーバーが同じなのに
同一のものと認識してもらえないときの設定方法です。

Gmailで例を挙げると、右端▼の「メッセージのソースを表示」からメールヘッダーを確認して
Received-SPF: neutral」となってしまっている状態です。

この問題は、SPFレコードというものをDNSレコード設定に追加で書き込むことで解決できます。
※利用しているサーバーによって設定方法・記述内容は少しずつ違いますので
「利用サーバー SPF」で検索して確認しながら設定してみてください。

各サーバーの設定例

個人的によく使うサーバーの設定例です。

お名前.comのSPF設定例

ホスト名:空欄
TYPE:TXT
VALUE:v=spf1 ip4:111.111.xxx.xx ~all

さくらサーバーのSPF設定例

エントリ名:@
種別:TXT
値:v=spf1 ip4:111.111.xxx.xx include:sample.com ~all
DNSチェック:する
TTLの指定:チェックしない

GMOクラウドのSPF設定例

ホスト名:@
TYPE:TXT
MX優先:空欄
VALUE:v=spf1 ip4:111.111.xxx.xx ~all

111.111.xxx.xxにはIPアドレスを、sample.comにはドメインを入れてください。

まとめ

ずっと避けていた問題なだけに、解決方法がわかってすっきりしました!

今回、全て実際に試してみた中では
一番手っ取り早い方法は、「WP Mail SMTP」かなと感じました。

丁寧にいくなら、Wordpress稼働サーバーとメールサーバーが同じ場合には
DNSレコード設定もしておいたほうがいいのかな…どうなのかな……?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です