2015年11月06日

古い Perl スクリプトの Net::SMTP::TLS でのメール送信が動かなくなったときの対処方法,2とおり.

Web拍手:


「Matsup's blog: FreeBSD, Perl の Net::SMTP::TLS ではまる」
http://matsup.blogspot.jp/2012/12/freebsd-perl-netsmtptls.html

「Net::SMTPSを使って SMTP-AUTH - Using Perl」
http://nozawashinichi.sakura.ne.jp/usingmt/2014/04/net-smtps-smtp-auth-sakura.html

「Bug #81710 for Email-Send-SMTP-Gmail: verify errors with Email-Send-SMTP-Gmail-0.32」
https://rt.cpan.org/Public/Bug/Display.html?id=81710#txn-1173876


******************************************************************
Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
together with SSL_ca_file|SSL_ca_path for verification.
If you really don't want to verify the certificate and keep the
connection open to Man-In-The-Middle attacks please set
SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
at /usr/local/share/perl5/Net/SMTP/TLS.pm line 181.
invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 415.



古い Perl スクリプトの Net::SMTP::TLS でのメール送信が動かなくなったときの対処方法,2とおり.



1.
ちょー雑にその場をしのぐ対処方法
Net::SMTP::TLS の代わりに Net::SMTP::TLS::ButMaintained を使う.

単に "Net::SMTP::TLS"という文字列を "Net::SMTP::TLS::ButMaintained"という文字列に書き換えるだけでしのげる.
(ライブラリ .pm を置き換えるのではなくて,それを使うコード,たとえば,"use Net::SMTP::TLS;" などを "use Net::SMTP::TLS::ButMaintained;" に書き換える.)

エラーどころか警告も出ない.
Net::SMTP::TLS::ButMaintained は,CPAN でインストールする.yum では入らない.なぜなら,「もはや古い」から.
「DEPRECATED!, Please use Net::SMTPS instead.」と作者本人が書いている.つまり,これを代わりに使うのは「その場しのぎ」をするときだけに限る.
http://search.cpan.org/~fayland/Net-SMTP-TLS-ButMaintained-0.24/lib/Net/SMTP/TLS/ButMaintained.pm



2.
ナウい方法でヤングも納得! の対処方法
Net::SMTP::TLS の代わりに Net::SMTPS を使い,さらに,SSL_verify_mode を明示的に指定する.

my $smtp = Net::SMTP::TLS->new(
$mail_host,
Port => $mail_port,
User => $mail_username,
Password => $mail_password,
);


↑こんな感じのコードは,↓こんな感じのコードに書き換える.

my $ssl = 'starttls'; # 'ssl' / 'starttls' / undef
my $smtp = Net::SMTPS->new(
$mail_host,
Port => $mail_port,
doSSL => $ssl,
SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
);

my $auth_method = 'LOGIN';
$smtp->auth($mail_username, $mail_password, $auth_method);


あとは,Net::SMTP::TLS のときとまったく同じコードのまま,
mail(), to(), data(), datasend(), dataend(), quit する.




いま,自宅サーバーを Scientific Linux 6 から 7 に移行していて,いろいろと勉強中... .




【コンピュータの最新記事】
posted by NOIKE at 01:30 | 東京 ☀ | Comment(0) | TrackBack(0) | コンピュータ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。