![]() |
Firemonkey XE8: E-Mail mit HTML body senden
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:
Ist dieser ansatz der richtige? :?:
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; Gruß Loko |
AW: Firemonkey XE8: E-Mail mit HTML body senden
Versende deine Mails doch über einen SMTP-Server. Dann braucht das System, auf dem das Programm läuft, keinen Mail-Client installiert zu haben.
|
AW: Firemonkey XE8: E-Mail mit HTML body senden
Zitat:
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 |
AW: Firemonkey XE8: E-Mail mit HTML body senden
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; |
AW: Firemonkey XE8: E-Mail mit HTML body senden
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. |
AW: Firemonkey XE8: E-Mail mit HTML body senden
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 |
AW: Firemonkey XE8: E-Mail mit HTML body senden
Leider kann ich auch keine anderen Dateitypen (.txt oder .jpg) versenden: Immer derselbe Fehler. :(
|
AW: Firemonkey XE8: E-Mail mit HTML body senden
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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