ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como enviar email com anexos no ios?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
junior103
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 1 de Julho de 2015
Mensagens: 204

MensagemEnviada: Seg Jan 03, 2022 11:19 am    Assunto: Como enviar email com anexos no ios? Responder com Citação

Olá.
Estou na tentativa de chamar o aplicativo de email já com o endereço, titulo, texto e anexo preenchidos, mas não estou tendo sucesso.

Anteriormente eu usava o componente DPF.iOS.Native.Components.v9.6.1 que nas versão Delphi 10 funcionava, mas como atualizei o para Delphi 11 não funcionou.
Pelo que vi o componente citado parece que faz tempo que não teve contribuições.

Estou tentando fazer isso usando usando um .pas que baixei do git que é o seguinte: iOSapi.MessageUI.pas.


Código:

{ *********************************************************** }
{ }
{ CodeGear Delphi Runtime Library }
{ }
{ Copyright(c) 2012-2014 Embarcadero Technologies, Inc. }
{ }
{ *********************************************************** }

//
// Delphi-Objective-C Bridge
// Interfaces for Cocoa framework MessageUI
//

unit iOSapi.MessageUI;

interface

uses
  Macapi.CoreFoundation,
  Macapi.CoreServices,
  Macapi.Dispatch,
  //Macapi.Foundation,
  Macapi.Mach,
  Macapi.ObjCRuntime,
  Macapi.ObjectiveC,
  //Macapi.QuartzCore,
  iOSapi.CocoaTypes,
  iOSapi.Foundation,
  iOSapi.UIKit;

const
  MFMailComposeResultCancelled = 0;
  MFMailComposeResultSaved = 1;
  MFMailComposeResultSent = 2;
  MFMailComposeResultFailed = 3;
  MFMailComposeErrorCodeSaveFailed = 0;
  MFMailComposeErrorCodeSendFailed = 1;
  MessageComposeResultCancelled = 0;
  MessageComposeResultSent = 1;
  MessageComposeResultFailed = 2;

type

  // ===== Forward declarations =====
{$M+}
  MFMailComposeViewControllerDelegate = interface;
  MFMailComposeViewController = interface;
  MFMessageComposeViewControllerDelegate = interface;
  MFMessageComposeViewController = interface;

  // ===== Framework typedefs =====
{$M+}
  MFMailComposeResult = Cardinal;
  MFMailComposeErrorCode = Cardinal;
  MessageComposeResult = Cardinal;
  // ===== Interface declarations =====

  MFMailComposeViewControllerClass = interface(UINavigationControllerClass)
    ['{23041F7D-6F10-4351-BE7C-C606BF9A8165}']
    { class } function canSendMail: Boolean; cdecl;
  end;

  MFMailComposeViewController = interface(UINavigationController)
    ['{F4D14FF1-B13C-4BCE-A5BA-84F05CE11E94}']
    procedure setMailComposeDelegate(mailComposeDelegate: Pointer); cdecl;
    function mailComposeDelegate: Pointer; cdecl;
    procedure setSubject(subject: NSString); cdecl;
    procedure setToRecipients(toRecipients: NSArray); cdecl;
    procedure setCcRecipients(ccRecipients: NSArray); cdecl;
    procedure setBccRecipients(bccRecipients: NSArray); cdecl;
    procedure setMessageBody(body: NSString; isHTML: Boolean); cdecl;
    procedure addAttachmentData(attachment: NSData; mimeType: NSString;
      fileName: NSString); cdecl;
  end;

  TMFMailComposeViewController = class
    (TOCGenericImport<MFMailComposeViewControllerClass>)
  end;

  PMFMailComposeViewController = Pointer;

  MFMessageComposeViewControllerClass = interface(UINavigationControllerClass)
    ['{EDF3ABDC-3B86-4274-804F-2E7B38B9D3BF}']
    { class } function canSendText: Boolean; cdecl;
    { class } function canSendSubject: Boolean; cdecl;
    { class } function canSendAttachments: Boolean; cdecl;
    { class } function isSupportedAttachmentUTI(uti: NSString): Boolean; cdecl;
  end;

  MFMessageComposeViewController = interface(UINavigationController)
    ['{658B22D4-708A-4A95-B5F3-DB8B5C4943CF}']
    procedure setMessageComposeDelegate(messageComposeDelegate: Pointer); cdecl;
    function messageComposeDelegate: Pointer; cdecl;
    procedure disableUserAttachments; cdecl;
    procedure setRecipients(recipients: NSArray); cdecl;
    function recipients: NSArray; cdecl;
    procedure setBody(body: NSString); cdecl;
    function body: NSString; cdecl;
    procedure setSubject(subject: NSString); cdecl;
    function subject: NSString; cdecl;
    function attachments: NSArray; cdecl;
    function addAttachmentURL(attachmentURL: NSURL;
      withAlternateFilename: NSString): Boolean; cdecl;
    function addAttachmentData(attachmentData: NSData; typeIdentifier: NSString;
      fileName: NSString): Boolean; cdecl;
  end;

  TMFMessageComposeViewController = class
    (TOCGenericImport<MFMessageComposeViewControllerClass>)
  end;

  PMFMessageComposeViewController = Pointer;

  // ===== Protocol declarations =====

  MFMailComposeViewControllerDelegate = interface(IObjectiveC)
    ['{27703958-2E37-4491-8D21-CF7BD14DB724}']
    procedure mailComposeController(controller: MFMailComposeViewController;
      didFinishWithResult: MFMailComposeResult; error: NSError); cdecl;
  end;

  MFMessageComposeViewControllerDelegate = interface(IObjectiveC)
    ['{5B8114E8-DA1B-40FD-9D01-E81BC4B31978}']
    procedure messageComposeViewController(controller
      : MFMessageComposeViewController;
      didFinishWithResult: MessageComposeResult); cdecl;
  end;

  // ===== Exported string consts =====

