2012-02-16 78 views
3

我正在使用這段代碼從delphi indy發送測試消息。 我有一個TidSMTP,TIdMessage和IdSSLIOHandlerSocketOpenSSL;Delphi Indy 10 Smtp錯誤「目前無法進行身份驗證」

在belowe代碼,如果我將它設置爲使用Gmail的使用SSL它工作正常,但只要我跟我的cPanel郵件服務器detials代替我的服務器的詳細信息這是行不通的錯誤:

" unable to authenticate at present".

我使用了我將用於在outlook 2007中設置我的帳戶的相同詳細信息。以下是代碼

IdSSLIOHandlerSocketOpenSSL詳細信息。

method := sslvsslv3 
mode := sslmUnassigned 

//rest default values 

procedure Tfrmnotification.btnSendClick(Sender: TObject); 
var 
    IdMsg : TIdMessage; 
begin 

begin 
    IdMsg := TIdMessage.Create(nil); 
    try 
    with TIdSMTP.Create(nil) do 
    try 
    // UserName := '[email protected]'; 
    // Password := 'pass'; 
    // Host := 'smtp.gmail.com'; 
    // IOHandler := IdSSLIOHandlerSocketOpenSSL; 
    // Port := 587; 
     UserName := '[email protected]'; 
     Password := 'password'; 
     Host := 'outgoing server detials';// same as outlooks 
     IOHandler := IdSSLIOHandlerSocketOpenSSL; 
     Port := 465;// this is correct port 
     UseTLS:= utUseExplicitTLS; 


     IdMsg.Body.Add('test'); 
     IdMsg.Recipients.emailAddresses := '[email protected]'; 
     IdMsg.Subject := 'test'; 
     IdMsg.From.Address := '[email protected]'; 
     IdMsg.From.Name := 'john'; 


     Connect; 
     Send(IdMsg); 
     Disconnect; 
    finally 
     Free; 
    end; 
    finally 
    IdMsg.free; 
    end; 
    showmessage('done'); 
end; 

任何幫助將被處理。

+0

因此您與之通信的服務器是交換服務器?所以問題是建立到Exchange的SSL連接?當您使用Mozilla Thunderbird電子郵件客戶端進行嘗試時它工作嗎?如果它不起作用,那麼爲什麼你要編寫一些可能未被配置爲在服務器端正常工作的代碼? – 2012-02-16 14:12:28

+0

嘿沃倫P.感謝您的回覆。服務器不是交換服務器。我的假設是,如果我可以發送來自Microsoft Office 2007的郵件,我應該可以用我的delphi代碼做同樣的事情。我希望我錯過了我的代碼或組件屬性。 – Overklog 2012-02-16 15:24:46

+0

那麼,在Exchange的其他一些電子郵件程序中嘗試一下,然後找出你需要的認證設置,這可能會告訴你該怎麼做。 TLS等 – 2012-02-16 16:32:32

回答

3

端口465用於SMTP over隱式SSL。您已將UseTLS設置爲utUseExplicitTLS。正確的值應該(很可能)是utUseImplicitTLS。

+0

如果你想使用顯式的TLS,可以將'Port'設置爲587,或者將其保持爲25(如果UseTLS屬性包含默認值,則將其更新爲'Port'。 – 2012-02-17 00:50:57

+0

正確,並且注意服務器所有者爲您提供的連接詳細信息顯然非常重要。如果服務器不偵聽端口465或端口587,顯然沒有意義嘗試連接這些端口。 – 2012-02-17 01:11:58

+0

我提到它的原因是因爲設置UseTLS屬性可能會或可能不會在連接之前隱式更新Port屬性,具體取決於Port屬性先前設置的屬性。我曾見過一些人們確實注意到這個事實並最終連接到了不同於他們所期望的港口的情況。 – 2012-02-17 02:31:19