Você está na página 1de 11

Enviando e-mail no Android com Delphi XE5

agosto 14, 2014 Landerson Gomes 25 Comentários

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

Primeiramente vamos inserir na cláusula uses da seção implementation os seguintes Namespaces:

1implementation

3{$R *.fmx}

4uses

5FMX.Helpers.Android, Androidapi.Jni.GraphicsContentViewText,

6Androidapi.Jni.Net, Androidapi.Jni.JavaTypes, Androidapi.JNIBridge;

No evento OnClick do Button1 vamos inserir o código abaixo:

1 procedure TForm1.Button1Click(Sender: TObject);

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

Detalhando algumas linhas

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:

TJIntent.JavaClass.EXTRA_EMAIL –> destinatário do e-mail.


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

Adicionamos passamos também o tipo de texto a ser utilizado na intent através da linha: Intent.setType(StringToJString(‘plain/text’));

Notem na declaração de variáveis temos a linha:

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

Execute o projeto e confira o resultado!


Temos nossa aplicação Delphi XE5 enviando e-mail pelo próprio Android.
Até a próxima!

Relacionado
Adicionando eventos à agenda do Android com Delphi XE5

Em "Delphi"

Intents com Delphi XE5 comunicando Apps através do Android

Em "Delphi"

Leitura de Código de Barras em Android com Delphi XE5

Em "Delphi"

AndroiddelphiDelphi XE5desenvolvimentoTutorial

Navegação do post
Post anteriorProjeto Android X Delphi XE5 DatasnapPróximo postAdicionando eventos à agenda do Android com Delphi XE5

25 opiniões sobre “Enviando e-mail no Android com Delphi XE5”


1. Arley

agosto 20, 2014 às 12:31

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

agosto 20, 2014 às 14:23

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!

Abraço e mais uma vez seja bem vindo!

Responder

1. Arley

agosto 20, 2014 às 14:41

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

agosto 20, 2014 às 15:28

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

agosto 30, 2014 às 02:00

No Xe6 acrescentar Androidapi.Helpers na uses

Responder

3. 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

Responder

4. Eduardo

novembro 13, 2014 às 12:19

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

Responder

1. 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
faça a adaptação.
Vou tentar procurar, me recordo de já ter encontrado a solução com anexo porém não cheguei a codificá-la nem mesmo a
postá-la!

Pintando um tempo aqui eu compartilho!

Responder

5. Sara

novembro 14, 2014 às 22:25

Quando eu coloco para rodar no telefone aparece „Aplication does not support this device‟ o que eu faço ?

Responder

1. Landerson Gomes

novembro 15, 2014 às 08:31

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?

O e-mail que você utilizou para preencher é válido?

Fico no aguardo do seu feedback!

Responder

6. Eduardo

novembro 21, 2014 às 12:03

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

Responder

1. Landerson Gomes

novembro 22, 2014 às 10:24

Eduardo talvez seja possível utilizando ACTION_SENDTO, dê uma pesquisada nela!

Responder

7. Rodrigo

julho 24, 2015 às 11:08


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

Responder

1. Landerson Gomes

agosto 13, 2015 às 10:35

Olá Rodrigo bem vindo!


A partir do XE6 você passa a ter que declarar também a Androidapi.Helpers. Note que há um comentário do Renan Kemp
no próprio post sinalizando esse processo.

Espero que resolva aí.

Desde já agradeço sua participação e até uma próxima!

Responder

8. Alexandre

agosto 21, 2015 às 13:35

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

setembro 18, 2015 às 14:05

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

Responder

1. 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 não fiz mas está nos planos…


Assine aí o blog, saindo você receberá a notícia via e-mail.

Grande abraço e até a próxima!


Responder

10. 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.

Responder

1. Landerson Gomes

setembro 29, 2015 às 12:06

Olá Jefferson… bom tê-lo novamente!


Se vai usar Indy, não precisa da ACTION, ela só é usada na comunicação interna do Android.
Se vai de Indy é direto e reto como se faz no desktop.

Espero tê-lo ajudado, obrigado por sua participação e não deixe de postar um feedback!

Até mais!

Responder

11. JOAO LENO

dezembro 15, 2015 às 15:55

Como posso enviar esse email no formato HTML?

Responder

1. Landerson Gomes

janeiro 4, 2016 às 10:45

Olá João, desculpe-me pela demora…


Bem você precisa alterar o seu tipo: Intent.setType(“text/html”);
Feito isso no texto você passa seu html: Intent.putExtra(android.content.Intent.EXTRA_TEXT,[aqui seu html]);

Espero que ajude.


Obrigado por sua participação.

Responder

12. João G
janeiro 12, 2016 às 14:16

Como faço para adicionar anexos no email?

Responder

1. Landerson Gomes

fevereiro 10, 2016 às 10:04

Olá Jão, bem vindo!


Como vai notar nas respostas acima a utilização do recurso para enviar um anexo vai requer a utilização da
ACTION_SEND_MULTIPLE, seu anexo será passado pela EXTRA_STREAM.
Acredito que com essa breve adaptação no código você vai conseguir.

Desde já agradeço sua participação e peço desculpas pela demora.

Até a próxima.

Responder

13. Eduardo

março 15, 2016 às 14:28

Olá Landerson,
Gostei do post,mas tenho uma dúvida ? o que significa a última linha do código ?
Obrigado,

Responder

1. Landerson Gomes

março 15, 2016 às 18:13

Olá Eduardo, seja bem vindo!


Bem a linha a que se refere cria uma “caixa de diálogo” contendo os aplicativos capazes de realizar a Intent que passamos ao
Android.
Esse comando CreateChooser pode ser compreendido através do link:
https://developer.android.com/reference/android/content/Intent.html#createChooser(android.content.Intent,
java.lang.CharSequence, android.content.IntentSender).

Obrigado por sua presença e por sua participação!


Até a próxima!

Você também pode gostar