CGI からメール送信するときのエンベロープ From の変更[プログラミング]
(2023-05-09 08:15:53) by shinoda


急に、CGI から送信していたメールが、Gmail に届かなくなった。

maillog を確認すると、

550-5.7.26 This mail is unauthenticated, which poses a security risk to the
550-5.7.26 sender and Gmail users, and has been blocked. The sender must
550-5.7.26 authenticate with at least one of SPF or DKIM. For this message,
550-5.7.26 DKIM checks did not pass and SPF check for [www.exsample.co.jp] did
550-5.7.26 not pass with ip: [210.XXX.XXX.XXX]. The sender should visit
550-5.7.26  https://support.google.com/mail/answer/81126#authentication for
550 5.7.26 instructions on setting up authentication.

ああ、定番の 550 エラー・・・

www.exsample.co.jp ドメインの SPF レコードに、送信元サーバの IP 210.XXX.XXX.XXX が登録されていないので、怪しいからメールは受け取らんよ・・・という Gmail のエラー。

最近、セキュリティ対策でサーバ構成が変わって、www.exsample.co.jp が別のサーバの CNAME になったので(お客さんのサーバなので、俺の権限ではどうしようもない)、www.exsample.co.jp の TXT レコードが書けんのよね。なので、その中に SPF レコードも書けず・・・

ちなみに、example.co.jp の SPF レコードは存在する。

# nslookup -q=TXT exsample.co.jp

と引いてみると、

exsample.co.jp   text = "v=spf1 ip4:202.XXX.XXX.XXX ip4:163.XXX.XXX.XXX ip4:210.XXX.XXX.XXX include:spf.securemx.jp ~all"

と返ってくる。
エンベロープ From を admin@www.exsample.co.jp から admin@exsample.co.jp に変えてやればいいというわけだ。

CGI の中では、

    $mail_data = <<EOM;
From: admin@exsample.co.jp
To: hogehoge@gmail.com
Subject: TEST MAIL
MIME-Version: 1.0
Content-type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
X-Mailer: CGI-Script

test death.

EOM

    if (!open (MAIL,"| sendmail -t")) {
        print "Error : Mail Send\n";
    }

    print MAIL $mail_data;
    close(MAIL);

のように sendmail でメール送信をしている。

ここで、sendmail の引数に -f を追加してやれば、エンベロープ From を書き換えることができる。

具体的には、↓こう。

    if (!open (MAIL,"| sendmail -t -f admin@exsample.co.jp")) {
        print "Error : Mail Send\n";
    }

これで、エンベロープ From には admin@exsample.co.jp がセットされ、Gmail は example.co.jp の SPF レコードを参照し、万事解決である(笑)

コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8