AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy - Attachment verliert Namen (erst seit Delphi2009)

Indy - Attachment verliert Namen (erst seit Delphi2009)

Ein Thema von Samashy · begonnen am 2. Okt 2008 · letzter Beitrag vom 25. Feb 2009
Antwort Antwort
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#1

Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 2. Okt 2008, 08:25
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:
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;
Der gleiche Quelltext hat sonst ohne Probleme funktioniert.

Hat jemand eine Idee?
Danke,
Romy
  Mit Zitat antworten Zitat
Benutzerbild von Assertor
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 2. Okt 2008, 10:21
Hi Romy,

ist keine Unicode-Geschichte, sondern leider eine Bug-Geschichte

Liegt an einem kleinen Fehler in Indy, mehr dazu in meinem Blog (wo auch eine Lösung für das Problem beschrieben ist). Das ganze ist auch schon bei CodeGear im QC als QC 66867 aufgeführt.

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
Frederik
Assertor
Embarcadero Tech Partner & Indy Team (OpenSSL). Bitte keine Supportanfragen per PN!
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 2. Okt 2008, 11:53
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
  Mit Zitat antworten Zitat
Benutzerbild von Assertor
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 2. Okt 2008, 12:05
Hi,

Zitat von Samashy:
Danke Assertor für Deine Hilfe.
Gerne!

Zitat von Samashy:
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'
Nicht Dein Fehler, Delphi kann die angegebene Datei nicht finden.

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
Frederik
Assertor
Embarcadero Tech Partner & Indy Team (OpenSSL). Bitte keine Supportanfragen per PN!
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 2. Okt 2008, 12:43
Es funktioniert!!!

Nochmal vielen vielen Dank!

Romy
  Mit Zitat antworten Zitat
Benutzerbild von Assertor
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 2. Okt 2008, 13:15
Zitat von Samashy:
Es funktioniert!!!

Nochmal vielen vielen Dank!
Freut mich, gerne!

Gruß Assertor
Frederik
Assertor
Embarcadero Tech Partner & Indy Team (OpenSSL). Bitte keine Supportanfragen per PN!
  Mit Zitat antworten Zitat
hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#7

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 25. Feb 2009, 18:51
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:
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;
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:
Zitat:
ERROR_INVALID_HANDLE 6 0x6 : The handle is invalid.
  Mit Zitat antworten Zitat
Thomas Horstmann

Registriert seit: 25. Apr 2007
85 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Indy - Attachment verliert Namen (erst seit Delphi2009)

  Alt 25. Feb 2009, 21:55
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:
    ...
    IdMessage1.Encoding := meMIME ;
    IdMessage1.ContentType := 'text/plain' ;
    IdMessage1.ContentTransferEncoding := 'quoted-printable' ;
    IdMessage1.CharSet := 'ISO-8859-1' ;
    ...
Viele Spass

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf