我維護并開發了一個程式(除其他外)通過 GMail 發送電子郵件。
到目前為止,發送電子郵件沒有任何問題,但幾天前,此功能停止使用訊息“憑據錯誤”。我查看了 GMail 的幫助,發現了這個解釋/警告/what-have-you:
為幫助確保您的帳戶安全,自 2022 年 5 月 30 日起,Google 不再支持使用第三方應用或設備,這些應用或設備要求您僅使用您的用戶名和密碼登錄您的 Google 帳戶。
解決方案是使用“應用程式特定”密碼。
我看了這個問題,其中指出:
我最近的嘗試是在 Gmail 上創建一個“應用專用”密碼
但附加的代碼實際上并沒有顯示密碼是如何發送的。
閱讀問題及其答案,我對我的程式進行了一些更改:
Port := 995
UseTLS := utUseImplicitTLS
SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]
在這些更改之后,為了嘗試發送測驗郵件(仍然沒有應用專用密碼),我收到了回復
回復碼無效: OK
這可能意味著我的程式失敗,因為它沒有發送應用程式特定的密碼。
我想知道的是:如何發送該密碼?
下面是我作為執行緒執行的代碼,因此所有組件都在代碼中定義:
email:= TIdMessage.Create (nil);
try
email.LoadFromFile (FFileName);
email.OnInitializeISO:= DoInitializeISO;
// DeleteFile (FFileName);
smtp:= TIdSMTP.Create (nil);
try
smtp.OnFailedRecipient:= FailedRecipient;
ssl:= TIdSSLIOHandlerSocketOpenSSL.Create (smtp);
ssl.SSLOptions.SSLVersions:= [sslvTLSv1];
smtp.OnStatus := DoStatus;
smtp.IOHandler:= ssl;
smtp.Host:= FHost;
smtp.Password:= FPassword; // now app passord
smtp.Username:= FUsername;
smtp.UseTLS:= utUseExplicitTLS;
smtp.Port:= 587;
smtp.Connect;
try
smtp.Send (email);
finally
smtp.Disconnect;
end;
finally
ssl.free;
smtp.Free;
end;
finally
email.Free;
end;
uj5u.com熱心網友回復:
您可以將密碼替換為應用程式密碼。假設您的代碼 id 類似于下面的代碼。
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 25;
IdSMTP.AuthType := satDefault;
IdSMTP.Username := '[email protected]';
IdSMTP.Password := 'AppsPassword';
IdSMTP.Connect;
uj5u.com熱心網友回復:
應用程式專用密碼只是 Gmail 為您生成的密碼,然后您可以使用它來代替您的普通密碼(即在TIdSMTP.Password屬性中)。這在 Gmail 的檔案中有解釋:
使用應用密碼登錄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493569.html
