2016-12-16 78 views
2

私は数日間は検索しましたが、最終的にオプションがなくなりました。クライアントの1人がメールアカウントを"outlook.office365.com "、私のperlスクリプトはすべてプラットフォーム上で異なる設定をしているので失敗するので、すべてのスクリプトを書き直して、すべての作業をやり直す必要がありました。モジュールで電子メールを送ることができました" Email: :Sender :: Transport :: SMTP :: TLS "しかし、私は以前のモジュールを使って、同じメールアドレスを" Mail :: POP3Client "のように読んで処理しませんでした。Perlモジュールでメールを処理するためにoutlook.office365.comに接続できませんMail :: IMAPClient

これは試してみるのコードです:

use Mail::IMAPClient; 
use Email::MIME; 

my $username = 'user'; 
my $password = 'pass'; 
my $server = 'outlook.office365.com'; 


print "Anon connect to IMAP\n"; 
my $imap = Mail::IMAPClient->new(
    Server => $server, 
    Username => $username, 
    Password => $password, 
    Port => 993, 
    Ssl => 1, 
    Authmechanism => "PLAIN", 
    Debug => 1, 
)or die "Cannot connect to $mailhost as $username: [email protected]"; 

print "upgrading connection to TLS \n"; 
$imap->starttls 
(
    SSL_verify_mode => 0, 
) or die "starttls failed: [email protected]\n"; 

$imap->User($username); 
$imap->Password($password); 

print "Logging In\n"; 
$imap->login() or die "imap login failed: [email protected]\n"; 

これは私がstackoverflowの上で発見したソリューションですが、それは私のために働くdoes notの、私は私のファイアウォール設定を確認し、すべてがOKです。

これが出力されます。

Anon connect to IMAP 
Started at Fri Dec 16 13:54:25 2016 
Using Mail::IMAPClient version 3.38 on perl 5.022001 
Connecting with IO::Socket::SSL PeerAddr outlook.office365.com PeerPort 993 Proto tcp Timeout 600 Debug 1 
ERROR: Unable to connect to outlook.office365.com: at C:/Perl64/site/lib/Mail/IMAPClient.pm line 370. 
     Mail::IMAPClient::connect(Mail::IMAPClient=HASH(0xcac170)) called at C:/Perl64/site/lib/Mail/IMAPClient.pm line 314 
     Mail::IMAPClient::new("Mail::IMAPClient", "Server", "outlook.office365.com", "Username", "user", "Password", "pass", "Port", 993, ...) called at dont.pl line 10 
Cannot connect to as user: Unable to connect to outlook.office365.com: at dont.pl line 10. 

私のSSL接続を確認するには:

openssl s_client -connect outlook.office365.com:993 

結果:

* OK The Microsoft Exchange IMAP4 service is ready. 

ので、任意のアイデア?このコードで何が間違っているの?

+0

おそらく、モジュールによって返されたメッセージが不明ですか?あなたは分割しようとする可能性があります:最初にオブジェクトを作成し、次に接続して認証します。さらに、すでにオブジェクトがある場合、モジュールのドキュメントは、より多くのエラーにアクセスできることを示しています。 –

+0

何かがあるかもしれません。ユーザー名とパスワードを使わずにコードを使用すると、「読み取り:* OK Microsoft Exchange IMAP4サービスが利用可能です」という行が表示されます。あなたの資格情報は確かですか? –

+0

私はあなたがなぜ接続できないのか分かりませんが、 'starttls'呼び出しは冗長で、エラーも発生します。あなたの接続はすでに安全です。 – Max

答えて

0

EDIT:マックスのおかげで、ついに解決:startlsを削除するとログインステップに到達できます。私のマシン上で

use Mail::IMAPClient; 
use Email::MIME; 

my $username = 'user'; 
my $password = 'pass'; 
my $server = 'outlook.office365.com'; 


print "Anon connect to IMAP\n"; 
my $imap = Mail::IMAPClient->new(
    Server => $server, 
    Port => 993, 
    Ssl => 1, 
    Authmechanism => "PLAIN", 
    Debug => 1, 
)or die "Cannot connect to $mailhost as $username: [email protected]"; 

$imap->User($username); 
$imap->Password($password); 

print "Logging In\n"; 
$imap->login() or die "imap login failed: [email protected]\n"; 

は、これを出力します。私は、有効なアカウントを持っていないとして、通常で

Anon connect to IMAP 
Started at Fri Dec 16 16:59:31 2016 
Using Mail::IMAPClient version 3.38 on perl 5.022001 
Read: * OK The Microsoft Exchange IMAP4 service is ready. [RABCADYAUABSADAAMgAwADEAQwBBADAAMAAyADcALgBlAHUAcgBwAHIAZAAwADIALgBwAHIAbwBkAC4AbwB1AHQAbABvAG8AawAuAGMAbwBtAA==] 
upgrading connection to TLS 
Sending: 1 CAPABILITY 
Sent 14 bytes 
Read: * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS MOVE ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+ 
     1 OK CAPABILITY completed. 
Logging In 
Sending: 2 AUTHENTICATE PLAIN 
Sent 22 bytes 
Read: + 
Sending: [Redact: Count=2 Showcredentials=OFF] 
Sent 18 bytes 
Read: 2 NO AUTHENTICATE failed. 
ERROR: 2 NO AUTHENTICATE failed. at /usr/local/share/perl/5.22.1/Mail/IMAPClient.pm line 3261. 
     Mail::IMAPClient::authenticate(Mail::IMAPClient=HASH(0x14f6a30), "PLAIN", undef) called at /usr/local/share/perl/5.22.1/Mail/IMAPClient.pm line 562 
     Mail::IMAPClient::login(Mail::IMAPClient=HASH(0x14f6a30)) called at imapt.pl line 30 
imap login failed: 2 NO AUTHENTICATE failed. 

+1

ここでは、冗長で不要な 'starttls'呼び出しを削除することでエラーを修正することができます。 – Max

+0

ありがとう!このモジュールでは、SLSオプションを設定することは暗黙のうちにTLSを使用していることを意味しますか? SSLが廃止されたと考えられるので意味があります。 –

+0

これはOPの問題を解決するとは思わない。エラーメッセージによると、 'Mail :: IMAPClient :: new'から既に呼び出された' Mail :: IMAPClient :: connect'の内部では失敗しています。つまり、(間違った)starttlsには決して到達しません。'connect'のソースを見ると' IO :: Socket :: SSL-> new'で失敗しますが、残念ながらMail :: IMAPClientはこの段階からの正確なエラーをユーザに伝播しません。 –