Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   E-Mail senden (https://www.delphipraxis.net/188711-e-mail-senden.html)

HPB 30. Mär 2016 11:32

E-Mail senden
 
Guten Tag Delphianer,
ich möchte eine E-Mail senden. Im Body der E-Mail befindet sich ein Bild.
Wenn ich nun die E-Mail sende, wird der Text korrekt übermittelt,
aber das Bild im Body nicht.
Nun habe ich schon verschiedene ContentType ausprobiert, aber es gelingt nicht.
Delphi-Quellcode:
  idmsgSendeMail.ContentType := 'multipart/mixed';
idmsgSendeMail.CharSet := 'UTF-8';
// idmsgSendeMail.ContentType := 'multipart/Image;
// idmsgSendeMail.CharSet := 'windows-1256';
  idmsgSendeMail.ContentTransferEncoding := '64bit';
Welchen ContentType muss ich nehmen? Oder liegt es am CharSet??
Weiß mir keinen Rat mehr. Vielleicht hat ja jemand eine Lösung??
Mit gruß
HPB

dataspider 30. Mär 2016 12:02

AW: E-Mail senden
 
Ich hatte mal ein ähnliches Problem.

Das sollte zum Testen genügen.
Inline - Images erfordern schon ein paar besondere Bemühungen...

Frank

Sir Rufo 30. Mär 2016 12:31

AW: E-Mail senden
 
Indy 10 hat da schon was vorbereitet:
Delphi-Quellcode:
uses
  IdMessageBuilder, IdMessage;

procedure TForm1.Button2Click( Sender: TObject );
var
  b: TIdMessageBuilderRtf;
  m: TIdMessage;
  s: TStringStream;
begin
  s := TSTringStream.Create;
  try

    RichEdit1.Lines.SaveToStream( s );

    m := TIdMessage.Create( nil );
    try
      b := TIdMessageBuilderRtf.Create;
      try
        s.Position := 0;
        b.Rtf.LoadFromStream( s );
        b.FillMessage( m );
      finally
        b.Free;
      end;

      // Wir zeigen die Mail einfach nur mal an
      s.Clear;
      m.SaveToStream( s );

    finally
      m.Free;
    end;

    ShowMessage( s.DataString );

  finally
    s.Free;
  end;
end;

Koloss 30. Mär 2016 14:17

AW: E-Mail senden
 
Falls du ein Bild mitsenden möchtest, habe ich eine fertige Funktion dafür:

In ImageFiles stehen die Bilder mit Pfad drinnen.

Diese Indy Units werden benötigt:
Code:
IdSMTPBase, IdSMTP, IdMessage, IdMessageParts, IdText, IdAttachment, IdAttachmentFile, idGlobal
Komponente idSMTP liegt bei mir in einer Form, kannst aber mitgeben oder createn etc. wie du möchtest.
Code:
function TMailThread.SendMail(ToAddress, Subject : String; MailText : String; ImageFiles : TStringDynArray) : Boolean;
var IdMessage: TIdMessage; lTextPart: TIdText;
  idAttachment: TIdAttachment;
  Stream: TStream;
  Enc: TIdTextEncoding;
  i : Integer;
begin
  Result := False;
  IdMessage := TIdMessage.Create(nil);
  IdMessage.Subject := Subject;
  with IdMessage do
  begin
    ContentType := 'multipart/related; type="text/html"';
    CharSet:= 'ISO-8859-1';
    ContentTransferEncoding := 'quoted-printable';
    From.Address := MailSettings.FromAddress;
    From.Name := MailSettings.FromName;
    Recipients.EMailAddresses := ToAddress;
  end;
  with TIdText.Create(IdMessage.MessageParts, nil) do
  begin
    Body.Text := MailText;
    ContentType := 'text/html';
    CharSet := 'ISO-8859-1';
  end;
  for i := 0 to High(ImageFiles) do
    with TIdAttachmentFile.Create(IdMessage.MessageParts, ImageFiles[i]) do
    begin
      ContentID := 'image' + IntToStr(i+1);
      ContentType := 'image/jpeg';
    end;
  try
    IdSMTP.Send(IdMessage);
    Result := True;
  finally
    IdMessage.Free;
  end;
end;

HPB 31. Mär 2016 07:31

AW: E-Mail senden
 
Guten Tag Delphianer,
vielen Dank für Eure Hilfe.
Zu Koloss
es sollen keine Dateien angehängt werden.
Sondern das Bild das im Body eingefügt worden ist, soll mit übertragen werden.

Zu SirRufo
Ich benutze eine TADVRichEditor-Komponente.
Diese Komponente kennt die Eigenschaft "Lines" nicht.

Zu Dataspider
Den begefügten Quellcode werde ich mir mal ansehen.

Vielleicht weiss ja jemand noch eine andere Lösung?
Mit Gruß
HPB

mrtwo12 31. Mär 2016 07:51

AW: E-Mail senden
 
Moin,

Zitat:

Zitat von HPB (Beitrag 1334284)
Zu SirRufo
Ich benutze eine TADVRichEditor-Komponente.
Diese Komponente kennt die Eigenschaft "Lines" nicht.

http://www.tmssoftware.biz/Download/...RichEditor.pdf

Seite 12 erste Zeile lautet:
SaveToStream(const AStream: TStream);
Save a document in the .RTE file format to stream

mfg
S.Simon

dataspider 31. Mär 2016 08:57

AW: E-Mail senden
 
Zitat:

Zitat von HPB (Beitrag 1334284)
Vielleicht weiss ja jemand noch eine andere Lösung?
Mit Gruß
HPB

Es wäre hilfreich zu wissen:
Welches Format benutzt du für Bodytext - RTF oder HTML?

Bei RTF kannst du ja Sir Rufo' s Vorschlag testen.
Ich habe nie RTF benutzt, weil oft vor der Benutzung gewarnt wird.
Es kann wohl nicht jeder Client damit umgehen.
Bei HTML musst du die Bilder "rausholen", die werden als Anhang versendet.
Dann kannst du mein Beispiel benutzen.
Es bleibt dann das Problem der Trennung von Text und Bild.
Und ich habe bisher außer WPTools nichts gefunden, was das kann.

Frank

DeddyH 31. Mär 2016 09:19

AW: E-Mail senden
 
Oder man bindet das Bild Base64-kodiert direkt in den HTML-Source ein. Ich vermute, das funktioniert auch in EMails.

mm1256 31. Mär 2016 11:31

AW: E-Mail senden
 
So ähnlich wie in #4 beschrieben funktioniert das mit den Indies sehr gut. Hier mal mein Beispiel dazu. Ich verwende es unter Anderem um Mahnungen per E-Mail zu versenden. Hier darf auch keine separate Dateianlage vorhanden sein. Die Grafik muss direkt in den HTML-Text eingebunden sein.

Delphi-Quellcode:
function MeinMailVersand(const aAbsender,
                         aMailCopyTo,
                         aUserName,
                         aHost,
                         aPassword,
                         aEmpfaenger,
                         aSubject,
                         aTextBody,
                         aHtmlBody,
                         aDateianlage: string;
                         var aMsg: string) : boolean;
var
  Html: TStrings;
  HtmPart, TxtPart: TIdText;
  SMTP: TIdSMTP;
  BmpPart: TIdAttachmentFile;
  EMail: TIdMessage;
begin
  aMsg := '';
  Result := false;
  EMail := nil;
  Html := nil;
  SMTP := nil;
  try
    SMTP := TIdSMTP.Create;
    Html := TStringList.Create;
    EMail := TIdMessage.Create(nil);
    {-HTML-Daten-}
    Html.Add('<html>');
    Html.Add('<head>');
    Html.Add('</head>');
    Html.Add('<body>'+aHtmlBody);
    Html.Add('<img src="cid:us.jpg" />');
    Html.Add('</body>');
    Html.Add('</html>');
    {-Mail-Daten-}
    EMail.From.Address := aAbsender;
    EMail.Recipients.EMailAddresses := aEmpfaenger;
    EMail.Subject := aSubject;
    EMail.ContentType := 'multipart/mixed';
    EMail.Body.Assign(Html);
    {-Lesebestätigung-}
    EMail.ExtraHeaders.AddValue('Disposition-Notification-To', aAbsender);
    {-Text-Part-}
    if aTextBody <> '' then begin
      TxtPart := TIdText.Create(email.MessageParts);
      TxtPart.ContentType := 'text/plain';
      TxtPart.Body.Text := aTextBody;
    end;
    {-Dateianlage-}
    HtmPart := TIdText.Create(email.MessageParts, html);
    HtmPart.ContentType := 'text/html';
    BmpPart := TIdAttachmentFile.Create(EMail.MessageParts, aDateianlage);
    BmpPart.ContentType := 'image/jpeg';
    BmpPart.ContentDisposition := 'inline';
    BmpPart.ExtraHeaders.Values['content-id'] := 'us.jpg';
    BmpPart.DisplayName := 'us.jpg';
    {-Benutzerdaten-}
    SMTP.Username := aUserName;
    SMTP.Host := aHost;
    SMTP.Password := aPassword;
    {-fertig zum Versenden-}
    try
      SMTP.Connect;
      try
        SMTP.Send(EMail);
        if aMailCopyTo <> '' then begin
          EMail.Subject := '[Kopie E-Mail an ' + aEmpfaenger+ '] - ' + EMail.Subject;
          EMail.Recipients.EMailAddresses := aAbsender;
          EMail.ExtraHeaders.Clear;
          SMTP.Send(EMail);
        end;
        aMsg := 'E-Mail an <'+aEmpfaenger+'> erfolgreich gesendet um ' + DateTimeToStr(Now);
        Result := True;
      except
        on E: Exception do aMsg := 'Fehler beim Mail-Versand: ' + E.Message;
      end;
    finally
      SMTP.Disconnect;
    end;
  finally
    EMail.Free;
    Html.Free;
    SMTP.Free;
  end;
end;

Sir Rufo 31. Mär 2016 11:38

AW: E-Mail senden
 
Der TE hat ein RTF Dokument was er als Mail versenden möchte (ja, hat er im ersten Beitrag nicht explizit geschrieben und dafür gibt es auch noch hinten einen drauf :mrgreen:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz