![]() |
Indy - Attachment verliert Namen (erst seit Delphi2009)
Hallo in die Runde,
kann sich bitte mal jemand meinen Quelltext anschauen. Ich stehe völlig auf der Leitung. Ist bestimmt wieder so 'ne Unicodegeschichte. Prog war in Delphi 2007 geschrieben und ich wollte es auf Delphi 2009 umschreiben. Nun scheitere ich daran, dass das Attachment nur nur *.att heißt beim Empfänger.
Delphi-Quellcode:
Der gleiche Quelltext hat sonst ohne Probleme funktioniert.
var
att:TIDAttachmentFile; begin TRY screen.cursor:=crhourglass; eMail.CCList.EMailAddresses := 'blah blah'; SMTP.Host := 'blah blah'; SMTP.UserName := 'blah blah'; SMTP.Password := 'blah blah'; SMTP.Port := 25; // SMTP.AuthType := atDefault; /*was kommt anstelle dessen hin?*/ SMTP.Connect; while not eof do begin email.MessageParts.Clear; email.ContentTransferEncoding := 'udf-8'; with TIdText.Create(Email.MessageParts, nil) do begin ContentType := 'text/plain'; CharSet := 'ISO-8859-1'; ContentTransfer := 'base64'; body.Text := 'blah blah' end; // Anfang EMail erzeugen eMail.From.Text := 'blah'; eMail.Recipients.EMailAddresses := 'blah'; eMail.Subject := 'blah'; email.ContentType := 'multipart/related; type="text/plain"'; email.CharSet :='ISO-8859-1'; //Attachment ranbauen att := TIdAttachmentFile.Create(Email.MessageParts, 'c:\test.pdf'); //Prüfen ob Attachment da if FileExists('c:\test.pdf') then SMTP.Send(eMail); SMTP.Disconnect; end; //with helpi do begin screen.Cursor :=crdefault; except screen.Cursor :=crdefault; END; end; Hat jemand eine Idee? Danke, Romy |
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
Hi Romy,
ist keine Unicode-Geschichte, sondern leider eine Bug-Geschichte ;) Liegt an einem kleinen Fehler in Indy, mehr dazu in ![]() ![]() Im nächsten Update von D2009 sollte das behoben sein. Der Fehler entstand durch einen falschen Zeilenumbruch vor der Ausgabe des Dateinamens. Mailclients ignorieren dann den Dateinamen, wenn er nicht in einer eigenen Zeile steht. Gruß Assertor |
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
Danke Assertor für Deine Hilfe.
Ich glaube, dass ich dennoch jetzt irgendwas falsch gemacht habe. Beim Compilieren bekomme ich die Meldung... [DCC Fataler Fehler] IdMessageClient.pas(402): F1026 Datei nicht gefunden: 'IdCompilerDefines.inc' Romy |
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
Hi,
Zitat:
Zitat:
Du findest diese in: C:\Program Files\CodeGear\RAD Studio\6.0\source\Indy\Indy10\Protocols\IdCompiler Defines.inc Kopier die Datei einfach mit in das Projektverzeichnis. Dann sollte es gehen. Gruß Assertor |
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
:hello: Es funktioniert!!!
Nochmal vielen vielen Dank! Romy |
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
Zitat:
Gruß Assertor |
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
Ich grabe mal den Thread hier aus, weil ich mit obigen Quellcode auch versuche eine Email zu verschicken. Dabei muss nichteinmal zwingend ein Attachment dabei sein, werde aber später auch Attachments versenden wollen, deshalb lass ich das mal drin.
Doch zuerst einmal verstehe ich nicht alle Befehle:
Delphi-Quellcode:
Außerdem bringt mir Delphi immer einen "E/A-Fehler 6" und zwar genau dann, wenn diese eof ausgeführt wird. Die Delphi Hilfe verrät mit, dass eof prüft ob das Dateiende erreicht ist, aber ich übergebe ja keine Variable, gar nichts. Woher soll das Programm wissen was es zu prüfen hat? Auf der Microsoft Page erfährt man folgendes:
procedure TForm1.Button1Click(Sender: TObject);
var att : TIDAttachmentFile; begin try screen.cursor:=crhourglass; IdMessage1.CCList.EMailAddresses := 'adresse'; IdSMTP1.Host := Edit1.Text; IdSMTP1.UserName := Edit3.Text; IdSMTP1.Password := Edit4.Text; IdSMTP1.Port := StrToInt(Edit2.Text); IdSMTP1.Connect; while not eof do begin //für was steht eof? IdMessage1.MessageParts.Clear; IdMessage1.ContentTransferEncoding := 'udf-8'; with TIdText.Create(IdMessage1.MessageParts, nil) do //und was ist TIdText, kann ich nicht IdMessage direkt bearbeiten? begin ContentType := 'text/plain'; CharSet := 'ISO-8859-1'; ContentTransfer := 'base64'; body.Text := Memo1.Lines.Text; end; IdMessage1.From.Text := 'blah'; IdMessage1.Recipients.EMailAddresses := 'blah'; IdMessage1.Subject := Edit5.Text; IdMessage1.ContentType := 'multipart/related; type="text/plain"'; //brauche ich das hier nur wenn ich mit TIdText arbeite? IdMessage1.CharSet :='ISO-8859-1'; if CheckBox1.Checked and FileExists('c:\test.pdf') then att := TIdAttachmentFile.Create(IdMessage1.MessageParts, 'c:\test.pdf'); IdSMTP1.Send(IdMessage1); IdSMTP1.Disconnect; end; screen.Cursor :=crdefault; except screen.Cursor :=crdefault; end; end; Zitat:
|
Re: Indy - Attachment verliert Namen (erst seit Delphi2009)
Hallo,
1 Das "eof" würde ich nicht allzu ernst nehmen. Der Code sieht so aus, als wenn er vereinfacht wurde. Wahrscheinlich sollten mehrere Mails hintereinander verschickt werden. 2 TIdText: Zwischen einer Mail mit bzw. ohne Anhang besteht ein grosser Unterschied. 2.1 Wenn keine Anhänge vorhanden sind, wird der Text im Body gespeichert (IdMessage1.Body := 'Text'). 2.2 Bei Anhängen ist der Text "nur" ein weiterer Anhang neben den anderen. Dieser wird mit der Klasse "TIdText" erzeugt. "Normale" Anhänge werden mit TIdAttachment bzw. TIdAttachmentFile erzeugt. Aber alle sind von "TIdMessagePart" abgeleitet. 3 Mit Content-Type wird definiert ob es sich um Text (text/plain) oder HTML (text/htm) handelt. Zusätzlich sollte man angeben wie kodiert bzw. welcher Zeichensatz verwendet wird. Beispiel:
Delphi-Quellcode:
Viele Spass :)
...
IdMessage1.Encoding := meMIME ; IdMessage1.ContentType := 'text/plain' ; IdMessage1.ContentTransferEncoding := 'quoted-printable' ; IdMessage1.CharSet := 'ISO-8859-1' ; ... [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz