【问题标题】:How to launch email client from FireMonkey on Windows/Mac?如何在 Windows/Mac 上从 FireMonkey 启动电子邮件客户端?
【发布时间】:2012-02-28 00:32:53
【问题描述】:

是否有从 FireMonkey 启动电子邮件客户端的跨平台方法,以便它可以在 Windows 和 OS/X 上运行。在 windows 下,我可以执行以下操作:

ShellExecute(0, 'OPEN', 'mailto:somebody@somewhere.com', '', '', SW_ShowDefault);

是否有与启动电子邮件客户端等效的跨平台(最好带有附件、收件人、主题、正文等)?

【问题讨论】:

    标签: delphi email delphi-xe2 firemonkey


    【解决方案1】:

    据我所知,没有跨平台的方式来发送邮件,但是使用 Windows 端的 ShellExecute 函数和 OSX 的 NSWorkspace.openURL 可以编写自己的实现。

    试试这个 OSX 实现。

    uses
      Macapi.Foundation,
      Macapi.AppKit,
      System.SysUtils;
    
    Procedure SendMail(const Mailto,Subject, Body:string);
    var
      URL : NSURL;
      AWorkspace : NSWorkspace;
      encodedSubject,
      encodedTo,
      encodedBody    : NSString;
    begin
      //NSString *encodedSubject = [NSString stringWithFormat:@"SUBJECT=%@", [subject stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
      encodedSubject :=NSSTR(Format('SUBJECT=',[Subject])).stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
      //NSString *encodedBody = [NSString stringWithFormat:@"BODY=%@", [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
      encodedBody    :=NSSTR(Format('BODY=',[Body])).stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
      //NSString *encodedTo = [to stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      encodedTo      :=NSSTR(Mailto).stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
      //NSString *encodedURLString = [NSString stringWithFormat:@"mailto:%@?%@&%@", encodedTo, encodedSubject, encodedBody];
      //NSURL *mailtoURL = [NSURL URLWithString:encodedURLString];
      // [[NSWorkspace sharedWorkspace] openURL:mailtoURL];
      URL := TNSURL.Create;
      URL.initWithString(NSSTR(Format('mailto:%s?%s&%s',[ encodedTo.UTF8String, encodedSubject.UTF8String, encodedBody.UTF8String])));
      AWorkspace := TNSWorkspace.Create;
      AWorkspace.openURL(URL);
    end;
    

    【讨论】:

    • +1 有人想知道 Emba 是否计划为这类事情添加一个抽象层,或者它是否必须来自第 3 方开发人员。
    猜你喜欢
    • 2014-11-21
    • 2011-02-17
    • 2021-01-02
    • 1970-01-01
    • 2014-08-23
    • 2014-02-15
    • 1970-01-01
    • 2012-07-07
    相关资源
    最近更新 更多