Email::Send で使われている Return::Value の最新版が読み込むだけで死ぬようになっていて、Moose から Moo に変わったしいよいよ Email::Sender に移行しなきゃと思い作業したのだけどその際にちょっとはまったのでメモ。
RFC に違反するアドレスに送信できない
オプションで宛先を明示しないと $email
のヘッダの中から to をパースしてくれるのだけど、その時に使われる Email::Address で RFC 違反のメールアドレスが取り除かれてしまう。これは2引数目(envelope)で以下のように宛先を明示すると回避できる。
sendmail( $email, +{ to => 'really-bad-address.....@example.com' }, );
to だけ指定すると cc が送信されない
to をパースする時に cc も同時にパースしているので、to を指定していると cc のパースも行なわれないので cc には送信されない。上でも示した部分の近く。これも Email::Address によるパースを回避したいならちゃんと指定する。
sendmail( $email, +{ to => 'really-bad-address.....@example.com', cc => 'ccccccc@example.com', }, );
で、こうしてみるわけですがこれだと送信されない。envelope を指定していない場合に to をパースする時に同時に cc をパースして to に含めているのと同様に cc も envelope の to に入れなきゃだめ。
sendmail( $email, +{ to => ['really-bad-address.....@example.com', 'ccccccc@example.com'], }, );
これでいけた。