Avatar billede hugopedersen Nybegynder
26. april 2010 - 12:50 Der er 21 kommentarer og
1 løsning

.zip fil sendt med Indy skifter navn

Jeg sidder og roder med at skulle sende en .zip fil fra Delphi ved hjælp af Indy.
Jeg kan nemt lave filen og den bliver også vedhæftet OK. Men et eller andet sted i processen skifter den navn og får et kryptisk navn der ender på .dat

Er det noget man kan gøre noget ved?
Avatar billede hugopedersen Nybegynder
26. april 2010 - 12:54 #1
Det ser rent faktisk ud til at det er alle filer der bliver renamet.
Avatar billede arne_v Ekspert
27. april 2010 - 03:38 #2
Email formoder jeg?

Hvordan sender du det attachment?

Fra mit lager:

procedure send_email_attachment(server, toadr, fromadr, subject, body, fnm : string);

var
  smtp : TIdSMTP;
  msg : TIdMessage;

begin
  msg := TIdMessage.Create;
  msg.Recipients.EMailAddresses := toadr;
  msg.From.Address := fromadr;
  msg.Subject := subject;
  msg.Body.Text := body;
  TIdAttachmentFile.Create(msg.MessageParts, fnm);
  smtp := TIdSMTP.Create;
  smtp.Host := server;
  smtp.Port := 25;
  smtp.Connect;
  smtp.Send(msg);
  smtp.Destroy;
  msg.Destroy;
end;

Og der dukker filnavn korrekt op.
Avatar billede hugopedersen Nybegynder
27. april 2010 - 07:25 #3
Umiddelbart vil jeg sige at det er nogenlunde samme fremgangsmåde
Men om det kan være forskellige Indy versioner der kan gøre det ved jeg ikke.

procedure TIndyMail.Send(aHost, aRecipient, aSender_Address, aSender_Name, aSubject, aMessage: string; aFile: string = '');
var
    idMessage1: TidMessage;
  idSMTP1: TidSMTP;
  Attachment: TidAttachment;
  Addressee: TidEmailAddressItem;
begin
  Attachment := nil;
  idSMTP1 := TidSMTP.Create;
  idSMTP1.Host := aHost;
  idSMTP1.Port := 25;
  idMessage1 := TidMessage.Create;
  idMessage1.Body.Add(aMessage);
  idMessage1.Subject := aSubject;
  idMessage1.From.Text := aSender_Address;
  idMessage1.From.Name := aSender_Name;
  if (aFile <> '') and (FileExists(aFile)) then
    begin
      Attachment := TidAttachmentFile.Create(idMessage1.MessageParts, aFile);
    end;
  Addressee := idMessage1.Recipients.Add;
  Addressee.Address := aRecipient;
  Addressee.Name := aRecipient;
    try
    idSMTP1.Connect;
    idSMTP1.Send(idMessage1);
    finally
    idSMTP1.Disconnect;
    end;
  Attachment.Free;
  idMessage1.Free;
  idSMTP1.Free;
end;
Avatar billede hugopedersen Nybegynder
27. april 2010 - 07:41 #4
PS: din kode gør det samme. Så gad vide hvad det ellers kan skyldes.
Avatar billede arne_v Ekspert
28. april 2010 - 03:28 #5
Det virker som sagt her.

Delphi 7 + Indy 10 + ISP mail server + Thunderbird mail client
Avatar billede hugopedersen Nybegynder
28. april 2010 - 07:23 #6
Min kollega har noget lavet i Delphi 5 der kan sende attachments også og det virker også. Men det er også en anden Indy version

Gad vide om der er fejl i den Indy der er med Delphi 2009.

PS: der går måske lidt imellem jeg svarer her da jeg af en eller anden årsag ikke modtager mails om at der er kommet indlæg.
Avatar billede hugopedersen Nybegynder
28. april 2010 - 07:28 #7
PS: Indy idSMTP siger version 10.2.5
Avatar billede hugopedersen Nybegynder
28. april 2010 - 09:05 #8
På en gammel Delphi 5 med en 10.0.76 virker det.
Det er da lidt mærkeligt.

Dog skal siges at Delphi 5 kører på en Windows 2000 og Delphi 2009 kører på en Windows XP 64 - ikke at det burde have noget at sige, men man ved jo aldrig.
Avatar billede arne_v Ekspert
29. april 2010 - 03:52 #9
Måske var det bedre at bruge TIdTCPClient og så kode SMTP protokollen selv.

Det er ikke særligt vanskeligt.
Avatar billede hugopedersen Nybegynder
29. april 2010 - 06:53 #10
Muligvis - men det er nok lidt mere end hvad mine evner rækker til.

Det er da bare mærkeligt hvad det er der er sket mellem de versioner.
Avatar billede hugopedersen Nybegynder
29. april 2010 - 06:54 #11
Det kan nu nok være det er lidt mere end mine evner rækker til :-)

