Árvore de páginas

Classe TMailManager

A classe TMailManager realiza a comunicação com o servidor de e-mail. Ela permite a utilização dos seguintes protocolos:
 

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. IMAPS - Internet Message Access Protocol with Secure Connection
    Trata-se do protocolo IMAP, com conexão segura (SSL). Sua porta padrão é 993.
  7. 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.
  • O uso desta classe deve ser observada em conjunto com a utilização dos métodos "SetUseSSL" e/ou "SetUseTLS" e das chaves pertencentes à seção "Mail" do Appserver.ini. O comportamento de seus métodos é fortemente influenciado pelas múltiplas combinações destes elementos. Os protocolos e versões de protocolos usados por cada porta disponibilizada pelo servidor de e-mail a ser acessado, devem ser checados para o correto uso das combinações dos elementos aqui citados, sob pena do não funcionamento do envio/recepção de e-mails. Deve-se observar também, se no servidor de e-mail a ser usado - seja para autenticação, seja para envio - existe algum tipo de restrição de segurança que precise ser configurado para uso automatizado (por exemplo, configurações que envolvam "CAPTCHA" -  "Completely Automated Public Turing test to tell Computers and Humans Apart" , dentre outros flags de segurança que inibam a autenticação, conexão ou envio).
  • Para uso desta classe com o GMAIL favor consultar a documentação: Application Server - Uso de e-mail com GMail

Exemplos

O código a seguir demonstra como utilizar a classe TMailManager:

Exemplo 1
// 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.


Veja também


  • Sem rótulos