我写了一个程序,可以监控邮箱,检索邮件,并将内容放入数据库。我的电子邮件管理员通知我,我的应用程序使用的是基本身份验证,微软将从2022年10月开始停止对它的支持。他们告诉我,我需要使用现代身份验证。Indy组件TidIMAP4支持吗?网站上指向文档的链接似乎全部断开:https://www.indyproject.org/documentation/
这是我当前的连接代码,使用的是iatUserPass的默认AuthType。这是我需要更改的吗?iatSASL是现代身份验证吗?我该如何使用它?仅仅切换属性不再能够连接。我可能必须更改其他属性才能使用它。
procedure TdmMAARCEmails.InitializeIMAPConnection;
begin
IMAPClient := TIdIMAP4.Create(self);
try
// IMAPClient.AuthType := iatSASL;
OpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(self);
OpenSSLHandler.sslOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
IMAPClient.IOHandler := OpenSSLHandler;
// IMAPClient.Host := 'imap.gmail.com';
IMAPClient.Host := FIniFile.ReadString('EMAIL', 'IMAPI_SERVER', '');
IMAPClient.Port := FIniFile.ReadInteger('EMAIL', 'IMAPI_PORT', 993);
IMAPClient.UseTLS := utUseImplicitTLS;
IMAPClient.Username := self.UserName;
IMAPClient.Password := self.Password;
IMAPClient.Connect;
except
on E:Exception do
writeln(E.Message);
end;
end;
1条答案
按热度按时间vuv7lop31#
Indy组件TidIMAP 4是否支持该功能?
Indy目前不 * 正式 * 支持“现代身份验证”(也称为OAuth 2.0)(open ticket #192)。
sasl-oauth
branch正在开始添加此支持。如果您要尝试使用此分支,您将负责从Microsoft获取必要的OAuth访问令牌(参见Authenticate an IMAP, POP or SMTP connection using OAuth-“注册应用”和“获取访问令牌”部分),然后您可以将该令牌分配给TIdIMAP4
组件以验证其IMAP连接(该文档的“验证连接请求”部分)。或者,在this repo上有一个第三方的OAuth 2实现。它是为Gmail SMTP设计的,但也应该可以用于/适应IMAP。
网站上的文档链接似乎都被破坏了
已知问题:Links to old Indy website pages are currently broken
使用默认的iatUserPass身份验证类型。这是我需要更改的吗?
是的。
iatUserPass
使用IMAPLOGIN <username> <password>
命令,这是不推荐使用的命令。iatSASL
使用IMAPAUTHENTICATE <mechanism> <parameters>
命令。根据上述文档,Microsoft需要AUTHENTICATE XOAUTH2 ...
命令。iatSASL是现代身份验证吗?如何使用它?
将
AuthType
设置为iatSASL
只是启用“现代身份验证”的第一步。然后,您需要使用对任何所需的TIdSASL
派生组件的引用来填写TIdIMAP4.SASLMechanisms
属性,这些组件将处理实际的身份验证。Indy有几个
TIdSASL...
类用于各种身份验证(CRAM-MD5,CRAM-SHA1,NTLM,Digest等),但还没有用于OAuth 2的sasl-oauth
branch添加了一些新的TIdSASL...
类,包括TIdSASLXOAuth2
,它将涵盖这种情况(other repo有一个TIdSASLXOAuth
类用于相同的任务)。或者,您可以编写自己的
TIdSASL
派生类来处理身份验证。例如,如果您只想将TIdSASLXOAuth2
/TIdSASLXOAuth
实现复制到本地代码中。只是切换属性不再工作连接。
正确,因为您的身份验证设置不完整。请参阅上文。