Men det er da mærkeligt hvad det er der er sket imellem de versioner.
Avatar billede arne_v Ekspert
08. maj 2010 - 05:14 #12
procedure send_email_attachment(server, toadr, fromadr, subject, body, fnm : string);

var
  cli : TIdTCPClient;
  b64 : TIdEncoderMime;
  f : TStream;

begin
  cli := TIdTCPClient.Create;
  b64 := TIdEncoderMime.Create(nil);
  f := TFileStream.Create(fnm, fmOpenRead);
  with cli do begin
    Host := server;
    Port := 25;
  end;
  cli.Connect;
  cli.Socket.WriteLn('HELO ' + GStack.LocalAddress);
  cli.Socket.WriteLn('MAIL FROM: <' + fromadr + '>');
  cli.Socket.WriteLn('RCPT TO: <' + toadr + '>');
  cli.Socket.WriteLn('DATA');
  cli.Socket.WriteLn('Return-Path: <' + fromadr + '>');
  cli.Socket.WriteLn('From: ' + fromadr);
  cli.Socket.WriteLn('To: ' + toadr);
  cli.Socket.WriteLn('Subject: ' + subject);
  cli.Socket.WriteLn('MIME-version: 1.0');
  cli.Socket.WriteLn('Content-type: multipart/mixed; Boundary="arne_ARNE_arne"');
  cli.Socket.WriteLn('');
  cli.Socket.WriteLn('--arne_ARNE_arne');
  cli.Socket.WriteLn('Content-type: text/plain; Charset=iso-8859-1');
  cli.Socket.WriteLn('Content-transfer-encoding: 8bit');
  cli.Socket.WriteLn('');
  cli.Socket.WriteLn(body);
  cli.Socket.WriteLn('');
  cli.Socket.WriteLn('--arne_ARNE_arne');
  cli.Socket.WriteLn('Content-type: application/octet; Name=' + fnm);
  cli.Socket.WriteLn('Content-transfer-encoding: Base64');
  cli.Socket.WriteLn('');
  cli.Socket.WriteLn(b64.Encode(f));
  cli.Socket.WriteLn('');
  cli.Socket.WriteLn('--arne_ARNE_arne--');
  cli.Socket.WriteLn('.');
  cli.Disconnect;
  f.Destroy;
  b64.Destroy;
  cli.Destroy;
end;
Avatar billede hugopedersen Nybegynder
08. maj 2010 - 16:00 #13
Den må jeg lige kigge på mandag når jeg kommer på arbejder.
Jeg sidder i Greve lige nu og har ikke adgang til min Delphi :-)
Avatar billede hugopedersen Nybegynder
10. maj 2010 - 07:38 #14
Har lige prøvet, men jeg får ikke sendt nogen mail overhovedet.

Jeg har så opdaget at min ZIP rutine heller ikke virker - den laver godt nok en fil, men alt i den er på 0 byte.
Avatar billede hugopedersen Nybegynder
10. maj 2010 - 11:55 #15
Jeg kan godt sende en .ZIP fil med den rutine, men der sker et eller andet med den så den bliver ødelagt under transport.
WinRAR siger i hvert fald at der er en unexpected end of file.
Og den orginale fil har jeg ingen problemer med at åbne.
Avatar billede hugopedersen Nybegynder
10. maj 2010 - 14:10 #16
Hvis jeg sender en ren tekstfil så går det igennem uden problemer.
Kan der være noget i din kode der siger at det skal være en tekstfil?
Avatar billede arne_v Ekspert
10. maj 2010 - 15:32 #17
Jeg har selv testet med en ZIP fil.

Sker der noget med stoerrelsen af ZIP filen?
Avatar billede hugopedersen Nybegynder
11. maj 2010 - 07:22 #18
Ja nu du nævner det så ændrer størrelsen sig

Orginal fil    315.368
Modtaget fil  315.357
Avatar billede arne_v Ekspert
12. maj 2010 - 02:04 #19
Hmm. Jeg skal vist lige have checket noget text/binary.
Avatar billede hugopedersen Nybegynder
12. maj 2010 - 07:12 #20
Jeg har prøvet at lege lidt med Content-type, men jeg synes bare det resulterer i at jeg får det samme problem ige = filen skifter navn til .dat
Avatar billede hugopedersen Nybegynder
07. juni 2010 - 08:16 #21
Efter en hel del roden frem og tilbage har jeg nu gjort det at jeg har hentet IndyTiburon fra Indy SVN og det har rettet de fejl der åbenbart er kendte fejl i den Indy der er med Delphi 2009.

Så 'problem solved'

Men jeg vil godt give arne_v point for indsatsen hvis du lige smider et svar.
Avatar billede arne_v Ekspert
24. juni 2010 - 04:03 #22
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester