読者です 読者をやめる 読者になる 読者になる

Mail::Sendmail で RFC 違反のメールアドレスに送信

perl

問題になった「RFC違反のメールアドレス」は、携帯でよく問題になる foobar.@example.com みたいな奴。
普通に送信しようとすると、"No recipient!" と例外が飛んでしまう。

Mail::Sendmail は送信時に

    while ($recip =~ /$address_rx/go) {
        push @recipients, $1;
    }
    unless (@recipients) {
        return fail("No recipient!")
    }

こういうコードで、$Mail::Sendmail::address_rx にマッチしないアドレスを排除しているのだが、$address_rx は foobar.@example.com にマッチしないのが原因。
まあパッケージ変数にしてるということは、気にくわなければ書き換えてねってことだろうから、$Email::Valid::Loose::Addr_spec_re を使うようにして解決した。

local $Mail::Sendmail::address_rx = qr{($Email::Valid::Loose::Addr_spec_re)};

() で括っているのは、マッチさせたあとに $1 で参照しているコードがあるため。