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?
Annonceindlæg fra Infor
26. april 2010 - 12:54
#1
Det ser rent faktisk ud til at det er alle filer der bliver renamet.
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.
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;
27. april 2010 - 07:41
#4
PS: din kode gør det samme. Så gad vide hvad det ellers kan skyldes.
28. april 2010 - 03:28
#5
Det virker som sagt her. Delphi 7 + Indy 10 + ISP mail server + Thunderbird mail client
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.
28. april 2010 - 07:28
#7
PS: Indy idSMTP siger version 10.2.5
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.
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.
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.
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.
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;
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 :-)
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.
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.
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?
Jeg har selv testet med en ZIP fil. Sker der noget med stoerrelsen af ZIP filen?
Ja nu du nævner det så ændrer størrelsen sig Orginal fil 315.368 Modtaget fil 315.357
Hmm. Jeg skal vist lige have checket noget text/binary.
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
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.
24. juni 2010 - 04:03
#22
svar
Kurser inden for grundlæggende programmering