Escolar Documentos
Profissional Documentos
Cultura Documentos
Veja neste tutorial como sua aplicação Android desenvolvida com Delphi XE5 enviar e-
mail utilizando o recurso do próprio sistema operacional.
Quando podemos utilizar
Imagine que você tenha um aplicativo de força de vendas e necessite enviar um e-mail para um determinado cliente que conste no cadastro
de sua aplicação. Poder fazer isso apenas clicando sobre o cliente pode gerar um ganho de tempo significativo na atividade de seu usuário, é
exatamente isso que faremos nessa postagem.
Sempre Intent
Mais uma vez vamos nos comunicar diretamente com o Sistema Operacional Android, para fazê-lo a melhor maneira é fazendo uso de
Intents, volto a lembrar que caso não tenha lido ainda a postagem que já fiz sobre o assunto considero altamente recomendável a
leitura: INTENTS COM DELPHI XE5 COMUNICANDO APPS ATRAVÉS DO ANDROID.
Concebendo a aplicação
Abra o Delphi XE5 e inicie um Novo Projeto Mobile em Branco, como já fizemos inúmeras vezes aqui no blog. Construiremos uma
interface bem simples, inserindo no formulário principal da aplicação: 1 Button, 1 Edit e 1 Image. Como descrito abaixo alteraremos suas
propriedades:
Button1
o Align -> alBottom
o Text -> E-mail
Edit1
o Align -> alTop
o KeyboardTye -> vktEmailAddress
Image1
o Align -> alClient
o MultiResBitmap -> [selecione uma imagem de sua preferência]
o WrapMode -> iwStretch
Ao final do processo teremos uma tela bem parecida com a imagem abaixo.
Basicamente, ao clicar no Botão o usuário vai enviar um e-mail para o destinatário informado no Edit. Vamos aos códigos!
Implementando a funcionalidade
1implementation
3{$R *.fmx}
4uses
5FMX.Helpers.Android, Androidapi.Jni.GraphicsContentViewText,
2 var
Destinatario : string;
3
Intent : JIntent;
4
Destinatarios: TJavaObjectArray<JString>;
5
begin
6
if Edit1.Text <> EmptyStr then
7
begin
8 Destinatario := Edit1.Text;
9 Destinatarios := TJavaObjectArray<JString>.Create(1);
10
11 Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEND);
12 Destinatarios.Items[0] := StringToJString(Destinatario);
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, Destinatarios);
13
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString('E-mail de Teste'));
14
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('corpo do email'));
15
Intent.setType(StringToJString('plain/text'));
16
SharedActivity.startActivity(TJIntent.JavaClass.createChooser(Intent,
17
StrToJCharSequence('Qual aplicativo deseja usar?')));
18 end;
19
20end;
21
22
A Intent ACTION_SEND não necessita de uma URI, entretanto passamos para ela alguns EXTRAS, que funcionam como se fosse
parâmetros adicionais para o preenchimento de campos na Activity a ser chamada, vamos detalhá-los:
Adicionamos passamos também o tipo de texto a ser utilizado na intent através da linha: Intent.setType(StringToJString(‘plain/text’));
Destinatarios TJavaObjectArray<JString>;
Que declara um array de string‟s do nativas do Java (JString), que instanciado para conter uma única posição na linha: Destinatarios :=
TJavaObjectArray<JString>.Create(1); , para depois neste array inserirmos o destinatário de nosso e-mail, vide linha contendo o
código: Destinatarios.Items[0] := StringToJString(Destinatario);
Conferindo o Resultado
Relacionado
Adicionando eventos à agenda do Android com Delphi XE5
Em "Delphi"
Em "Delphi"
Em "Delphi"
AndroiddelphiDelphi XE5desenvolvimentoTutorial
Navegação do post
Post anteriorProjeto Android X Delphi XE5 DatasnapPróximo postAdicionando eventos à agenda do Android com Delphi XE5
Tudo bem, essa aplicação até funciona, mas não acrescenta muita coisa ao fato de que isso com o aap inventor da pra fazer tranquilo.
Agora a situação é:
mailto:
?subject=
&body=
agora! Esta bem complicado, sem dar tanta volta.
&attachment=
O ANEXO!
Consegue fazer isso incluindo por exemplo uma foto para envio por attachment.
Responder
1. Landerson Gomes
Olá Arley. Primeiramente bem vindo ao Blog! Fazendo uma breve leitura no blog perceberá que todo o conteúdo busca
sempre retratar soluções em Delphi, o que realmente pode não acrescentar muito a outras ferramentas, entre estas incluo o
APP Inventor que como você disse dá pra fazer tranquilo.
Talvez você possa pesquisar um pouco sobre como fazer no App Inventor o envio de e-mail com anexo.
Embora, não classifique o conteúdo aqui do blog como sendo sua melhor fonte de pesquisa para a referida ferramenta, já que
as experiências aqui relatadas, volto a repetir, são Delphi.
Talvez acrescente à sua busca, uma breve observada no Android Developers Reference procurando por
ACTION_SEND_MULTIPLE, esta é ação para o envio contendo anexo. Tente aí no APP INVENTOR, se tiver algo a meu
alcance em Delphi já sabe onde acessar, é só postar, faço questão de sempre que posso responder e interagir com os
comentários!
Responder
1. Arley
Sim, Claro! Eu concordo só fiz alusão ao fato que seria interessante no seu exemplo uma solução mais ampla sem
esquecer os pormenores do uso do que chamamos enviar email.
Acredito que acrescentaria mais interesse aos seus post e contribuiria mais a criar novas ideias do que reproduzir.
Também sou programador Delphi. E acredito que seu objetivo no seu blog e ajudar na fundamentação de novas ideias
sobre integrações programadas nas dois plataformas, por isso minha referência ao app inventor.
Gostei da matéria do post só fiz uma critica quanto ao complemento do assunto “enviando e-mail” que também abarca
anexar arquivos. rs!
E que já sendo tão simples como você acabou de explicar, teria sido interessante conter esse complemento.
Obrigado pelo retorno!
Responder
1. Landerson Gomes
Arley, vou tentar jogar um exemplo com anexo nos próximos dias, mas como citei o caminho é Através de
ACTION_SEND_MULTIPLE.
Na verdade no blog eu apenas relato partes do meu desenvolvimento que possa ser comum a dúvidas dos
demais, como tenho focado em aplicações mobile Andoird veio essa sequência de postagens, mas sempre
situações que já tenha utilizado em meus projetos no cotidiano.
De qualquer forma, reitero meu agradecimento por sua participação no blog, e como falei procuro sempre que
possível interagir com os leitores, e espero que possamos interagir em novas postagens quando as mesma
despertarem seu interesse.
Um cordial abraço!
Responder
2. Renan Kemp
Responder
3. Rafael
Como posso deixar apenas os clientes de email aparecendo na lista? Com esse exemplo aparece skype, google drive etc, mas gostaria
que aparecesse somente gmail, outlook etc
Responder
4. Eduardo
Tem como colocar um anexo? Quero gerar um arquivo Texto e já anexar no email. Tem como?
Responder
1. Landerson Gomes
Responder
5. Sara
Quando eu coloco para rodar no telefone aparece „Aplication does not support this device‟ o que eu faço ?
Responder
1. Landerson Gomes
Olá Sara! Bem vinda!!! Esta mensagem você está recebendo no exemplo utilizado no post do seu comentário? Se sim, qual
versão do Android do seu telefone, qual marca e modelo do aparelho? E principalmente, qual versão do Delphi você está
utilizando?
Responder
6. Eduardo
Tem como enviar um email sem a necessidade de abrir o gerenciador de email do android??
Responder
1. Landerson Gomes
Responder
7. Rodrigo
Responder
1. Landerson Gomes
Responder
8. Alexandre
Olá Landerson,
Eu estou usando Delphi XE8, porém ele não reconhece também a UNIT Androidapi.Helpers.
O nome dessa Unit mudou?
Responder
9. marcos roberto
vc tem alguem exemplo para mandar imprimir .. ?? e tambem mexendo em arquivos txt
Responder
1. Landerson Gomes
Olá Marcos, estive para tentar fazê-lo por diversas vezes… mas sempre chega um projetinho mais urgente que me tira da
linha.
10. Jefferson
Landerson, gostaria de enviar um e-mail com anexo em background sem usar o cliente de e-mail do android, como se fosse usar o
componente indy…
Responder
1. Landerson Gomes
Espero tê-lo ajudado, obrigado por sua participação e não deixe de postar um feedback!
Até mais!
Responder
Responder
1. Landerson Gomes
Responder
12. João G
janeiro 12, 2016 às 14:16
Responder
1. Landerson Gomes
Até a próxima.
Responder
13. Eduardo
Olá Landerson,
Gostei do post,mas tenho uma dúvida ? o que significa a última linha do código ?
Obrigado,
Responder
1. Landerson Gomes