我想發送一個電子郵件使用Indy 10在德爾福5,會發生什麼,它不希望進行身份驗證,因爲它向我顯示「Nooo」消息。到目前爲止,我在這裏有這個代碼(我從另一個堆棧溢出問題中獲得)。我不知道爲什麼它不適合我,因爲它顯然是爲另一個人做的...也許我錯過了一些東西,我用我的兩封實際郵件和密碼取代了senderemail並收到了郵件。德爾福5發送電子郵件與Indy
編輯
所以這就是我現在,它會彈出一個「必須首先發出STARTTLS命令。」錯誤然而現在...我這個真糊塗......
EDIT 2
所以我設法使它工作,這裏的最終結果。隨意告訴我,如果有什麼不正確的做法......我有一個訪問衝突,直到我加入了「IdSMTP.Authenticate;」在發送消息之前!
procedure TForm1.Button3Click(Sender: TObject);
var
IdSMTP: TIdSMTP;
Email: TIdMessage;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
IdSMTP := TIdSMTP.Create(nil);
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
Email := TIdMessage.Create(nil);
try
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
IdSMTP.IOHandler := SSLHandler;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 587;
IdSMTP.Username := '[email protected]';
IdSMTP.Password := 'password';
IdSMTP.UseTLS := utUseExplicitTLS;
Email.From.Address := '[email protected]';
Email.Recipients.EmailAddresses := '[email protected]';
Email.Subject := 'Test subject';
Email.Body.Text := 'Test body';
IdSMTP.Connect;
if IdSMTP.Connected then
begin
IdSMTP.Authenticate;
IdSMTP.Send(Email);
IdSMTP.Disconnect;
end;
finally
Email.Free;
SSLHandler.Free;
IdSMTP.Free;
end;
end;
注意,'=進行AuthType satDefault'並不適用於所有服務器工作。它使用 'AUTH LOGIN'命令,這是不安全的,並且一些服務器已經丟棄了 對它的支持。您應該考慮使用'AuthType = satSASL'來代替 'TIdSMTP.SASLMechanisms'集合。您不需要手動調用Authenticate() – Marusyk
Gmail使用SMTP的25,465和587,但由於幾乎所有的isps阻止25,因此465是首選的SMTP,其中SSL使用gmail,而587是使用TLS端口的首選SMTP。 – Marusyk
GMail可以使用不允許訪問您的程序的設置 - 嘗試在您的設置中找到「訪問不太安全的應用程序」。 – smooty86