SMTP Auth /w STARTSSL のデバッグを行うスクリプトを書いたので、これと対になる IMAPs に対するデバッグスクリプトも作ってみました。
こちらはMail::IMAPClient というライブラリを使っているので、以下のような感じであらかじめモジュールをインストールしておく必要があります。
cpanm Mail::IMAPClient
書いたスクリプトは以下のような感じ。
imapsLoginDebug.pl
#!/usr/bin/env perluse Mail::IMAPClient;use Data::Dumper;use warnings;use strict;my ($server, $port, $user, $pass) = @ARGV;my $imap = Mail::IMAPClient->new( Server => $server, User => $user, Password => $pass, Authmechanism => 'LOGIN', Ssl => 1, Uid => 1, Debug => 1, Showcredentials => 1,) or die "ERROR: $@";print "Login OK.\n";my $features = $imap->capability;$imap->logout or die "ERROR: Logout ", $imap->LastError, "\n";
コマンドラインの引数として、サーバ名、ポート番号、ユーザー名、パスワードの4つを取ります。
# ただ、ポート番号は使っていないので無視されます。
実際の動作としては以下のような感じでしょうか。
IMAP はちょっとプロトコルが複雑なので、手動だと操作がちょっと難しいんですよね。
perl imapsLoginDebug.pl smtp.office365.com 0 user@example.jp 'password'Started at Sun Jul 15 21:37:17 2018Using Mail::IMAPClient version 3.39 on perl 5.028000Connecting with IO::Socket::SSL PeerAddr smtp.office365.com PeerPort 993 Proto tcp Timeout 600 Debug 1Connected to smtp.office365.comRead: * OK The Microsoft Exchange IMAP4 service is ready. [VABZAEEAUABSADAAMQBDAEEAMAAxADUANQAuAGoAcABuAHAAcgBkADAAMQAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0A]Sending: 1 LOGIN user@example.jp "password"Sent 45 bytesRead: 1 OK LOGIN completed.Login OK.Sending: 2 CAPABILITYSent 14 bytesRead: * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS MOVE ID UNSELECT CLIENTACCESSRULES CLIENTNETWORKPRESENCELOCATION BACKENDAUTHENTICATE CHILDREN IDLE NAMESPACE LITERAL+ 2 OK CAPABILITY completed.Sending: 3 LOGOUTSent 10 bytesRead: * BYE Microsoft Exchange Server IMAP4 server signing off. 3 OK LOGOUT completed.