Classe: TMailMessage
A classe TMailMessage representa uma mensagem de e-mail. Através da classe é possível obter todas informações sobre a mensagem carregada e realizar diversas operações como envio e recebimento de email.
A classe TMailMessage não possui hierarquia, no entanto é relacionada diretamente com a classe TMailManager para operações de envio e recebimento de e-mail.
AddAtthTag
Permite setar alguma informação especial quando é passado algum arquivo atachado para a mensagem que será enviada.
TMailMessage(): AddAtthTag ( < cTag> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cTag | Caracter | Indica os dados que se deseja informar no caso de um arquivo atachado. | X |
Exemplo:
AddAtthTag('Content-Disposition: attachment; filename=arquivo.txt')
Neste exemplo, adicionamos uma tag informando que é um attach e o nome do arquivo.
AttachFile
Adiciona (Attach) um arquivo ao objeto de e-mail.
TMailMessage(): AttachFile ( < cArq> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cArq | Caracter | Indica o nome do arquivo a ser adicionado no e-mail. | X |
Clear
Limpa o conteúdo do objeto. Desta forma, é possível receber várias mensagens no mesmo objeto, apenas limpando o seu conteúdo antes.
TMailMessage(): Clear ( ) -->
GetAttach
Permite obter o conteúdo do arquivo atachado e retornar esse conteúdo através de uma string.
TMailMessage(): GetAttach ( < cNumMsg> ) --> cRetorno
Nome | Tipo | Descrição | Obrigatório | Referência |
cNumMsg | Numérico | Indica o ID (número de identificação da mensagem) que se deseja obter informações. | X |
- (caracter)
- Retorna uma string (cadeia de caracteres) contendo o conteúdo do arquivo atachado na mensagem.
GetAttachCount
Informa quantidade de arquivos anexados a mensagem.
TMailMessage(): GetAttachCount ( ) --> nRetorno
- ()
- Retorna o número de anexos da mensagem.
GetAttachInfo
Apresenta todas as informações de um attachment em alguma mensagem.
TMailMessage(): GetAttachInfo ( < nMsg> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nMsg | Numérico | Indica o número da mensagem que deseja verificar. | X |
Ao informa o número da mensagem que se deseja verificar as informações referentes aos attachments, o método retornará as seguintes informações:
Nome | Descrição |
---|---|
ShortName | O nome do attachment. |
Type | O tipo do attachment, que pode ser, por exemplo, FILE e TEXT. |
Disposition | Tipo do arquivo. |
DispositionName | Informa o nome do tipo de arquivo. |
ID | Identificação do attachment. |
Location | Local físico do attachment. |
Load
Carrega uma mensagem salva em disco para o objeto de e-mail TMailMessage.
TMailMessage(): Load ( < cLoadFile> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cLoadFile | Caracter | Indica o arquivo no disco a partir do RootPath do servidor. | X |
Receive
Recebe uma nova mensagem do servidor populando o objeto da mensagem
TMailMessage(): Receive ( < oServer>, < nMsg> ) --> nRetorno
Nome | Tipo | Descrição | Obrigatório | Referência |
oServer | Objeto | Indica o objeto do servidor POP, criado através do objeto TMailManager. | X | |
nMsg | Numérico | Indica o número da mensagem que será criada, recebido através do método TMailManager:GetNumMsgs. | X |
- ()
- Retorna 0 (zero) quando o e-mail for recebido com sucesso; caso contrário, retorna outro valor.
Save
Salva uma mensagem de e-mail em disco.
TMailMessage(): Save ( < cFilePath> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cFilePath | Caracter | Indica o arquivo no disco a partir do RootPath do servidor. | X |
Ao criar uma instância da classe TMailMessage, é possível salvar a mensagem carregada ou criada em disco a partir do método Save. Com isso, todos os itens da mensagem são salvos, como Body e Subject.
Este método suporta dois padrões de mensagem:
- eml
- MIME - Version 1.0
SaveAttach
Salva um arquivo anexo a mensagem em disco.
TMailMessage(): SaveAttach ( < nIndex>, < cPath> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nIndex | Numérico | Índice do anexo iniciando em 1. | X | |
cPath | Caracter | Caminho com o nome do arquivo que será gravado. | X |
Example:
#include "rwmake.ch"
#include "ap5mail.ch"
Static Function SaveAttachExemplo()
Local oMessage
Local oPopServer
Local aAttInfo
Local cPopServer := "pop.totvs.com.br"
Local cAccount := "user"
Local cPwd := "pass"
Local nPortPop := 110
Local nPopResult := 0
Local nMessages := 0
Local nMessage := 0
Local lMessageDown := .F.
Local nCount := 0
Local nAtach := 0
Local nMessageDown := 0
oPopServer := TMailManager():New()
oPopServer:Init(cPopServer , "smpt.totvs.com.br", cAccount, cPwd, nPortPop)
If ( (nPopResult := oPopServer:PopConnect()) == 0)
//Conta quantas mensagens há no servidor
oPopServer:GetNumMsgs(@nMessages)
If( nMessages > 0 )
oMessage := TMailMessage():New()
//Verifica todas mensagens no servidor
For nMessage := 1 To nMessages
oMessage:Clear()
nPopResult := oMessage:Receive( oPopServer, nMessage)
If (nPopResult == 0 ) //Recebido com sucesso?
nCount := 0
lMessageDown := .F.
//Verifica todos anexos da mensagem e os salva
For nAtach := 1 to oMessage:getAttachCount()
aAttInfo:= oMessage:getAttachInfo(nAtach)
lSave := oMessage:SaveAttach(nAtach, "c:\arquivos\"+aAttInfo[1])
Next
EndIf
If lMessageDown
nMessageDown++
EndIf
Next
EndIf
oPopServer:PopDisconnect()
EndIf
Return
Veja Também
Send
Envia um e-mail, de acordo com os dados passados pelo objeto da classe TMailManager por parâmetro, para a função.
TMailMessage(): Send ( < oServer> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
oServer | Objeto | Indica o objeto da classe TMailManager para o envio da mensagem. | X |
Para utilizar a função corretamente, é necessário antes popular algumas das propriedades da classe TMailMessage básicas para o envio, tais como:
cFrom | E-mail de quem está enviando. |
cTo | E-mail(s) para o qual se deseja enviar a mensagem. |
cCc | E-mail(s) para o qual se deseja enviar a mensagem na seção "com cópia". |
cBcc | E-mail(s) para o qual se deseja enviar a mensagem na seção "com cópia oculta". |
cSubject | Assunto da mensagem que será enviada. |
cBody | Conteúdo da mensagem. |
Propriedade | Descrição | Tipo |
cBCC | Indica o(s) e-mail(s) para o qual se deseja enviar uma determinada mensagem. Os endereços estarão na seção 'Com Cópia Oculta' da mensagem.Exemplo: nome@domínio.com.br; nome@domínio.com.br | Caracter |
cBODY | Indica uma string que representa o conteúdo do e-mail para o qual se deseja enviar a determinada mensagem. | Caracter |
cCC | Indica o(s) e-mail(s) para o qual se deseja enviar uma determinada mensagem. Os endereços estarão na seção 'Com Cópia' da mensagem. Exemplo: nome@domínio.com.br; nome@domínio.com.br | Caracter |
cDate | Indica uma data que será colocada na mensagem. | Caracter |
cFROM | Indica o endereço de e-mail que será exibido na mensagem como tendo enviado a mesma.Exemplo: "TOTVS" | Caracter |
cMessageID | Indica o ID (identificador) único da mensagem de e-mail. | Caracter |
cNewsGroups | Indica o newsgroup ligado a mensagem de e-mail. | Caracter |
cReferences | Indica as referências da mensagem de e-mail. | Caracter |
cReplyTo | Indica o(s) endereço(s) da e-mail que será colocado como uma possível resposta para uma mensagem.Exemplo: nome@domínio.com.br; nome@domínio.com.br | Caracter |
cSubject | Indica o assunto da mensagem que será enviada. | Caracter |
cTo | Indica o(s) e-mail(s) para o qual deseja enviar uma determinada mensagem. Os endereços estarão na seção 'Para' da mensagem.Exemplo: nome@domínio.com.br; nome@domínio.com.br | Caracter |
cXMAILER | cXMAILER. | Caracter |
cXNEWSREADER | cXNEWSREADER. | Caracter |
cXREF | cXREF. | Caracter |
nXPRIORITY | Indica a prioridade da mensagem. | Numérico |
A classe TMailMessage possui todos atributos possíveis a uma mensagem de e-mail e podemos utilizar seus métodos para inserir arquivos, documentos e outras mensagens como anexo da mensagem atual.
//Exemplo 1
#include "TOTVS.CH"
user Function EMail()
Local oServer
Local oMessage
Local nNumMsg := 0
Local nTam := 0
Local nI := 0
//Cria a conexão com o server STMP ( Envio de e-mail )
oServer := TMailManager():New()
oServer:Init( "", "smtp.microsiga.com.br", "ricardo.reis", "rica4758", 0, 25 )
//seta um tempo de time out com servidor de 1min
If oServer:SetSmtpTimeOut( 60 ) != 0
Conout( "Falha ao setar o time out" )
Return .F.
EndIf
//realiza a conexão SMTP
If oServer:SmtpConnect() != 0
Conout( "Falha ao conectar" )
Return .F.
EndIf
//Apos a conexão, cria o objeto da mensagem
oMessage := TMailMessage():New()
//Limpa o objeto
oMessage:Clear()
//Popula com os dados de envio
oMessage:cFrom := "Microsiga "
oMessage:cTo := "[email protected];[email protected]"
oMessage:cCc := "[email protected]"
oMessage:cBcc := "[email protected]"
oMessage:cSubject := "Teste de Email"
oMessage:cBody := "Conteudo do e-mail"
//Adiciona um attach
If oMessage:AttachFile( "arquivo.txt" ) < 0
Conout( "Erro ao atachar o arquivo" )
Return .F.
Else
//adiciona uma tag informando que é um attach e o nome do arq
oMessage:AddAtthTag( 'Content-Disposition: attachment; filename=arquivo.txt')
EndIf
//Envia o e-mail
If oMessage:Send( oServer ) != 0
Conout( "Erro ao enviar o e-mail" )
Return .F.
EndIf
//Desconecta do servidor
If oServer:SmtpDisconnect() != 0
Conout( "Erro ao disconectar do servidor SMTP" )
Return .F.
EndIf
//Cria uma nova conexão, agora de POP
oServer := TMailManager():New()
oServer:Init( "pop3.microsiga.com.br", "", "SeunomeAntesDo@", "senhaDoEmail", 0, 110 )
If oServer:SetPopTimeOut( 60 ) != 0
Conout( "Falha ao setar o time out" )
Return .F.
EndIf
If oServer:PopConnect() != 0
Conout( "Falha ao conectar" )
Return .F.
EndIf
//Recebe o número de mensagens do servidor
oServer:GetNumMsgs( @nNumMsg )
nTam := nNumMsg
For nI := 1 To nTam
//Limpa o objeto da mensagem
oMessage:Clear()
//Recebe a mensagem do servidor
oMessage:Receive( oServer, nI )
//Escreve no server os dados do e-mail recebido
Conout( oMessage:cFrom )
Conout( oMessage:cTo )
Conout( oMessage:cCc )
Conout( oMessage:cSubject )
Conout( oMessage:cBody )
Next
//Deleta todas as mensagens do servidor
For nI := 1 To nTam
oServer:DeleteMsg( nI )
Next
//Desconecta do servidor POP
oServer:POPDisconnect()
Return .T.
//Exemplo 2
//Exemplo TMailMessage com Imagem
//Este exemplo de uso da classe tMailMessage, visa o uso e explicação de dois métodos da classe: SetConfirmRead() e AddAttHTag().
//SetConfirmRead() tem como objetivo, mandar uma solicitação de resposta de Leitura para a pessoa que receber o email, podendo ela optar por mandar ou não.
//AddAttHTag() tem como objetivo incluir tags no cabeçalho(header) da mensagem.Obs: este cabeçalho não é cabeçalho do corpo da mensagem.
//Neste exemplo da função usaremos uma tag para colocarmos a imagem no corpo do texto, após carregar a imagem, atribuimos um ID para ele, da seguinte forma: 'Content-ID: <ID_siga.jpg>'
//A parte em negrito significa o ID que atribuimos para a imagem, o que está entre as aspas deve ser seguido por padrão com o protocolo.
//Note que quando criamos o html que compõe a mensagem usamos esse ID: oMessage:cBody := 'Teste<br><img src='cid:ID_siga.jpg'>'
//Assim a imagem será carregada normalmente.
User Function EnvMail()
Local oMailServer := TMailManager():New()
Local oMessage := TMailMessage():New()
Local nErro := 0
oMailServer:Init( "", "smtp.microsiga.com.br", "", "", 0, 25 )
If( (nErro := oMailServer:SmtpConnect()) != 0 )
conout( "Não conectou.", oMailServer:GetErrorString( nErro ) )
Return
EndIf
oMessage:Clear()
oMessage:cFrom := "[email protected]"
//Altere
oMessage:cTo := "[email protected]"
//Altere
oMessage:cCc := ""
oMessage:cBcc := ""
oMessage:cSubject := "Teste de envio d e-mail"
oMessage:cBody := "Teste<br><img src='cid:ID_siga.jpg'>"
oMessage:MsgBodyType( "text/html" )
// Para solicitar confimação de envio
//oMessage:SetConfirmRead( .T. )
// Adiciona um anexo, nesse caso a imagem esta no root
oMessage:AttachFile( '\siga.jpg' )
// Essa tag, é a referecia para o arquivo ser mostrado no corpo, o nome declarado nela deve ser o usado no HTML
oMessage:AddAttHTag( 'Content-ID: <ID_siga.jpg>' )
If( (nErro := oMessage:Send( oMailServer )) != 0 )
conout( "Não enviou o e-mail.", oMailServer:GetErrorString( nErro ) )
Return
EndIf
If( (nErro := oMailServer:SmtpDisconnect()) != 0 )
conout( "Não desconectou.", oMailServer:GetErrorString( nErro ) )
Return
EndIf
Return