Perl:SMTPがエラーを返してくれない
https://perldoc.jp/docs/modules/libnet-1.12/Net/SMTP.pod
結論:
SMTPのバージョンアップに伴う変更が原因っぽい。
2.xxではメールアドレスも [MIME-header] で文字コード変換して送信
3.xxではメールアドレスは [英数字]+[一部記号] の完全なる半角文字 (Ascii) のため変換不要で送信
メールアドレスは変換してはいけない
&encode_to($mail_address, 'UTF8', 'MIME-header');
こんな感じの記述だったかな?(うる覚えなのでコードは不確か) が不要。あると、、、メールアドレスが変換されてしまうのです。
下記みたいに日本語で送信元情報とか入れてると変換が必要。
○○株式会社<xxx@mail.com>
「○○株式会社」部分にのみ変換が必要となるのは変わらない。
メールアドレス部分の変換をコメントアウト化 (先頭に [#]を付ける) して再度メール送信。。。メールが送信されました!
経緯とかやったこととか色々:
Java、C#とトレンドとか呼ばれた言語をやってきて次はPythonかなぁなんて思ってたら・・・Perl。。。え?過去の遺物???
いやいや、現役でPerlが動いてる環境なんてごまんとあるのだよ。うそだろ?って思うだろうしLinuxならPythonが常識なんて通用しないのだよ。
しかも過去の遺物・・・冷えッ冷えに冷めたスパゲッティちゃんたちがご機嫌に稼働しておられる・・・(白目
そんな環境が・・・保守切れによるバージョンアップを行うとかで・・・
マイナーチェンジなどしない・・・5.x.y
yの部分ならほぼ大丈夫。動作確認くらいで終わるが・・・
問題はxの部分のアップグレード・・・1つどころではない・・・どんだけバージョンあがるの?ってくらい一足飛びに上がるwww
ってか、今までPerlのバージョン上げないってどういうこと?と言っても仕方ないので・・・元のバージョンから上がるバージョンまでの変更を調べまくる。。。
で、実際にシステムを動かしてみる・・・初っぱなから「500」www
うんともすんとも言わないよ、この子・・・完全に死亡なさってる。エラーログから復活の手かがりを探る・・・
5.26からの変更でカレントディレクトリがデフォルトのディレクトリから排除されたこと、5.28では「CGI.pm」がエンジン内Perlにいないこと・・・文字コードの厳密化・・・などなどを直し、、、無事画面表示~♪
と喜んでいたら・・・受付完了のお知らせメールが飛んでこない。
ここまで前振り・・・(長いw
え?なんで???エラー・・・ログいない・・・マジか・・・なんで?とネットを漁る・・・
http://mkplan.com/memo/2010/05/28/45/
あ、同じ問題にぶち当たってらっしゃる先人さまが!!!
Yeah!楽勝~♪
さっそく use Authen::SASL; を指定・・・あれ?落ちた!あ、モジュールがいらっしゃらない???ってことでPCANからDLして再度メール送信だ♪
https://metacpan.org/pod/distribution/Authen-SASL/lib/Authen/SASL.pod
って。。。おぃ・・・動かないじゃないか!!!しかもエラー吐かない。振り出しに戻った。
何か糸口を・・・デバッグモード!!!!
my $smtp = Net::SMTP->new('mailhost', Debug => 1);
これでメール送信やってみると・・・ザクザクとデバッグログを吐いてくれる。正常に動いてるワンステップごとの内容を全て・・・
はっ!これか!!!
そう、既に一度見てました。。。
「文字コードの厳密化」
はい。結論に書いた通り・・・メール飛んだよぉぉぉぉぉ・・・感涙
あぁぁぁぁ・・・これだけのことに2日・・・2日も溶けたよ。。。ひぇ
そんなこんなで・・・全システムご機嫌に動くようになったけど。。。Perl怖い。。。マジ怖い・・・と触るたびに思う今日この頃。。。
Pythonとは言わない・・・せめてPHPかJavaの慈悲が欲しい。。。が。。。現時点でご機嫌に動いているPerlちゃんを誰が言語変えて書くの?そんな予算どっから誰が引っ張ってくんの?ねぇ?って笑顔で怒られる。
ご。。。ごめん・・・なさい・・・(´;ω;`)モウイイマセン・・・