E-Mail senden aus Delphi iOS

Diese Funktionen verstecken sich im UIApplication Objekt. Dies wollen wir erstmal haben:
TUIApplication.Wrap(TUIApplication.OCClass.SharedApplication);
Dann noch eine kleine Funktion, die aus einem normalen Delphi-String eine NSURL macht:
TNSUrl.Wrap(TNSUrl.OCClass.URLWithString(NSSTR(AStr)));
Anschliessend können wir die E-Mail recht einfach versenden:
URL := 'mailto:This email address is being protected from spambots. You need JavaScript enabled to view it.?subject=Test&body=Testmessage';
SharedApplication.openURL(StrToNSUrl(URL));
Natürlich kann man "Test" und "Testmessage" durch eigene Strings (hier reichen reine Delphi-Strings) ersetzen und sich den Text/String passend konkatinieren.
Damit wir auf die UIApplication und die Typen zugreifen können, brauchen wir noch die Erweiterung der USES-Clause um iOSapi.UIKit und iOSapi.CocoaTypes
Komplett sieht das dann so aus (sorry für die Formatierung):
unit
Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
iOSapi.Foundation, iOSapi.UIKit, iOSapi.CocoaTypes;
type
TForm1 =class
(TForm)
Button1: TButton;
procedure
Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
function
SharedApplication: UIApplication;
function
StrToNSUrl(const
AStr:string
): NSUrl;
{ Public-Deklarationen }
end
;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure
TForm1.Button1Click(Sender: TObject);
var
URL:String
;
begin
URL :='mailto:This email address is being protected from spambots. You need JavaScript enabled to view it.?subject=Test&body=Testmessage'
;
SharedApplication.openURL(StrToNSUrl(URL));
end
;
function
TForm1.SharedApplication: UIApplication;
begin
Result := TUIApplication.Wrap(TUIApplication.OCClass.SharedApplication);
end
;
function
TForm1.StrToNSUrl(const
AStr:string
): NSUrl;
begin
Result := TNSUrl.Wrap(TNSUrl.OCClass.URLWithString(NSSTR(AStr)));
end
;
end
.
Wenn es im iOS Simulator nicht funktioniert, liegt das daran, daß dort kein E-Mail Account definiert ist :-)


Comments
-
Das liegt an den Leerstellen (die möglicherweise im Memo1.text drin sind) und an den Linefeeds (#10)
Diese müssen dann umschrieben ("escaped") werden. Das ist immer so bei "mailto-URLs"....
procedure TForm1.Button1Click(Sender: TObject);
const
LF = #10;
var
URL : String;
Body : String;
begin
Body := Memo1.Text;
Body := StringReplace(Body,' ','%20',[rfReplaceAll]); // Leerstellen konvertieren
Body := StringReplace(Body,LF,'%0A',[rfReplaceAll]); // Zeilenumbruch konvertieren
URL := 'mailto:[email protected]?subject=Test&body='+Body;
SharedApplication.openURL(StrToNSUrl(URL));
end; -
Jörg Thursday, 20 March 2014
hier mein Code-Auszug:
sendTo := StringReplace(sendTo,' ','%20',[rfReplaceAll]); // Leerstellen konvertieren
sendTo := StringReplace(sendTo,LF,'%0A',[rfReplaceAll]); // Zeilenumbruch konvertieren
Body := StringReplace(Body,' ','%20',[rfReplaceAll]); // Leerstellen konvertieren
Body := StringReplace(Body,LF,'%0A',[rfReplaceAll]); // Zeilenumbruch konvertieren
URL := 'mailto:'+sendTo+'?subject=Test&body='+Body;
SharedApplication.openURL(StrToNSUrl(URL)); -
Jörg Thursday, 20 March 2014
WEnn ich das Beispiel von den D.P.F Components IOS nehme, zeigt er mir im eMail - Beispiel, im Simulator die generierte eMail an, Man geht dann audf senden und er tut so, als würde er senden.
Hier in diesem Beispiel drücke ich den Button zum generieren der eMail und es kommt kein Fenster mit der eMail und mit dem Button senden. -
Please login first in order for you to submit comments
- Page :
- 1
Hallo,
wie muss den der URL-String aussehen wenn ich Strings einsetzte z.B.
URL :='mailto:'+edit1.text+'?subject=Test&body='+Memo1.text;
so funktioniert das nicht, auch wenn ich mit Tstring arbeite funktioniert es nicht.
Das Beispiel oben funktioniert.
Gruß
Jörg