Sie sind auf Seite 1von 10

27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

Landerson Gomes

DELPHI

ENVIANDO E-MAIL NO ANDROID COM


DELPHI XE5
AGOSTO 14, 2014 | LANDERSON GOMES | 19 COMENTRIOS

Compartilhe

Veja neste tutorial como sua aplicao Android desenvolvida


com Delphi XE5 enviar e-mail utilizando o recurso doprprio
sistema operacional.

Quando podemos utilizar


Imagine que voc tenha um aplicativo de fora de vendas e necessite enviar um e-mail para um
determinado cliente que conste no cadastro de sua aplicao. Poder fazer isso apenas clicando
http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 1/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

sobre o cliente pode gerar um ganho de tempo significativo na atividade de seu usurio,
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 no tenha lido ainda a
postagem que j fiz sobre o assunto considero altamente recomendvel a leitura:INTENTS COM
DELPHI XE5 COMUNICANDO APPS ATRAVS DO ANDROID.

Concebendo a aplicao
Abra o Delphi XE5 e inicie um Novo Projeto Mobile em Branco, como j fizemos inmeras vezes
aqui no blog. Construiremos uma interface bem simples, inserindo no formulrio principal da
aplicao: 1 Button, 1 Edit e 1 Image. Como descrito abaixo alteraremos suas propriedades:

Button1
Align -> alBottom
Text -> E-mail
Edit1
Align -> alTop
KeyboardTye ->vktEmailAddress
Image1
Align -> alClient
MultiResBitmap -> [selecione uma imagem de sua preferncia]
WrapMode ->iwStretch

Ao final do processo teremos uma tela bem parecida com a imagem abaixo.

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 2/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

Basicamente, ao clicar no Boto o usurio vai enviar um e-mail para o destinatrio informado no
Edit. Vamos aos cdigos!

Implementando a funcionalidade
Primeiramente vamos inserir na clusula uses da seo implementation os seguintes
Namespaces:

1 implementation
2
3 {$R*.fmx}
4 uses
5 FMX.Helpers.Android,Androidapi.Jni.GraphicsContentViewText,
6 Androidapi.Jni.Net,Androidapi.Jni.JavaTypes,Androidapi.JNIBridge;

No evento OnClick do Button1 vamos inserir o cdigo abaixo:

1 procedureTForm1.Button1Click(Sender:TObject);
2 var
3 Destinatario:string;
4 Intent:JIntent;
5 Destinatarios:TJavaObjectArray<JString>;
6 begin
7 ifEdit1.Text<>EmptyStrthen
8 begin
9 Destinatario:=Edit1.Text;
10 Destinatarios:=TJavaObjectArray<JString>.Create(1);
11
12 Intent:=TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEN
13 Destinatarios.Items[0]:=StringToJString(Destinatario);
14 Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL,Destinatarios);
15 Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT,StringToJStri
16 Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT,StringToJString(
17 Intent.setType(StringToJString('plain/text'));
18 SharedActivity.startActivity(TJIntent.JavaClass.createChooser(I
19 StrToJCharSequence('Qualaplicativodesejausar?'))); 3/10
http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

19 StrToJCharSequence('Qualaplicativodesejausar?')));
20 end;
21
22 end;

Detalhando algumas linhas


A Intent ACTION_SEND no necessita de uma URI, entretanto passamos para ela alguns EXTRAS,
que funcionam como se fosse parmetros adicionais para o preenchimento de campos na Activity
a ser chamada, vamos detalh-los:

TJIntent.JavaClass.EXTRA_EMAIL >destinatrio do e-mail.


TJIntent.JavaClass.EXTRA_SUBJECT > assunto do e-mail.
TJIntent.JavaClass.EXTRA_TEXT > corpo do e-mail.

Adicionamos passamos tambm o tipo de texto a ser utilizado na intent atravs da


linha:Intent.setType(StringToJString(plain/text));

Notem na declarao de variveis temos a linha:

Destinatarios TJavaObjectArray<JString>;

Que declara um array de strings do nativas doJava (JString), que instanciado para conter uma
nica posio na linha: Destinatarios := TJavaObjectArray<JString>.Create(1);, para depois neste
array inserirmos o destinatrio de nosso e-mail, vide linha contendo o
cdigo:Destinatarios.Items[0] := StringToJString(Destinatario);

Conferindo o Resultado
Execute o projeto e confira o resultado!

Temos nossa aplicao Delphi XE5 enviando e-mail pelo prprio Android.
At a prxima!

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 4/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

Relacionado:

Adicionando eventos agenda do Intents com Delphi XE5 Leitura de Cdigo de Barras em
Android com Delphi XE5 comunicando Apps atravs do Android com Delphi XE5
Em "Delphi" Android Em "Delphi"
Em "Delphi"

ANDROID DELPHI DELPHI XE5 DESENVOLVIMENTO TUTORIAL

19 OPINIES SOBRE ENVIANDO E-MAIL NO ANDROID COM DELPHI XE5

Arley
AGOSTO 20, 2014 S 12:31

Tudo bem, essa aplicao at funciona, mas no acrescenta muita coisa ao fato de que isso
com o aap inventor da pra fazer tranquilo.
Agora a situao :
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.

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 5/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

Landerson Gomes
AGOSTO 20, 2014 S 14:23

Ol Arley. Primeiramente bem vindo ao Blog! Fazendo uma breve leitura no blog
perceber que todo o contedo busca sempre retratar solues em Delphi, o que
realmente pode no 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, no classifique o contedo aqui do blog como sendo sua melhor fonte de pesquisa
para a referida ferramenta, j que as experincias aqui relatadas, volto a repetir, so
Delphi.
Talvez acrescente sua busca, uma breve observada no Android Developers Reference
procurando por ACTION_SEND_MULTIPLE, esta ao para o envio contendo anexo.
Tente a no APP INVENTOR, se tiver algo a meu alcance em Delphi j sabe onde acessar,
s postar, fao questo de sempre que posso responder e interagir com os comentrios!