function MFMailComposeErrorDomain: NSString;
function MFMessageComposeViewControllerAttachmentURL: NSString;
function MFMessageComposeViewControllerAttachmentAlternateFilename: NSString;
function MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
  : NSString;
function MFMessageComposeViewControllerTextMessageAvailabilityKey: NSString;


// ===== External functions =====

const
  libMessageUI = '/System/Library/Frameworks/MessageUI.framework/MessageUI';

implementation

{$IF defined(IOS) and NOT defined(CPUARM)}

uses
  Posix.Dlfcn;

var
  MessageUIModule: THandle;

{$ENDIF IOS}

function MFMailComposeErrorDomain: NSString;
begin
  Result := CocoaNSStringConst(libMessageUI, 'MFMailComposeErrorDomain');
end;

function MFMessageComposeViewControllerAttachmentURL: NSString;
begin
  Result := CocoaNSStringConst(libMessageUI,
    'MFMessageComposeViewControllerAttachmentURL');
end;

function MFMessageComposeViewControllerAttachmentAlternateFilename: NSString;
begin
  Result := CocoaNSStringConst(libMessageUI,
    'MFMessageComposeViewControllerAttachmentAlternateFilename');
end;

function MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
  : NSString;
begin
  Result := CocoaNSStringConst(libMessageUI,
    'MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification');
end;

function MFMessageComposeViewControllerTextMessageAvailabilityKey: NSString;
begin
  Result := CocoaNSStringConst(libMessageUI,
    'MFMessageComposeViewControllerTextMessageAvailabilityKey');
end;

{$IF defined(IOS) and NOT defined(CPUARM)}

initialization

MessageUIModule := dlopen(MarshaledAString(libMessageUI), RTLD_LAZY);

finalization

dlclose(MessageUIModule);
{$ENDIF IOS}

end.


Tive a ideia de olhar como é enviado email nativamente, então segui esse exemplo:
https://iostutorialjunction.com/2018/12/send-email-with-attachment-tutorial-in-ios-sdk-using-swift.html


Código:

@IBAction func sendEmail(_ sender: Any) {
 if MFMailComposeViewController.canSendMail() {
            let mailComposer = MFMailComposeViewController()
            mailComposer.setSubject("Update about ios tutorials")
            mailComposer.setMessageBody("What is the update about ios tutorials on youtube", isHTML: false)
            mailComposer.setToRecipients(["abc@test.com"])
            self.present(mailComposer, animated: true
                  , completion: nil)
           
        } else {
            print("Email is not configured in settings app or we are not able to send an email")
        }
}


Nas pasta de isntalação do delphi tem seguinte .pas
..\Embarcadero\Studio\22.0\source\rtl\ios
iOSapi.UIKit

Acredito que precise dessa unit para executar algum comando que tenha o mesmo feito do seguinte trecho:
Código:

 self.present(mailComposer, animated: true
                  , completion: nil)


Como executar o seguinte trecho só que em delphi?
Código:

@IBAction func sendEmail(_ sender: Any) {
 if MFMailComposeViewController.canSendMail() {
            let mailComposer = MFMailComposeViewController()
            mailComposer.setSubject("Update about ios tutorials")
            mailComposer.setMessageBody("What is the update about ios tutorials on youtube", isHTML: false)
            mailComposer.setToRecipients(["abc@test.com"])
            self.present(mailComposer, animated: true
                  , completion: nil)
           
        } else {
            print("Email is not configured in settings app or we are not able to send an email")
        }
}
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB