Diary

pot-pourri cafeの日記的メモ

POST-MAIL 修正覚書き
 ここのところ、メールフォームが不通になっていた件で騒いでいましたが、無事修正完了しましたので覚え書きを。

【前提】
KENT WEBさんのPOST-MAIL(https://www.kent-web.com/mail/postmail.html)を使用
さくらインターネットのサーバーを使用
さくらインターネットの設定では、SPF、DKIM、DMARCは設定済み
gmailのアドレスに対してメールフォームに打ち込まれた内容を送信
私(野堀)はcgiのことについて、何にもわからない

【原因】
Googleのセキュリティ強化により、POST-MAILでの送信時に、sendmailのサーバー名と送信者のメールアドレスのサーバー名が異なることで不審なメールとして弾かれていた。

【参考】
KENT-WEBサポート掲示板の投稿、No.17625

【実際にやったこと】
init.cgiに、
# メールフォーム送信者のアドレス
# → SPF、DKIM、DMARC対策
$cf{mailfrom} = '(適当な文字列)@uiyun.mimoza.jp';

を追加。

init.cgiの、
# sendmailへの-fコマンド(プロバイダの仕様確認)
# 0 : no
# 1 : yes
$cf{send_fcmd} = 1;

0を1に変更。

postmail.cgiの、
# メールアドレスがない場合は送信先に置き換え
my $email = $$in{email} eq '' ? $cf{mailto} : $$in{email};

を、   
# メールアドレスがない場合はサーバーのメアドに置き換え
my $email = $$in{email} eq '' ? '(適当な文字列)@uiyun.mimoza.jp' : $$in{email};

に置き換え。 → これは必要なかったかも?
   
postmail.cgiの、
$body .= "From: $from\n";
を、
$body .= "From: $cf{mailfrom}\n";
に置き換え。


【要するになんだったの?】
 今、メール周りのセキュリティが強化されているそうで、
  • メールに書かれた送信者のメールアドレス
  • 実際に送ってきたメールサーバー(今回の場合はsendmailを提供しているサーバー名)

の二つが一致しないとスパム扱いされて弾かれてしまうとのこと。
 うちのメールフォームの場合は、sendmailはuiyun.mimoza.jpなのに、メールにある送信者のアドレスはメールフォームを記入されたメール送信者のかたのメールアドレスになっているため(空欄の場合は、私のメールアドレスに置き換えられています)、一致せず弾かれたということです。

 なのでPOST-MAIL側をいじって、メールフォームの送信者を「メール送信者が入力したメールアドレスの流用」から「サーバーから提供されているメールアドレス」に変更しました。これで、sendmailのサーバーと送信者のメールアドレスのサーバーがuiyun.mimoza.jpで一致したため、怪しくないメールとGoogleに認識され、無事メールが届くようになった、ということです。

 これ、サーバー側からメールが提供されているので事なきを得ましたけど、メールが提供されていないサーバーだったらどうするんでしょうね……。

#ウェブ備忘録
RSS