Abrao e mais uma vez seja bem vindo!

Arley
AGOSTO 20, 2014 S 14:41

Sim, Claro! Eu concordo s fiz aluso ao fato que seria interessante no seu exemplo uma
soluo 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.

Tambm sou programador Delphi. E acredito que seu objetivo no seu blog e ajudar na
fundamentao de novas ideias sobre integraes programadas nas dois plataformas,
por isso minha referncia ao app inventor.

Gostei da matria do post s fiz uma critica quanto ao complemento do assunto


enviando e-mail que tambm abarca anexar arquivos. rs!
E que j sendo to simples como voc acabou de explicar, teria sido interessante conter
esse complemento.

Obrigado pelo retorno!

Landerson Gomes

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 6/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

AGOSTO 20, 2014 S 15:28

Arley, vou tentar jogar um exemplo com anexo nos prximos dias, mas como citei o
caminho Atravs de ACTION_SEND_MULTIPLE.
Na verdade no blog eu apenas relato partes do meu desenvolvimento que possa ser
comum a dvidas dos demais, como tenho focado em aplicaes mobile Andoird veio
essa sequncia de postagens, mas sempre situaes que j tenha utilizado em meus
projetos no cotidiano.
De qualquer forma, reitero meu agradecimento por sua participao no blog, e como
falei procuro sempre que possvel interagir com os leitores, e espero que possamos
interagir em novas postagens quando as mesma despertarem seu interesse.
Um cordial abrao!

Renan Kemp
AGOSTO 30, 2014 S 02:00

No Xe6 acrescentar Androidapi.Helpers na uses

Rafael
SETEMBRO 26, 2014 S 23:07

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

Eduardo
NOVEMBRO 13, 2014 S 12:19

Tem como colocar um anexo? Quero gerar um arquivo Texto e j anexar no email. Tem
como?

Landerson Gomes
NOVEMBRO 14, 2014 S 18:34

Ol Eduardo requer um pouco mais de estudo, mas tem como sim! De uma pesquisada em
SEND_MULTIPLE do Android e faa a adaptao.
Vou tentar procurar, me recordo de j ter encontrado a soluo com anexo porm no
cheguei a codific-la nem mesmo a post-la!

Pintando um tempo aqui eu compartilho!

Sara

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 7/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

NOVEMBRO 14, 2014 S 22:25

Quando eu coloco para rodar no telefone aparece Aplication does not support this device o
que eu fao ?

Landerson Gomes
NOVEMBRO 15, 2014 S 08:31

Ol Sara! Bem vinda!!! Esta mensagem voc est recebendo no exemplo utilizado no post
do seu comentrio? Se sim, qual verso do Android do seu telefone, qual marca e modelo
do aparelho? E principalmente, qual verso do Delphi voc est utilizando?

O e-mail que voc utilizou para preencher vlido?

Fico no aguardo do seu feedback!

Eduardo
NOVEMBRO 21, 2014 S 12:03

Tem como enviar um email sem a necessidade de abrir o gerenciador de email do android??

Landerson Gomes
NOVEMBRO 22, 2014 S 10:24

Eduardo talvez seja possvel utilizando ACTION_SENDTO, d uma pesquisada nela!

Rodrigo
JULHO 24, 2015 S 11:08

Ol!
Pessoal, estou usando XE8 e ao utilizar o cdigo acima, recebo msg de no declarado para
SharedActivity.startActivity e para StringToJString.
J adicionei todas as units citadas acima e o problema continua. podem me ajudar? Obrigado

Landerson Gomes
AGOSTO 13, 2015 S 10:35

Ol Rodrigo bem vindo!


A partir do XE6 voc passa a ter que declarar tambm a Androidapi.Helpers. Note que h
um comentrio do Renan Kemp no prprio post sinalizando esse processo.

Espero que resolva a.

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 8/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

Desde j agradeo sua participao e at uma prxima!

Alexandre
AGOSTO 21, 2015 S 13:35

Ol Landerson,

Eu estou usando Delphi XE8, porm ele no reconhece tambm a UNIT Androidapi.Helpers.
O nome dessa Unit mudou?

marcos roberto
SETEMBRO 18, 2015 S 14:05

vc tem alguem exemplo para mandar imprimir .. ?? e tambem mexendo em arquivos txt

Landerson Gomes
SETEMBRO 29, 2015 S 12:34

Ol Marcos, estive para tentar faz-lo por diversas vezes mas sempre chega um
projetinho mais urgente que me tira da linha.

Ainda no fiz mas est nos planos


Assine a o blog, saindo voc receber a notcia via e-mail.

Grande abrao e at a prxima!

Jefferson
SETEMBRO 21, 2015 S 13:30

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

pesquisei sobre o ACTION_SENDTO mas nao consegui chegar num codigo.

Landerson Gomes
SETEMBRO 29, 2015 S 12:06

Ol Jefferson bom t-lo novamente!


Se vai usar Indy, no precisa da ACTION, ela s usada na comunicao interna do
Android.
Se vai de Indy direto e reto como se faz no desktop.

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 9/10
27/11/2015 EnviandoemailnoAndroidcomDelphiXE|LandersonGomes

Espero t-lo ajudado, obrigado por sua participao e no deixe de postar um feedback!

At mais!

http://vivaitaocara.com.br/landersongomes/embarcadero/delphi/enviandoemailnoandroidcomdelphixe5 10/10

Das könnte Ihnen auch gefallen