AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Firemonkey XE8: E-Mail mit HTML body senden
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey XE8: E-Mail mit HTML body senden

Ein Thema von Loko789 · begonnen am 13. Sep 2016 · letzter Beitrag vom 17. Okt 2016
Antwort Antwort
Loko789

Registriert seit: 23. Sep 2015
74 Beiträge
 
#1

Firemonkey XE8: E-Mail mit HTML body senden

  Alt 13. Sep 2016, 11:00
Hallo,

Ich stehe vor volgendem Problem.
Habe ein HTML Dokument und dieses möchte ich als body senden. Wie bei Outlook, dort gibt es die Funktion einfügen->als Text einfügen.
Git es sowas? Mir ist sehr wichtig das es platform unabhähing ist. Ich nutze zurzeit volgendes um die E-Mail zu versenden:
Delphi-Quellcode:
unit OpenHelp;

interface

  type
    TopenHelp = class
      function OpenURL(const URL: string): Boolean;

    end;

implementation

  uses
    IdURI, SysUtils, Classes, FMX.Dialogs,
{$IFDEF ANDROID}
    Androidapi.Helpers,
    FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText,
    Androidapi.JNI.Net, Androidapi.JNI.JavaTypes;
{$ENDIF ANDROID}
{$IFDEF MSWINDOWS}
  shellapi;
{$ENDIF MSWINDOWS}

  function TopenHelp.OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean;

{$IFDEF ANDROID}
    var
      Intent: JIntent;
    begin
      Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(URL)));
      try
        SharedActivity.startActivity(Intent);
        exit(true);
      except
        on e: Exception do
        begin
          if DisplayError then
            ShowMessage('Error: ' + e.Message);
          exit(False);
        end;
      end;

{$ENDIF ANDROID}
{$IFDEF MSWINDOWS}
      begin
        ShellExecute(0, 'open', PChar(URL), nil, nil, 0);

      end;
{$ENDIF MSWINDOWS}


end.
--------------------------------
procedure TForm_Produktberater.Button3Click(Sender: TObject);
   var
   open:TopenHelp;
   begin
        open:=TopenHelp.Create;
        open.OpenURL('mailto:m.mustermann@domain.de')
        open.free;

    end;
Ist dieser ansatz der richtige?

Gruß
Loko

Geändert von Loko789 (13. Sep 2016 um 11:48 Uhr)
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#2

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 13. Sep 2016, 14:43
Versende deine Mails doch über einen SMTP-Server. Dann braucht das System, auf dem das Programm läuft, keinen Mail-Client installiert zu haben.
  Mit Zitat antworten Zitat
Loko789

Registriert seit: 23. Sep 2015
74 Beiträge
 
#3

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 13. Sep 2016, 15:06
Versende deine Mails doch über einen SMTP-Server. Dann braucht das System, auf dem das Programm läuft, keinen Mail-Client installiert zu haben.
Danke für dem Tipp.
Gibt es abgesehen davon noch eine andere Lösung um Mails mit dem Standard Mail-Client zu senden?

Edit:
Habe es jetzt geschafft via SMTP-Server. Hat etwas gedauert aber es funktioniert

Geändert von Loko789 (14. Sep 2016 um 10:07 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#4

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 15. Sep 2016, 13:42
Ist auch noch eine Baustelle, aber vielleicht hilft dir das weiter ?
Das wurde aus diversen Tips, Tricks und Tests zusammengestrickt.

Gerne auch Ergebnisse und Verbesserungen zurückmelden.

Rollo

Delphi-Quellcode:
interface

uses
    System.UITypes, System.SysUtils
  , FMX.Dialogs
{$IFDEF IOS}
//06.05.16 ChgToDpfMin , DPF.iOS.MFMailCompose
  , DPF.iOS.MailMin
{$ENDIF IOS}
{$IFDEF ANDROID}
  , Androidapi.JNI.JavaTypes
  , Androidapi.JNIBridge, Androidapi.JNI.App
  , Androidapi.JNI.Net
  , Androidapi.JNI.Os
  , Androidapi.JNI.GraphicsContentViewText
  , AndroidApi.Helpers
  , FMX.Helpers.Android
// , Androidapi.Jni.Net
// , FMX.Helpers.Android
// , Androidapi.JNIBridge
{$ENDIF ANDROID}
  ;


type
  TS4Mail_Attachments = array of String;




// Send mail with standard client on various platforms
function Mail_Send(const sRecp, sCC, sBCC, sSubj, sBody: String; const aAttach : TS4Mail_Attachments): Boolean;
{$IFDEF IOS}
var
  FMailCompose : TDPFMailCompose;
{$ENDIF IOS}

{$IFDEF ANDROID}
var
  Intent : JIntent;
  Uri : Jnet_Uri;
  AttachmentFile: JFile;
  D, S : JString;
  aDest: TJavaObjectArray<JString>;
// Uri : TJnet_Uri;

{$ENDIF ANDROID}
begin

{$IFDEF IOS}
  FMailCompose := TDPFMailCompose.Create(nil);

  try

    Result := FMailCompose.CanSendMail;
    if Result then
    begin
      Result := FMailCompose.MailCompose(sSubj, //Subject
                                         sBody, //Body
                                         False, //Is Html
                                         [sRecp], //Array of recepients
                                         [sCC], //Array of CC
                                         [sBCC], //Array of BCC
                                         aAttach //Array of Attachment Files
// , [] //Array of Attachment Files
// , nil,
// ''
                                         );

// function DPFMailCompose( Subject: string;
// MessageBody: string;
// MessageBodyisHtml: Boolean;
// Recipients: array of string;
// CCRecipients: array of string;
// BCCRecipients: array of string;
// AttachedFiles: array of string;
// ImageView: TDPFImageView = nil;
// ImageViewName: string = 'DPF-Photo.png' ) : Boolean;
    end;

  finally
    FMailCompose.Free;
    FMailCompose := nil;
  end;

{$ELSE  IOS}

{$IFDEF ANDROID}

  Result := False;

  try


    Intent := TJIntent.Create;

    aDest := TJavaObjectArray<JString>.Create(1);
    aDest.Items[0] := StringToJString( sRecp );

    Intent.setAction(TJIntent.JavaClass.ACTION_Send);
// Intent.setType( StringToJString('*/*'));
// Intent.setType( StringToJString('text/plain'));
// Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
    Intent.setType(StringToJString('message/rfc822')); // Hier sollten nur Mail Apps kommen (bei mir aber auch noch

    //Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE); //Use Array
    Intent.setFlags( TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
    Intent.putExtra( TJIntent.JavaClass.EXTRA_EMAIL, aDest );
    Intent.putExtra( TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(sSubj));
    intent.putExtra( TJIntent.JavaClass.EXTRA_TEXT, StringToJString(sBody));
// Uri := TJnet_Uri.JavaClass.parse(StringToJString(FileName));
// Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, Uri);


    if (Length(aAttach) > 0) and (aAttach[0] <> '') then
    begin
      if FileExists(aAttach[0]) then
      begin


        AttachmentFile := TJFile.JavaClass.init(StringToJString( aAttach[0] ));

//## AttachmentFile := TAndroidHelper.Activity.getExternalFilesDir(StringToJString(aAttach[0]));


        Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
        Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,
                        TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));

      end;

    end;


//## Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString(Recipient));
//## Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(Subject));
//## Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(Content));

//## Intent.setType(StringToJString('vnd.android.cursor.dir/email'));

// Intent.setType(StringToJString('vnd.android.cursor.dir/email'));


//##OFF Intent.setType(StringToJString('vnd.android.cursor.dir/email'));

//##OFF SharedActivity.startActivity(Intent);


// Intent.setType(StringToJString('vnd.android.cursor.dir/email')); Auch OK

//## Intent.setType(StringToJString('message/rfc822')); // Hier sollten nur Mail Apps kommen (bei mir aber auch noch

// SharedActivity.startActivity(Intent);


// Intent := TJIntent.Create;
// Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
// Intent.setType(StringToJString('message/rfc822'));
// Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString( sRecp ));
// Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString( sSubj ));
// intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString( sBody ));

    TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(Intent,
                                          StrToJCharSequence('Choose email app')));

// SharedActivity.startActivity(TJIntent.JavaClass.createChooser(Intent,
// StrToJCharSequence('Which email app ?')));


// Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SENDTO); // ACTION_SEND);
// Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString( sRecp ));
// Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString( sSubj ));
// Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString( sBody ));
// // Intent.setType(StringToJString('plain/text'));
// Intent.setType(StringToJString('message/rfc822')); //message/rfc822'));
// // LaunchActivity(Intent);
// LaunchActivity(TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence('Which email app?')));

    Result := True;

  finally

  end;

{$ELSE  ANDROID}
  {$MESSAGE WARN 'S4Mail_Send not implemented for this platform}
  Result := False;
{$ENDIF ANDROID}
{$ENDIF IOS}

end;
  Mit Zitat antworten Zitat
Wasserflasche

Registriert seit: 10. Okt 2016
2 Beiträge
 
#5

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 10. Okt 2016, 15:35
Danke Rollo62 für deine umfangreiche Nachricht. Leider erhalte ich immer die Fehlermeldung, dass der ausgewählte Anhang (eine PDF-Datei) nicht unterstützt wird bzw. ungültig (je nach E-Mail-App: GMX und GMail) ist. Ist das bei dir genauso und hast du schon eine Lösung dafür gefunden?

P.S.: Ich nutze XE 10.

Geändert von Wasserflasche (10. Okt 2016 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 10. Okt 2016, 20:16
Ich versende keine PDF, deshalb kann ich das nicht wirklich sagen.
Versuch doch einfach mal testweise ein Textfile oder JPEG File zu versenden, das geht beides bei mir.

Rollo
  Mit Zitat antworten Zitat
Wasserflasche

Registriert seit: 10. Okt 2016
2 Beiträge
 
#7

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 17. Okt 2016, 11:01
Leider kann ich auch keine anderen Dateitypen (.txt oder .jpg) versenden: Immer derselbe Fehler.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Firemonkey XE8: E-Mail mit HTML body senden

  Alt 17. Okt 2016, 13:41
Wir nutzen folgende Funktion zum Versenden:

Delphi-Quellcode:
procedure DoShareAction;
var
  Intent: JIntent;
  Uri: Jnet_Uri;
  Uris: JArrayList;
  AttachmentFile: JFile;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE);
  Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(FFileDesc));
  Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(FFileDesc));
  Intent.setType(GetMimeType);

  // Datei anhängen
  FTempFile := GenerateTempFile;
  AttachmentFile := TJFile.JavaClass.init(StringToJString(FTempFile));
  Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
  Uris := TJArrayList.Create;
  Uris.add(0, Uri);
  Intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, Uris);

  TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence('Bitte Ziel auswählen...')));
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:01 Uhr.
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