Entwickler-Ecke

Internet / Netzwerk - HTML Mail versenden D2010 - Indy


pesi - Di 12.10.10 11:45
Titel: HTML Mail versenden D2010 - Indy
Hallo,
wenn man mal nach HTML Mails googelt wird man recht gut fündig, aber leider basieren alle Ergebnisse auf dem gleichen Beispiel und jedes dieser Beispiele bringt mir einen Fehler:-(

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
procedure TForm1.Button2Click(Sender: TObject);
var
  html: TStrings;
  htmpart, txtpart: TIdText;
  bmppart: TIdAttachment;
  email: TIdMessage;
  filename: string;
begin
  filename := 'u:\callcenter.jpg';

  html := TStringList.Create();
  html.Add('<html>');
  html.Add('<head>');
  html.Add('</head>');
  html.Add('<body><h1>Hello</h1>');
  html.Add('<img src="cid:us.jpg" />');
  html.Add('This is a picture of us!</body>');
  html.Add('</html>');

  email := TIdMessage.Create(nil);
  email.From.Address := 'xxxxx';
  email.Recipients.EMailAddresses := 'xxxxx';
  email.Subject := 'Hello';
  email.ContentType := 'multipart/mixed';
  email.Body.Assign(html);

  txtpart := TIdText.Create(email.MessageParts);
  txtpart.ContentType := 'text/plain';
  txtpart.Body.Text := '';

  htmpart := TIdText.Create(email.MessageParts, html);
  htmpart.ContentType := 'text/html';

  bmppart := TIdAttachment.Create(email.MessageParts,filename);
  bmppart.ContentType := 'image/jpeg';
  bmppart.ContentDisposition := 'inline';
  bmppart.ExtraHeaders.Values['content-id'] := 'us.jpg';
  bmppart.DisplayName := 'us.jpg';


  idSMTP1.Username:='xxxxxxx';
  idSMTP1.Host:='xxxxxxx';

  try
    idSMTP1.Connect();
    try
      idSMTP1.Send(email);
      ShowMessage('Sent');
    except
      on E: Exception do
        ShowMessage('Failed: ' + E.Message);
    end;
  finally
    idSMTP1.Disconnect();
    email.Free();
    html.Free();
  end;
end;

Letztendlich scheitert es bei mir immer an der folgenden Zeile:

Delphi-Quelltext
1:
bmppart := TIdAttachment.Create(email.MessageParts,filename);                    

Da heißt es immer, dass es zu viele Parameter wären.

Hat jemand eine Idee was da falsch ist???

Danke & Gruß
Peter
P.S.: und NEIN, ich habe keine Ahnung wie man hier im Forum den Quelltext so schick macht wie Ihr das immer macht :-(

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 12.10.2010 um 12:42


Delete - Di 12.10.10 11:51

Welche Indy Version nutzt du und für welche Indy Version ist der Code? Ich glaube, da hat sich bei den Parametern was geändert. Guck dir doch einfach mal die Deklaration im Quellcode oder in der Hilfe von den Indys an. Alternativ guck dir mal die Demos zu den Indys an, die bei jeder Version dabei sind.


Narses - Di 12.10.10 12:48

Moin!

user profile iconpesi hat folgendes geschrieben Zum zitierten Posting springen:
P.S.: und NEIN, ich habe keine Ahnung wie man hier im Forum den Quelltext so schick macht wie Ihr das immer macht :-(
Ganz leicht, im Editor wird:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG37004fedb00b76b7cec0fbc5919f6b54}</span></span>dann in der Anzeige zu:

Delphi-Quelltext
1:
2:
3:
begin
  // dein Code
end;
Du kannst auch einfach den Code markieren und auf das "+" neben der ComboBox "Delphi" klicken, dann werden die Tags automatisch eingefügt. :idea: ;)

Allerdings war in deinem Beitrag die Anzeige von BB-Codes unterdrückt, ich habe das mal bei dem Beitrag oben korrigiert. Vielleicht solltest du mal deine Einstellungen prüfen. :nixweiss:

cu
Narses


JoelH - Di 12.10.10 12:51

user profile iconpesi hat folgendes geschrieben Zum zitierten Posting springen:

Letztendlich scheitert es bei mir immer an der folgenden Zeile:

Delphi-Quelltext
1:
bmppart := TIdAttachment.Create(email.MessageParts,filename);                    



ersetz da mal durch

Delphi-Quelltext
1:
TIdAttachmentfile.Create( eMail.MessageParts, filename);                    


pesi - Di 12.10.10 14:22

@Narses: Vielen Dank für´s Korregieren und die Tipps!!!

@JoelH: Genau das war´s! Nicht TIdAttachment sondern TIdAttachmentfile!!!

Schon der Hammer, wie sich ein einmal falsches Quellcode-Beispiel im Internet so verbreiten kann (...oder vielleicht war´s ja für eine andere Indy-Version wirklich korrekt?!)

Danke an Alle!!!


JoelH - Di 12.10.10 15:21

user profile iconpesi hat folgendes geschrieben Zum zitierten Posting springen:

Schon der Hammer, wie sich ein einmal falsches Quellcode-Beispiel im Internet so verbreiten kann (...oder vielleicht war´s ja für eine andere Indy-Version wirklich korrekt?!)

Danke an Alle!!!


Die Indyleuten haben da was geändert. Die Indy-Version die bei Delphi7 dabeibei war verwendet den Quellcode den du hier gepostet hast, das ist schon richtig so, bei Delphi 2007 ists der Code den ich dir gepostet hab. Die Delphiversionen dazwischen hab ich nicht. Ich gehe davon aus die Codeänderung war der Sprung von Indy Version 9 auf Version 10.


Delete - Di 12.10.10 17:45

Also war meine Vermutung richtig, dass sich was geändert hat. ;)


pesi - Di 12.10.10 20:03

Hi Luckie,
scheint so - hätte mir mit meinem eher eingeschränktem Indy-Wissen aber vermutlich auch nicht direkt weitergeholfen, auf die Lösung wäre ich trotzdem nicht gekommen :oops:


Delete - Di 12.10.10 21:29

Ich habe dir aber genug Tipps gegeben, zum Beispiel sich mal die zugehörigen Demos angucken.


JoelH - Di 12.10.10 21:41

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe dir aber genug Tipps gegeben, zum Beispiel sich mal die zugehörigen Demos angucken.


interessant wäre natürlich welche Möglichkeit dein BDS2006 System bevorzugt.


Delete - Di 12.10.10 21:50

Kann ich im Moment nicht nachgucken, ich habe auf den Netbook das BDS2006 nicht installiert-


jaenicke - Mi 13.10.10 05:49

user profile iconpesi hat folgendes geschrieben Zum zitierten Posting springen:
scheint so - hätte mir mit meinem eher eingeschränktem Indy-Wissen aber vermutlich auch nicht direkt weitergeholfen, auf die Lösung wäre ich trotzdem nicht gekommen :oops:
Naja, in der entsprechenden Demo [http://www.indyproject.org/Sockets/Demos/index.DE.aspx] zu dem seinerzeit neuen Indy 10 steht das aber genau so, sogar mit entsprechendem Hinweis... :roll:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TfrmMessageEditor.btnAttachmentClick(Sender: TObject);
begin
   if OpenDialog1.Execute then
      begin
//         TIdAttachment.Create(IdMsgSend.MessageParts, OpenDialog1.FileName);
//         TIdAttachment should NO LONGER be used. Use IdAttachmentFile or IdAttachmentFile instead.
         TIdAttachmentFile.Create(IdMsgSend.MessageParts, OpenDialog1.FileName);
         ResetAttachmentListView;
      end;
end;


pesi - Do 14.10.10 10:38

Jaaaa, ich geh mich ja schon in die Ecke und schäme mich eine Runde :(

....aber immerhin hab ich mir bei der Suche nach der Lösung schon Mühe gegeben , nur die Indy-Hilfe/Demos hab ich nicht bemüht. :oops:

DANKE!


Tilman - Di 19.10.10 15:58

Ich habe im Moment ein sehr änliches Problem. ich konnte den Code zwar umschreiben, aber die Anhänge kommen nicht als Anhang an, sondern werden im Text der E-Mail base64 kodiert Dargestellt (sowohl auf GMX als auch in Thunderbird). Und zwar sowohl wenn ich meinen eigenen Code ausführe, als auch wenn ich ein von einer dritten Person erstelltes projekt ausführe, und sogar wenn ich die Indy-Demo ausführe werden die Anhänge als Bas64 kodierter Text dargestellt.

Das Indy10 Demo hatte ausserdem einen Fehler in msgEditor.pas Zeile 103:

Delphi-Quelltext
1:
2:
3:
4:
   case SmtpAuthType of
      0: SMTP.AuthType := satNone;
      1: SMTP.AuthType := satDefault; {Simple Login}
   end;


Die beiden "s" haben gefehlt. Kann doch eigentlich nicht wahr sein? Was mache ich falsch, oder ist es normal dass viele Jahre alte Indy-Demos solche Fehler enthalten?

Ich arbeite hier gerade mit Delphi 2010.

//edit okay, falscher Alarm. ContentType war falsch gesetzt, und in dem Demo wird das auch irgendwie merkwürdig verarbeitet. Egal. Trotzdem würde mich der oben genannte Fehler in Zeile 103 interessieren, also falls jemand sich das Demo anschauen mag, irgendwie ist das ja doch mehr als Merkwürdig. :D