Så lykkedes det mig endelig at få Indy til at virke også med afsendelse fra en Hotmail account!
Hvis andre er interesserede i at vide hvordan, jeg gjorde, kommer forklaringen her:
1. Først afinstallerede jeg den Indy version, der fulgte med Delphi (i mit tilfælde version 9) - det gjorde jeg via installations-cd'en, hvor jeg valgte modify installation.
2. Derefter hentede jeg den nyeste Indy version (i skrivende stund version 10) fra deres hjemmeside:
http://indyproject.org -> klik på Indy.Sockets (VCL) -> Downloads -> Version 10 -> Development Snapshot -> Development Snapshot -> FTP -> klik på ZIP i det nye vindue -> Klik og download IndyTiburon.zip.
3. Så installerede jeg Indy via vejledningen på hjemmesiden (
http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx).
4. Endeligt tilpassede jeg mit projekt til den nye Indy version.
Jeg har lavet et lille kode-eksempel herunder for de interesserede (den nyeste Indy skal være installeret først):
1. Lav et nyt projekt i Delphi og smid en knap på formen.
2. Tilføj IdAntiFreeze, IdAttachmentFile, IdMessage, IdSMTP, IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdTCPClient, IdEMailAddress og SysUtils til uses.
3. Skriv følgende kode i knappens OnClick-event og erstat <...> med egne værdier:
procedure TForm1.Button1Click(Sender: TObject);
const
TIMEOUT = 3000; //millisekunder
var
attachmentFileName: AnsiString;
idSMTP: TIdSMTP;
idMessage: TIdMessage;
idAntiFreeze: TIdAntiFreeze;
idSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
Try
Screen.Cursor := crHourGlass;
Application.ProcessMessages;
attachmentFileName := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'Unit1.pas'; //det her er bare et eksempel men kan i princippet være hvad som helst (dog ikke eksekvérbare filer, f.eks. exe)
idSMTP := TIdSMTP.Create(Self);
idMessage := TIdMessage.Create(Self);
idAntiFreeze := TIdAntiFreeze.Create(Self);
idSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
Try
//aktivér antifrysning:
idAntiFreeze.Active := true;
idAntiFreeze.OnlyWhenIdle := true;
idAntiFreeze.ApplicationHasPriority := true;
idAntiFreeze.Process;
//vedhæft (måske) en fil:
If FileExists(attachmentFileName) then
TIdAttachmentFile.Create(idMessage.MessageParts, attachmentFileName);
//opsæt mailen:
idMessage.UseNowForDate := true;
idMessage.Subject := <Skriv et emne her>;
idMessage.Body.Text := <Skriv indholdet her>;
idMessage.From.Text := <Skriv din hotmail-adresse her>;
idMessage.Recipients.EMailAddresses := <Skriv en modtager mail-adresse her>;
idMessage.ReceiptRecipient.Text := idMessage.From.Text;
idMessage.ReplyTo.Add.Text := idMessage.From.Text;
//opsæt SSL:
idSSLIOHandlerSocketOpenSSL.ConnectTimeout := TIMEOUT;
idSSLIOHandlerSocketOpenSSL.ReadTimeout := TIMEOUT;
idSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv3;
idSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
idSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode := [];
idSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth := 0;
//opsæt det tekniske:
idSMTP.ReadTimeout := TIMEOUT;
idSMTP.ConnectTimeout := TIMEOUT;
idSMTP.Port := 587;
idSMTP.Host := 'smtp.live.com';
idSMTP.AuthType := satDefault;
idSMTP.Username := <Skriv igen din hotmail-adresse her eller hent den via idMessage.From.Text>;
idSMTP.Password := <Skriv dit password til Hotmail her - det samme man normalt logger ind med>;
idSMTP.IOHandler := idSSLIOHandlerSocketOpenSSL; //brug SSL
idSMTP.UseTLS := utUseExplicitTLS;
//send mailen:
idSMTP.Connect;
idSMTP.Send(idMessage);
//mailen er nu sendt - vis en dialogboks:
Application.MessageBox('E-mailen er nu sendt!', 'Succesfuld afsendelse', MB_ICONINFORMATION + MB_OK);
If idSMTP.Connected then idSMTP.Disconnect;
Finally
idSMTP.Free;
idMessage.Free;
idAntiFreeze.Free;
idSSLIOHandlerSocketOpenSSL.Free;
Screen.Cursor := crDefault;
Application.ProcessMessages;
End;
Except
On E: Exception do Application.ShowException(E); //hvis der opstår fejl i afsendelsen eller noget andet, vises denne fejl-dialogboks
End;
end;
Hvis eksemplet ikke lige skulle virke, så prøv igen eller prøv evt. at ændre på idSSLIOHandlerSocketOpenSSL.SSLOptions.Method, idSSLIOHandlerSocketOpenSSL.SSLOptions.Mode, idSMTP.UseTLS eller TIMEOUT. Husk selvfølgelig at tjekke at brugernavn, password, port og host er angivet korrekt.
Det kan også være, Indy-versionen ikke virker selvom det er den nyeste. Som de skriver på deres hjemmeside, arbejder de hele tiden på det, og man kan være uheldig at hente en ufærdig version. Så skal man bare vente lidt og så prøve at hente og installere den nyeste Indy igen.
Endelig kan det selvfølgelig være noget andet teknisk, f.eks. forkerte eller manglende indstillinger i routeren eller noget sikkerhedsmæssigt, der kan drille. Man kan evt. undersøge router-indstillinger eller prøve fra en anden computer.
kroning: tak for hjælpen - gider du venligst smide et svar, så du kan få pointene?