Classe tMailManager
A classe tMailManager realiza a comunicação com o servidor de e-mail. Ela permite a utilização dos seguintes protocolos:
SMTP - Simple Mail Transfer Protocol
É o protocolo de comunicação padrão para envio de e-mails através da internet. Através deste protocolo, é possível testar um servidor SMTP usando o programa Telnet. Sua porta TCP padrão é 25.SMTPS - Simple Mail Transfer Protocol with Secure Connection
Trata-se do protocolo padrão para envio de e-mails (SMTP), porém com conexão segura (SSL ou TLS) . Sua porta padrão é 465. O envio de e-mails também é suportado utilizando TLS, onde a aplicação inicia uma conexão não-segura, e o servidor de e-mails solicita o inicio de uma conversa segura a partir da instrução STARTTLS no protocolo. Para esta funcionalidade, a porta padrão é 587.POP - Post Office Protocol (POP3)
É um protocolo de comunicação utilizado no acesso remoto a uma caixa de correio eletrônico. Todas as mensagens existentes na caixa de correio são transferidas, sequencialmente, para o computador local. Sua porta padrão é 110.POPS - Post Office Protocol (POP3) with Secure Connection
Trata-se do protocolo POP, porém com conexão segura (SSL). Sua porta padrão é 995.IMAP - Internet Message Access Protocol
É um protocolo de comunicação utilizado para gerenciar o correio eletrônico superior em recursos ao POP. Neste caso, as mensagens ficam armazenadas no servidor de e-mail, sendo possível efetuar pesquisas por mensagens diretamente no servidor. (Esse tipo de conexão está disponível apenas para servidores Microsoft Windows). Sua porta padrão é 143.IMAPS - Internet Message Access Protocol with Secure Connection
Trata-se do protocolo IMAP, com conexão segura (SSL). Sua porta padrão é 993.MAPI - Messaging Application Programming Interface
É um sistema construído no Microsoft Windows que habilita diferentes aplicações de e-mail para trabalharem em conjunto na distribuição de e-mail. Uma vez que ambas aplicações suportam MAPI, elas podem compartilhar mensagens de e-mail entre si.
Construtores
Métodos
Observações
- O suporte ao protocolo SMTPS (SSL e/ou TLS) foi implementado a partir da build 7.00.090818P.
- O suporte aos protocolos POPS e IMAPS foram implementados a partir da build 7.00.101202A.
Exemplos
O código a seguir demonstra como utilizar a classe tMailManager:
// Este exemplo tem como objetivo principal documentar a classe tMailManager, com // foco nas funçoes que são usadas apenas por conexão IMAP. //----------------------------------------------------------------------------------- // Este exemplo irá fazer basicamente manipulação dos folders de uma conta de email, // através de uma conexão com o servidor IMAP. Ex: imap.microsiga.com.br //----------------------------------------------------------------------------------- #include "TOTVS.CH" User Function tstIMAP() Local aStPastas := {} Local sFolder := "TSTIMAP" Local sErro := "" Local lRet Private oMailManager oMailManager := tMailManager():New() //uso a função init para setar os dados. nErro := oMailManager:Init( "imap.microsiga.com.br", "" , "seuNomeAntesDo@", "senhadoemail" ) If nErro != 0 sErro := oMailManager:GetErrorString( nErro ) Conout( sErro ) Return .F. EndIf //realizo uma CONEXAO IMAP // Necessario configurar no arquivo .ini do server // [MAIL] // Protocol=IMAP nErro := oMailManager:IMAPConnect() If nErro != 0 sErro := oMailManager:GetErrorString( nErro ) Conout( sErro ) Return .F. EndIf //informo o server que iremos trabalhar com ID real da mensagem oMailManager:SetUseRealID( .T. ) //tento ir para o folder TSTIMAP If !oMailManager:ChangeFolder( sFolder ) //entra aqui pq o folder nao existe, entao crio ele //tento criar o folder no server IMAP If !oMailManager:CreateFolder( sFolder ) Conout( "Erro na criação do folder" ) lRet := .F. else //set o folder como assinado, para aparecer If !oMailManager:SetFolderSubscribe( sFolder, .T. ) Conout( "Erro na assinatura do folder" ) EndIf EndIf EndIf //pego os folders(pastas) existentes no servidor, incluido o TSTIMAP GetFolderList( @aStPastas ) varinfo( "PASTAS", aStPastas ) //Verificamos o folder corrente em uso sFolder := oMailManager:GetFolder() conout( "Folder Corrente" + sFolder ) If !oMailManager:DeleteFolder( sFolder ) conout( "nao foi possivel deletar a pasta" + sFolder ) EndIf oMailManager:IMAPDisconnect() return .T. Static function GetFolderList( aStPastas ) Local nI := 0, nTam := 0 Local aTemp := {} Local aFolder aTemp := oMailManager:GetFolderList() nTam := Len( aTemp ) For nI := 1 To nTam //crio um array temp {nome, nTotalMensagens, nMensagensNaoLidas, lAssinada} aFolder := {} aAdd( aFolder, aTemp[ nI ][1] ) aAdd( aFolder, aTemp[ nI ][3] ) aAdd( aFolder, aTemp[ nI ][5] ) aAdd( aFolder, .T. ) //adiciono no array de referencia do parametro aAdd( aStPastas, aFolder ) aFolder := NIL Next Return .T.
// Exemplo 2 // No exemplo abaixo , estabelecemos a conexão com um servidor SMTP , utilizando o // comando CONNECT SMTP, obtendo o resultado da conexão , e em caso de falha, obtemos // mais detalhes utilizando o comando GET MAIL ERROR . Caso a conexão seja realizada // com sucesso, um e-mail de teste é enviado, tendo também seu status de execução // recuperado e tratado convenientemente. //----------------------------------------------------------------------------------- #INCLUDE "Ap5Mail.ch" User Function tstSMTP() Local lOk // Conecta com o Servidor SMTP CONNECT SMTP SERVER "200.246.142.66" ; ACCOUNT "test" PASSWORD "test1234" ; RESULT lOk If lOk MsgStop( "Conexão OK" ) SEND MAIL FROM "[email protected]" ; TO "[email protected];[email protected]" ; SUBJECT "Teste de e-Mail" ; BODY "E-MAIL HTML de TESTE" ; RESULT lOk If lOk MsgStop( "Envio OK" ) Else GET MAIL ERROR cSmtpError MsgSTop( "Erro de envio : " + cSmtpError) Endif // Desconecta do Servidor DISCONNECT SMTP SERVER Else GET MAIL ERROR cSmtpError MsgStop( "Erro de conexão : " + cSmtpError) Endif Return
Abrangência
Advanced Protheus 6.09, Advanced Protheus 7.10, Microsiga Protheus 8.11, Protheus 10, TOTVS Application Server 10, ByYou Application Server