![]() |
Essa matéria se propõem a analisar o método de envio de email com anexo adicionado, seja através de um caminho fixo do servidor, ou então a partir de uma variável blob. Esta variável, poderá por exemplo, vir de um atributo blob presente em alguma transação.
Trata-se de uma continuidade as tantas postagens a respeito deste assunto nos blogs da comunidade Genexus. Antes de continuar, sugiro uma leitura do post Genexus Mail, do excelente blog Genexando.
|
Para realizar este exemplo de envio de email, utilizarei 3 objetos Genexus: uma transação contendo os parâmetros de conexão com o host; uma web panel contendo três variáveis; e uma procedure.
Criação da Transação de Parâmetros
Geralmente quando iniciamos um projeto a transação de parâmetros estará presente na especificação do analista. É nesta transação que os dados de configurações do sistema serão registrados, e dentre estes registros possuímos os dados de conexão com o host smtp, responsável pelo envio de email através da aplicação.
Logo, nossa transação terá a seguinte estrutura:
Criação da Web Panel
Esta Web Panel criada não é essencial para o nosso exemplo, é apenas para demonstrar que poderemos passar o conteúdo deste email como parâmetro através de variáveis presentes em tela.
Então, apenas como exemplificação disto, adicionei na Form deste objeto três variáveis, além de outra que irei utilizar nos Eventos:
- (form) Assunto: VarChar(120);
- (form) Anexo: Blob;
- (form) TextoHTML: LongVarChar(2M);
- (eventos) SourceAnexo: VarChar(400);
Dessa forma, o usuário poderá determinar o Assunto e o Conteúdo da mensagem de email, além de anexar um documento. Ao clicar sobre o botão, o seguinte evento de usuário será executado:
Event Enter
//=====Captura o endereço gerado do documento anexado=====
&SourceAnexo = &Anexo.ToString()
//=====Chama Procedure de Envio de Email=====
EnviaEmail.Call(&Assunto,&TextoHTML,&SourceAnexo)
EndEvent
//=====Captura o endereço gerado do documento anexado=====
&SourceAnexo = &Anexo.ToString()
//=====Chama Procedure de Envio de Email=====
EnviaEmail.Call(&Assunto,&TextoHTML,&SourceAnexo)
EndEvent
Criação da Procedure de Envio de Email
Por fim, precisamos programar a procedure que realizará o envio do email. Como este objeto não irá realizar gravação no banco de dados, podemos configurar a sua propriedade commit on exit, como "no".
Nesta procedure iremos receber os seguintes parâmetros (Rules):
parm(in:&Assunto,in:&TextoHTML,in:&SourceAnexo);
Estas variáveis recebidas possuem o mesmo DataType determinado na Web Panel anteriormente especificada.
Agora só nos falta programar os eventos, estes serão:
//=====Captura Dados de Conexão da Transação Parametros=====
for each
defined by ParametroId
//=====Host SMTP exemplo: smtp.live.com(outlook.com);
//smtp.gmail.com(gmail.com)=====
&SMTPSession.Host = ParametroServidorSMTP.Trim()
//=====Autenticação: 1 (requer usuário e senha)=====
&SMTPSession.Authentication = ParametroAuthentication
//=====Dados de Login: Usuário e Senha=====
&SMTPSession.UserName = ParametroUserName.Trim()
&SMTPSession.Password = ParametroPassword.Trim()
//=====Remetente: Email e Nome=====
&SMTPSession.Sender.Address = ParametroSenderAdress.Trim()
&SMTPSession.Sender.Name = ParametroSenderName.Trim()
endfor
//=====Efetua o Login=====
&SMTPSession.Login()
//=====Verifica se ocorreu algum erro=====
if &SMTPSession.ErrCode <> 0
msg(&SMTPSession.ErrDescription)
else
//=====Insere o texto da mensagem=====
&MailMessage.HTMLText = &TextoHTML
//=====Insere o assunto da mensagem=====
&MailMessage.Subject = &Assunto
//=====Adiciona 1º Destinatário de email=====
&MailRecipient.Address = 'cicrano@hotmail.com'
&MailRecipient.Name = 'Cicrano'
&MailMessage.To.Add(&MailRecipient)
//=====Adiciona 2º Destinatário de email=====
&MailRecipient.Address = 'beltrano@outlook.com'
&MailRecipient.Name = 'Beltrano'
&MailMessage.To.Add(&MailRecipient)
//=====Adiciona email como Copia=====
&MailRecipient.Address = 'fulano@gmail.com'
&MailRecipient.Name = 'Fulano'
&MailMessage.CC.Add(&MailRecipient)
//=====Adiciona email como Copia Oculta=====
&MailRecipient.Address = 'genexus@outlook.com'
&MailRecipient.Name = 'Genexus'
&MailMessage.BCC.Add(&MailRecipient)
//=====Adiciona Anexo a partir de um caminho do servidor=====
&MailMessage.Attachments.Add('C:\Temp\VendaDiaria_20121217.csv')
//=====Adiciona Anexo a partir de uma variável Blob=====
if not &SourceAnexo.IsEmpty()
&MailMessage.Attachments.Add(&SourceAnexo)
endif
//=====Envia Email=====
&SMTPSession.Send(&MailMessage)
//=====Verifica se ocorreu erro=====
if &SMTPSession.ErrCode <> 0
msg(&SMTPSession.ErrDescription)
else
msg('Email enviado com sucesso!')
endif
endif
for each
defined by ParametroId
//=====Host SMTP exemplo: smtp.live.com(outlook.com);
//smtp.gmail.com(gmail.com)=====
&SMTPSession.Host = ParametroServidorSMTP.Trim()
//=====Autenticação: 1 (requer usuário e senha)=====
&SMTPSession.Authentication = ParametroAuthentication
//=====Dados de Login: Usuário e Senha=====
&SMTPSession.UserName = ParametroUserName.Trim()
&SMTPSession.Password = ParametroPassword.Trim()
//=====Remetente: Email e Nome=====
&SMTPSession.Sender.Address = ParametroSenderAdress.Trim()
&SMTPSession.Sender.Name = ParametroSenderName.Trim()
endfor
//=====Efetua o Login=====
&SMTPSession.Login()
//=====Verifica se ocorreu algum erro=====
if &SMTPSession.ErrCode <> 0
msg(&SMTPSession.ErrDescription)
else
//=====Insere o texto da mensagem=====
&MailMessage.HTMLText = &TextoHTML
//=====Insere o assunto da mensagem=====
&MailMessage.Subject = &Assunto
//=====Adiciona 1º Destinatário de email=====
&MailRecipient.Address = 'cicrano@hotmail.com'
&MailRecipient.Name = 'Cicrano'
&MailMessage.To.Add(&MailRecipient)
//=====Adiciona 2º Destinatário de email=====
&MailRecipient.Address = 'beltrano@outlook.com'
&MailRecipient.Name = 'Beltrano'
&MailMessage.To.Add(&MailRecipient)
//=====Adiciona email como Copia=====
&MailRecipient.Address = 'fulano@gmail.com'
&MailRecipient.Name = 'Fulano'
&MailMessage.CC.Add(&MailRecipient)
//=====Adiciona email como Copia Oculta=====
&MailRecipient.Address = 'genexus@outlook.com'
&MailRecipient.Name = 'Genexus'
&MailMessage.BCC.Add(&MailRecipient)
//=====Adiciona Anexo a partir de um caminho do servidor=====
&MailMessage.Attachments.Add('C:\Temp\VendaDiaria_20121217.csv')
//=====Adiciona Anexo a partir de uma variável Blob=====
if not &SourceAnexo.IsEmpty()
&MailMessage.Attachments.Add(&SourceAnexo)
endif
//=====Envia Email=====
&SMTPSession.Send(&MailMessage)
//=====Verifica se ocorreu erro=====
if &SMTPSession.ErrCode <> 0
msg(&SMTPSession.ErrDescription)
else
msg('Email enviado com sucesso!')
endif
endif
Observações
Duas observações a respeito deste código, o nome das variáveis são iguais aos seus tipos de dados. Por padrão a porta utilizada para o envio de email é a 25, normalmente utilizada pelos servidores SMTP. Caso seja necessário alterar esta porta, será preciso incluir o seguinte código antes de realizar o Login:
&SMTPSession.Port = 465
Pessoal, qualquer dúvida, incremento ou correção enviem através dos comentários ou pelo email genexus@outlook.com. Abraço.










