2015-02-02 3 views
1

Я работаю с приложением iOS в Firemonkey, используя Delphi XE7.iOS Firemonkey: Как отправить электронную почту от приложения iOS, хотя приложение для почты в Firemonkey Delphi XE7

Вопрос: Мне нужно отправить электронное письмо из моего приложения iOS через почтовое приложение в Firemonkey.

Я видел другие старые блоги для отправки электронной почты, но эти решения мне не помогли.

Ниже приведены ссылки, которые я пробовал, но я не мог решить.

http://blogs.embarcadero.com/ao/2011/10/04/39133

http://blogs.embarcadero.com/matthiaseissing/2013/05/03/38707/

Пожалуйста, дайте мне знать некоторые другие решения или образцы.

Заранее спасибо.

+0

Второе звено (Matthias Eissing) является правильный путь. Я думаю, что это только преобразование NSStr/NSURL, которое терпит неудачу? (потому что Embarcadero внес изменения в это в последнем Delphi) – Hans

ответ

1

Используйте код из второй ссылки вы вошли: http://blogs.embarcadero.com/matthiaseissing/2013/05/03/38707/

Это для xe4 и вам просто нужно несколько изменений, чтобы заставить его работать на XE7:

StrToNSUrl функцию перешла к Macapi.Helpers блок в XE7, поэтому вы должны добавить это в свой раздел uses. Кроме того, функция NSStr устарела, поэтому вместо этого вы должны использовать StrToNSStr (также из Macapi.Helpers).

Вот функция, которая помещает всю функциональность вместе:

procedure SendEmail(aEmail: string; aSubject: string = ''; aBody: string = ''); 
var lSharedApplication: UIApplication; 
    lURL: string; 
begin 
    lURL := 'mailto:'+aEmail; 
    if (aSubject<>'') or (aBody<>'') then 
    begin 
    lURL := lURL+'?subject='+aSubject; 
    if aBody<>'' then 
     lURL := lURL+'&body='+aSubject; 
    lURL := StringReplace(lURL,' ','%20',[rfReplaceAll]); //replace spaces 
    lURL := StringReplace(lURL,sLineBreak,'%0D%0A',[rfReplaceAll]);//replace linebreaks 
    end; 
    lSharedApplication := TUIApplication.Wrap(TUIApplication.OCClass.SharedApplication); 
    lSharedApplication.openURL(StrToNSUrl(lURL)); 
end; 

Зов это следующим образом:

SendEmail('[email protected]','My subject','My body'); 
+0

Спасибо за ваш ответ @Hans. Может также помочь мне устранить проблему пространства в теме и тексте URL-адреса электронной почты? Как мы можем заменить пространство в URL? –

+1

Вы должны использовать кодировку HTML для пробела =% 20. Просто замените все пробелы на «% 20» с помощью StringReplace (в модуле SysUtils): SharedApplication.openURL (StrToNSUrl (StringReplace (URL, '', '% 20', [rfReplaceAll]))); – Hans

+0

Еще раз спасибо @ Ханс. Единственная проблема, с которой я столкнулся, - это «разрыв строки» в разделе тела электронной почты. Я узнал, что мне приходится использовать% 0D% 0A для разрывов строк, но я точно не знаю, как и где его использовать. –

1

Используйте класс TDPFMailCompose, который входит в D.P.F Delphi iOS Native Components

Это дает вам больше параметров, чем mailto: link, и вам не нужно беспокоиться о кодировке. Внутри это использует класс iOS MFMailComposeViewController.

Пример:

var 
    Mail: TDPFMailCompose; 
begin 
    Mail := TDPFMailCompose.Create(nil); 
    if not Mail.MailCompose(Msg.Subject, Msg.Body, False, [Msg.To_], [Msg.CC], [Msg.BCC], [AttachedFileName]) then 
    MessageDlg('Error sending mail', TMsgDlgType.mtError, [TMsgDlgBtn.mbClose], -1); 
end;