BLOGTIMES
2018/07/15

SMTP Auth /w STARTSSL のデバッグを行うスクリプト

  perl  systemmanagemant 
このエントリーをはてなブックマークに追加

仕事場のメールサーバが Office 365 に切り替わったのですが、なぜか SMTP だけ認証が効かなかったので状況を調査するための簡単なスクリプトを書いてみました。

昔は通信が平文だったので、SMTP のデバッグも telnet コマンドでイケましたが、今は TLS で暗号化されているのが標準という時代なので、openssl を使う必要が出てきます。今回は SMTP Auth の部分も必要だったので、なるべくマニュアル作業が少なくなるように Perl でスクリプトを書いてみました。

Perl はしばらく触れていなかったので、すっかり時代に取り残されてしまっている感じですが、標準の Net::SMTP ライブラリでも SMTP Auth とか、STARTSSL なんかに対応しているんですね。

smtpStartsslDebug.pl

#!/usr/bin/env perl use strict; use warnings; use utf8; use Net::SMTP 3.0; use Authen::SASL qw(Perl); my ($mailserver, $port, $user, $password) = @ARGV; my $smtp = Net::SMTP->new( $mailserver, Port => $port, Timeout => 10, Debug => 1, ); die "ERROR: smtp connection failed.$!" if !defined $smtp; $smtp->starttls(); $smtp->auth( $user, $password) or die "ERROR: Authentication failed.\n"; $smtp->quit();

コマンドラインの引数として、サーバ名、ポート番号、ユーザー名、パスワードの4つを取ります。

実際に実行してみると、以下のような感じで接続の様子が表示されます。
# 実際のパスワード等についてはダミーに書き換えてあります。

$ perl smtpStartsslDebug.pl smtp.office365.com 587 user@example.jp 'password' Net::SMTP>>> Net::SMTP(3.11) Net::SMTP>>> Net::Cmd(3.11) Net::SMTP>>> Exporter(5.73) Net::SMTP>>> IO::Socket::IP(0.39) Net::SMTP>>> IO::Socket(1.39) Net::SMTP>>> IO::Handle(1.39) Net::SMTP=GLOB(0x2829750)<<< 220 TYAPR01CA0017.outlook.office365.com Microsoft ESMTP MAIL Service ready at Sun, 15 Jul 2018 12:41:09 +0000 Net::SMTP=GLOB(0x2829750)>>> EHLO localhost.localdomain Net::SMTP=GLOB(0x2829750)<<< 250-TYAPR01CA0017.outlook.office365.com Hello [160.16.198.140] Net::SMTP=GLOB(0x2829750)<<< 250-SIZE 157286400 Net::SMTP=GLOB(0x2829750)<<< 250-PIPELINING Net::SMTP=GLOB(0x2829750)<<< 250-DSN Net::SMTP=GLOB(0x2829750)<<< 250-ENHANCEDSTATUSCODES Net::SMTP=GLOB(0x2829750)<<< 250-STARTTLS Net::SMTP=GLOB(0x2829750)<<< 250-8BITMIME Net::SMTP=GLOB(0x2829750)<<< 250-BINARYMIME Net::SMTP=GLOB(0x2829750)<<< 250-CHUNKING Net::SMTP=GLOB(0x2829750)<<< 250 SMTPUTF8 Net::SMTP=GLOB(0x2829750)>>> STARTTLS Net::SMTP=GLOB(0x2829750)<<< 220 2.0.0 SMTP server ready Net::SMTP::_SSL=GLOB(0x2829750)>>> EHLO localhost.localdomain Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-TYAPR01CA0017.outlook.office365.com Hello [160.16.198.140] Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-SIZE 157286400 Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-PIPELINING Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-DSN Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-ENHANCEDSTATUSCODES Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-AUTH LOGIN XOAUTH2 Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-8BITMIME Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-BINARYMIME Net::SMTP::_SSL=GLOB(0x2829750)<<< 250-CHUNKING Net::SMTP::_SSL=GLOB(0x2829750)<<< 250 SMTPUTF8 Net::SMTP::_SSL=GLOB(0x2829750)>>> AUTH LOGIN Net::SMTP::_SSL=GLOB(0x2829750)<<< 334 VXNlcm5hbWU6 Net::SMTP::_SSL=GLOB(0x2829750)<<< (decoded) Username: Net::SMTP::_SSL=GLOB(0x2829750)>>> (decoded) user@example.jp Net::SMTP::_SSL=GLOB(0x2829750)>>> ************************ Net::SMTP::_SSL=GLOB(0x2829750)<<< 334 UGFzc3dvcmQ6 Net::SMTP::_SSL=GLOB(0x2829750)<<< (decoded) Password: Net::SMTP::_SSL=GLOB(0x2829750)>>> (decoded) ******** Net::SMTP::_SSL=GLOB(0x2829750)>>> ******************** Net::SMTP::_SSL=GLOB(0x2829750)<<< 235 2.7.0 Authentication successful target host TYAPR01MB2608.jpnprd01.prod.outlook.com Net::SMTP::_SSL=GLOB(0x2829750)>>> QUIT Net::SMTP::_SSL=GLOB(0x2829750)<<< 221 2.0.0 Service closing transmission channel

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10300
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン