Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/327912/newLayout.css
Portuguese

XMailManager

...

Classe:

...

tSktSslSrv

Permite o gerenciamento de conexões TCP seguras (SSL).


Hierarquia


 

A classe não possui hierarquia.



Construtores



New

...

Cria uma instância da classe

...

tSktSslSrv.

...


Sintaxe

...



tSktSslSrv():New(

...

  • Retorna uma nova instância do objeto da classe TMailManager.

 
Observações
 
 
Métodos
ChangeFolder

ChangeFolder

Permite trocar de pasta, no servidor IMAP - Internet Message Access Protocol, informando uma nova pasta.

 
Sintaxe
TMailManager(): ChangeFolder ( < cFolder> ) --> lReturn
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cFolder

Caracter

Indica o nome da pasta desejada no servidor.

X

 

 
Retorno
lReturn
(lógico)

  • Retorna verdadeiro (.T.), se a pasta informada for válida (existir) para realizar a troca de pasta; caso contrário, retorna falso (.F.).

 
Observações
 
CopyMsg

CopyMsg

Copia uma mensagem da pasta corrente, do servidor IMAP - Internet Message Access Protocol, para outra pasta ou a mesma.

< nSSL2 >, < nSSL3 >, < nTLS1 >, < cPassPhase >, < cCertificate >, < cKey >,

    < cCertificate2 >, < cKey2 >, < nHSM >, < nBugs >, < nState >, < nCacheSize >, < nVerbose >, < cModule >) --> oRet

Parâmetros





Nome

Tipo

Descrição

Obrigatório

Referência

nSSL2

Numérico

0 (zero) indica desabilitado, senão habilitado

X


nSSL3

Numérico

0 (zero) indica desabilitado, senão habilitado

X


nTLS1

Numérico

0 (zero), 1, 2, ou 3. Ver quadro TLS1 

X


cPassPhase

Caracter

Senha

X


cCertificate

Caracter

arquivo de certificado

X


cKey

Caracter

arquivo de chave

X


cCertificate2

Caracter

arquivo de certificado secundário



cKey2

Caracter

arquivo de chave secundário



nHSM

Numérico

0 (zero) indica desabilitado, senão habilitado



nBugs

Numérico

0 (zero) indica desabilitado, senão habilitado



nState

Numérico

0 (zero) indica desabilitado, senão habilitado



nCacheSize

Numérico

Define o tamanho do cache interno



nVerbose

Numérico

0 (zero) indica desabilitado, senão habilitado



cModule

Caracter

Indica o módulo Criptoki



Retorno

...


 

Nome

Tipo

Descrição

...

Obrigatório

...

Referência

...

nMsg

...

Numérico

...

Indica o valor numérico ou ID (identificação) da mensagem no servidor de e-mail IMAP.

...

X

...

 

...

cPasta

...

Caracter

...

Indica o nome da pasta, do servidor de e-mail IMAP, para a qual a mensagem será transferida.

...

X

...

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.) se realizar a copia da mensagem para a pasta informada; caso contrário, retornará falso (.F.).

 
Observações
 
CreateFolder

CreateFolder

Cria uma nova pasta de mensagens no servidor de e-mails IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): CreateFolder ( < cFolder> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cFolder

Caracter

Indica o nome da pasta que será criada. Observação: Caso seja uma subpasta, informe a hierarquia das pastas.

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.) se a pasta for criada com sucesso no servidor; caso contrário, retornará falso (.F.).

 
Observações
 
DeleteFolder

DeleteFolder

Exclui uma pasta do servidor IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): DeleteFolder ( < cPasta> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cPasta

Caracter

Indica o nome da pasta que será excluída.

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.) se a pasta for excluída com sucesso; caso contrário, retornará falso (.F.).

 
Observações
 
DeleteMsg

DeleteMsg

Exclui uma mensagem do servidor de e-mail.

 
Sintaxe
TMailManager(): DeleteMsg ( < nMsg> ) --> nReturn
 
Parâmetros
 

oRet

Objeto

Cria um objeto da Classe Server Socket SSL (Servidor SSL)

Quadro TLS1

Valores válidos para TLS1

Valor

Descrição

0 (default)Desabilita
1TLS 1.0
2TLS 1.0 e TLS 1.1
3TLS 1.0, TLS 1.1, e TLS 1.2

Observações

Ver Seção [SSLConfigure] para as definições.

Exemplo


 

  Local SSL2 := 1

  Local SSL3 := 1

  Local TLS1 := 3

  Local PassPhrase := "senha"

  Local cert1 := ""

  Local key1 := ""

  Local cert2 := ""

  Local key2 := ""

  Local HSM := 0

  Local Bugs := 0

  Local State := 0

  Local CacheSize := 0

  Local Verbose := 0

  Local Module := ""


  cert1 := "..\..\Users\ricardo.clima\compartilhado\ssl_keys_teste\rsa_privkey_self_cert.crt"

  key1 := "..\..\Users\ricardo.clima\compartilhado\ssl_keys_teste\rsa_privkey.pem"


  oSockSrv := tSktSslSrv():New(SSL2, SSL3, TLS1, PassPhrase, cert1, key1,

    cert2, key2, HSM, Bugs, State, CacheSize, Verbose, Module)



Métodos



StartTcp

Faz o bind e o listen em uma porta específica do servidor e verifica os certificados e configurações da conexão SSL.


Sintaxe



TSktSslSrv():StartTcp ( < nPort >, < cServerName > ) --> lRet

Parâmetros



Nome

...

Tipo

Descrição

Obrigatório

Referência

...

nPort

Numérico

...

Indica o número da mensagem que será excluída.

...

X

...

 

 
Retorno
nReturn
(numérico)

  • Retorna 0 (zero), se encontrar e excluir a mensagem; caso contrário, retornará o código do erro ocorrido.

 
Observações
 
 
Exemplos
#INCLUDE "TOTVS.CH"
#DEFINE EMAIL_ACCOUNT           'p10teste'
#DEFINE EMAIL_PASSWORD          '123'
#DEFINE EMAIL_POPSERVER         'pop3.provedor.com.br'
#DEFINE EMAIL_SMTPSERVER        'smtp.provedor.com.br'

User Function mail004()
Local oMail := tMailManager():NEW()
Local nRet := 0
Local nNumMsg := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:PopConnect()
If nRet == 0
    conout("Open Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:GetNumMsgs(@nNumMsg)
If nRet == 0
    conout("Count Successful")
    conout(nNumMsg)
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
If nNumMsg > 0
    nRet := oMail:DeleteMsg( 1 )
    If nRet == 0
        conout("Delete Successful")
        conout(nNumMsg)
    Else
        conout(nret)
        conout(oMail:GetErrorString(nret))
    Endif
Else
    conout("não há mensagens para deletar")
Endif
oMail:PopDisConnect()
Return
EndGetAllMsgHeader

EndGetAllMsgHeader

Obtém o cabeçalho de todas as mensagens existentes no servidor IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): EndGetAllMsgHeader ( < @aCabecalho> ) --> lRet
 
Parâmetros
 

Porta de conexão

X


cServerName

Caracter

Identificação do servidor de conexão



Retorno


 

Nome

Tipo

Descrição

lRet

Lógico

Retorna verdadeiro (.T) se conseguiu fazer o bind, o listen na porta e verificar as configurações da

conexão SSL, e falso (.F.) se não conseguir estabelecer uma conexão na porta

Observações


 


Exemplo


 

lRet = oSockSrv:StartTcp(nPort)




Accept

Faz a aceitação de uma conexão SSL.


Sintaxe



TSktSslSrv():Accept ( < nTimeOut > ) --> oObjConn

Parâmetros



Nome

Tipo

Descrição

Obrigatório

Referência

nTimeOut

Numérico

Timeout de aguarde de aceitação em segundos

X


Retorno


 

Nome

Tipo

Descrição

oObjConn

Objeto

Se conseguiu aceiar uma conexão retorna um objeto do tipo “tSktSslConn” e em caso de falha

retorna nulo (NIL)

Observações


 

Se nTimeOut  for 0 (zero) fica aguardando indefinidamente até aceitar uma conexão.

Se houver algum erro, ou se houver timeout de aceitação de uma conexão, será retornado nulo (NIL).

Exemplo


 

    …

    oObjConn := oSockSrv:Accept( 0 )


    If oObjConn = NIL

      nErrCode := oSockSrv:GetError(@cErrMsg)

      conout(time() + " " + "[ERR] ACCEPT FAILED ("+AllTrim(str(nErrCode))+":"+cErrMsg+")")

      loop

    Endif




GetError

Obtém o erro gerado no Servidor.


Sintaxe



TSktSslSrv():GetError ( < cMsgErr > ) --> nRet

Parâmetros



Nome

Tipo

Descrição

Obrigatório

Referência

...

cMsgErr

...

Vetor

...

Caracter

Contém a mensagem de erro

X

...

Retorno


 

...

Nome

...

Tipo

...

  • Retorna verdadeiro (.T.) quando o servidor IMAP terminar o envio do cabeçalho da mensagem; caso contrário, retornará falso (.F.).

 
Observações
 
 
Exemplos
User Function GetMessages()
Local oMailManager := Nil
Local oMessage := Nil
Local nError := 0
Local aHeaders := {}
oMailManager := tMailManager():New()
oMailManager:Init("apolo.sp01.local", "", "user", "pass")
nError := oMailManager:IMAPConnect()
If nError <> 0
    ConOut(oMailManager:GetErrorString(nError))
    Return MsgStop(oMailManager:GetErrorString(nError), "oMailManager:IMAPConnect")
EndIf
oMailManager:StartGetAllMsgHeader( "FOLDER", { "From", "Subject", "To" } )
while (!oMailManager:EndGetAllMsgHeader( @aHeaders ))
    Sleep( 100 )
endDo
nError := oMailManager:IMAPDisconnect()
If nError <> 0
    ConOut(oMailManager:GetErrorString(nError))
    Return MsgStop(oMailManager:GetErrorString(nError), "oMailManager:IMAPDisconnect")
EndIf
return
GetAllFolderList

GetAllFolderList

Retorna todas as pastas (Assinadas/Não assinadas) de uma conta de e-mail do servidor IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): GetAllFolderList ( ) --> aRet
Retorno
aRet
(vetor)

  • Retorna um array com todas as pastas (Assinadas/Não assinadas), de uma conta de e-mail, com as seguintes informações: status, nome e número de mensagens existentes (lidas e não lidas).

 
Observações
 
GetErrorString

GetErrorString

Obtém a descrição do código de erro informado.

 
Sintaxe
TMailManager(): GetErrorString ( < nError> ) --> cReturn
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nError

Numérico

Indica o código numérico do erro.

X

 

 
Retorno
cReturn
(caracter)

  • Retorna uma string com a descrição do código de erro informado.

 
Observações
 
GetFolder

GetFolder

Obtém o nome da pasta, no qual o servidor do sistema (exemplo Microsiga Protheus) está posicionado no servidor IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): GetFolder ( ) --> cRet
Retorno
cRet
(caracter)

  • Retorna uma string com o nome da pasta em uso pela aplicação. Exemplo: Inbox.

 
Observações
 
GetFolderList

GetFolderList

Obtém todas as pastas assinadas de uma conta de e-mail, através do servidor IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): GetFolderList ( ) --> aRet
Retorno
aRet
(vetor)

  • Retorna um array com todas as pastas assinadas, de uma conta de e-mail, com as seguintes informações: status, nome e número de mensagens existentes (lidas e não lidas).

 
Observações

  • Utilize esse método somente para conexão IMAP.
  • Esse método retorna todas as pastas assinadas (pastas habilitadas ou Subscribe) em forma de array.
  • Cada pasta contém informações de status, nome e número de mensagens existentes (lidas e não lidas).

Exemplo de estrutura de retorno:

array[1]
          array[1][1]:cNome
          array[1][2]:cStatus
          array[1][3]:nNumMsg
          array[1][4]:nNumMsgRecentes
          array[1][5]:nNumMsgNaoLidas
Sendo:

cStatus

Descrição

I

NOINFERIOS

N

NOSELECT

M

MARKED

U

UNMARKED

 
 
GetMsgBody

GetMsgBody

Obtém o corpo da mensagem informada através do parâmetro <nMsg>.

 
Sintaxe
TMailManager(): GetMsgBody ( < nMsg> ) --> aBodyMsg
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nMsg

Numérico

Indica o número sequencial da mensagem que deseja obter.

X

 

 
Retorno
aBodyMsg
(vetor)

  • Retorna um array com as informações da mensagem.

 
Observações
 
GetMsgHeader

GetMsgHeader

Obtém o cabeçalho da mensagem, retornando os campos que foram incluídos na mensagem.

 
Sintaxe
TMailManager(): GetMsgHeader ( < nMsg> ) --> aRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nMsg

Numérico

Indica o número da mensagem na pasta do servidor de e-mail IMAP.

X

 

 
Retorno
aRet
(vetor)

  • Retorna um array com os campos do cabeçalho da mensagem. Em caso de erro, retorna nulo.

 
Observações

  • Utilize esse método somente para conexão IMAP.
  • Caso a conexão utilizada não seja IMAP, será retornado nulo.
  • O retorno será nulo se ocorrer algum problema para obter o cabeçalho da mensagem.

 

Estrutura de retorno do método

aRet[1]
  aRet[1][1] : No. Sequencial da Mensagem.
  aRet[1][2] : Tamanho Total da Mensagem.
  aRet[1][3] : Flags em Formato Numérico.
  aRet[1][4] : Data e Hora da Mensagem.
  aRet[1][5] : UID da Mensagem.
  aRet[1][6] : Subarray de campos do header da mensagem.
    aRet[1][6][1] : TO
    aRet[1][6][1] : FROM
    aRet[1][6][1] : etc ...
GetNumMsgs

GetNumMsgs

Obtém o número de mensagens existentes no servidor de e-mail.

 
Sintaxe
TMailManager(): GetNumMsgs ( < @nNumMsg> ) --> nReturn
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nNumMsg

Numérico

Parâmetro passado por referência. Neste parâmetro, será retornado o número de mensagens que estão no servidor.

X

X

 
Retorno
nReturn
(numérico)

  • Retorna 0 (zero) se a execução for realizada com sucesso; caso contrário, será retornado o código de erro ocorrido.

 
Observações
 
 
Exemplos
#INCLUDE "TOTVS.CH"
#DEFINE EMAIL_ACCOUNT          'p10teste'
#DEFINE EMAIL_PASSWORD                '123'
#DEFINE EMAIL_POPSERVER        'pop3.provedor.com.br'
#DEFINE EMAIL_SMTPSERVER       'smtp.provedor.com.br'
User Function mail003()
Local oMail := tMailManager():NEW()
Local nRet := 0
Local nNumMsg := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:PopConnect()
If nRet == 0
    conout("Open Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:GetNumMsgs(@nNumMsg)
If nRet == 0
    conout("Count Successful")
    conout(nNumMsg)
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
oMail:PopDisconnect()
return
GetPOPTimeOut

GetPOPTimeOut

Obtém o tempo de espera para uma conexão estabelecida com o servidor de e-mail POP - Post Office Protocol.

 
Sintaxe
TMailManager(): GetPOPTimeOut ( ) --> nTimeOut
Retorno
nTimeOut
(numérico)

  • Retorna o tempo de espera em segundos.

 
Observações

  • Se a conexão utilizada for usando o protocolo IMAP, essa função retornará o tempo de espera configurado no servidor IMAP.

 
Exemplos
User Function mail007()
Local oMail := tMailManager():NEW()
Local nTimeOut := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nTimeOut := oMail:GetPOPTimeout()
conout("GetPOPTimeout")
conout(nTimeOut)
Return
GetSMTPTimeOut

GetSMTPTimeOut

Define o tempo de espera para uma conexão estabelecida com o servidor de e-mail SMTP - Simple Mail Transfer Protocol.

 
Sintaxe
TMailManager(): GetSMTPTimeOut ( ) --> nTimeOut
Retorno
nTimeOut
(numérico)

  • Retorna o tempo de espera em segundos.

 
Observações
 
 
Exemplos
User Function mail006()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init("", EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:GetSMTPTimeout()
conout("GetSMTPTimeout:")
conout(nret)
nret := oMail:SMTPConnect()
If nRet == 0
    conout("Connect Successful")
Else
     conout(nret)
     conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:SmtpDisconnect()
If nRet == 0
    conout("Disconnect Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
return
GetUser

GetUser

Obtém o nome do usuário de e-mail, informado nos métodos de inicialização ou autenticação, antes do símbolo @ (arroba), da conta de e-mail em uso.

 
Sintaxe
TMailManager(): GetUser ( ) --> cRet
Retorno
cRet
(caracter)

  • Retorna uma string com o nome da conta de e-mail em uso.

 
Observações
 
IMAPConnect

IMAPConnect

Realiza a conexão com o servidor IMAP - Internet Message Access Protocol. É necessário configurar o arquivo de configuração (.INI), do Application Server, com a seção [MAIL] e a chave Protocol=IMAP.

 
Sintaxe
TMailManager(): IMAPConnect ( ) --> nRet
Retorno
nRet
(numérico)

  • Retorna 0 (zero), se realizar a conexão com o servidor IMAP; caso contrário, retornará um código de erro.

 
Observações
 
IMAPDisconnect

IMAPDisconnect

Encerra a conexão entre a aplicação e o servidor IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): IMAPDisconnect ( ) --> nRet
Retorno
nRet
(numérico)

  • Retorna 0 (zero), se finalizar a conexão com o servidor IMAP; caso contrário, retornará um código de erro.

 
Observações

  • Antes de desconectar, será chamada a função de Purge do IMAP.

IMAPStore

IMAPStore

Armazena uma mensagem em alguma pasta do servidor de e-mail IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): IMAPStore ( < cPasta>, < oMsg> ) --> nRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cPasta

Caracter

Indica uma string que contém o nome da pasta que armazenará a mensagem.

X

 

oMsg

Objeto

Indica um objeto, da classe TMailMessage, que contém informações da mensagem que será armazenada.

X

 

 
Retorno
nRet
(numérico)

  • Retorna um número inteiro com o status da operação. Caso seja executado com sucesso, será retornado 0 (zero); caso contrário, retornará valores de erro.

 
Observações

  • Utilize esse método somente para conexão IMAP.
  • Não é preciso estar posicionado na pasta de destino .
  • O parâmetro deve ser um objeto do tipo TMailMessage().
  • Esse método armazenará a mensagem passada, no parâmetro , no servidor IMAP da pasta informada no parâmetro.

Init

Init

Define as configuraçãoes, da classe TMailManager, para realizar uma conexão com o servidor de e-mail.

 
Sintaxe
TMailManager(): Init ( < cMailServer>, < cSmtpServer>, < cAccount>, < cPassword>, [ nMailPort], [ nSmtpPort] ) --> nReturn
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cMailServer

Caracter

Indica o endereço ou alias do servidor de e-mail IMAP/POP/MAPI.

X

 

cSmtpServer

Caracter

Indica o endereço ou alias do servidor de e-mail SMTP.

X

 

cAccount

Caracter

Indica a conta de e-mail do usuário no servidor de e-mail

X

 

cPassword

Caracter

Indica a senha do usuário no servidor de e-mail.

X

 

nMailPort

Numérico

Indica a porta de comunicação para conexão IMAP/POP/MAPI.

 

 

nSmtpPort

Numérico

Indica a porta de comunicação para conexão SMTP (Padrão 25).

 

 

 
Retorno
nReturn
(numérico)

  • Retorna sempre 0 (zero). Exceto quando for utilizado o protocolo MAPI e o servidor não estiver rodando em plataforma Windows, o retorno será -1.

 
Observações
 
 
Exemplos
#INCLUDE "TOTVS.CH"
#DEFINE EMAIL_ACCOUNT           'p10teste'
#DEFINE EMAIL_PASSWORD          '123'
#DEFINE EMAIL_POPSERVER         'pop3.microsiga.com.br'
#DEFINE EMAIL_SMTPSERVER        'smtp.microsiga.com.br'
//Exemplo conectando em um servidor POP, na porta padrão
//obs: neste caso não é necessário incluir chave no ini
User Function mail001()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:PopConnect()
If nRet == 0
    conout("Sucess")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
oMail:PopDisconnect()
return
MoveMsg

MoveMsg

Move uma mensagem da pasta em uso, do servidor IMAP - Internet Message Access Protocol, para outra pasta contida na conta de e-mail.

 
Sintaxe
TMailManager(): MoveMsg ( < nMsg>, < cPasta> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nMsg

Numérico

Indica o número sequencial da mensagem que desejamos obter.

X

 

cPasta

Caracter

Indica uma string que contém o nome da pasta que armazenará a mensagem.

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.) caso tenha sido movida a mensagem com sucesso; caso contrário, retornará falso (.F.).

 
Observações
 
POPConnect

POPConnect

Conecta com o servidor de e-mail POP - Post Office Protocol.

 
Sintaxe
TMailManager(): POPConnect ( ) --> nReturn
Retorno
nReturn
(numérico)

  • Retorna 0 (zero) quando a operação é completada com sucesso; caso contrário, retornará um código de erro.

 
Observações

  • A conexão será realizada com o servidor POP usando a porta configurada no método Init() e a opção definida pelas função SetUseSSL().
  • É possível informar uma porta diferente da padrão (110) para o protocolo POP, caso seja necessário. Quando nenhuma porta é informada, a porta padrão (110) é utilizada.
  • Caso o protocolo IMAP esteja definido para ser utilizado (no arquivo de configuração (INI) do TOTVS Application Server, na seção Mail, a chave Protocol ser definida como o valor "IMAP"), a função irá realizar a conexão IMAP, lendo e definindo as chaves AUTHNTLM (lógico) e AUTHLOGIN (lógico) da seção Mail no arquivo de configuração (INI) do TOTVS Application Server, cujos valores são verdadeiros por padrão.
  • A conexão será realizada com o servidor, autenticando de acordo com os dados (conta de e-mail e senha) configurados no método Init().

 
Exemplos
#INCLUDE "TOTVS.CH"
#DEFINE EMAIL_ACCOUNT          'p10teste'
#DEFINE EMAIL_PASSWORD                '123'
#DEFINE EMAIL_POPSERVER        'pop3.microsiga.com.br'
#DEFINE EMAIL_SMTPSERVER       'smtp.microsiga.com.br'
User Function tstmail001()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:PopConnect()
If nRet == 0
    conout("Success")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
oMail:PopDisconnect()
return
POPDisconnect

POPDisconnect

Encerra a conexão com o servidor de e-mail POP - Post Office Protocol.

 
Sintaxe
TMailManager(): POPDisconnect ( ) --> nReturn
Retorno
nReturn
(numérico)

  • Retorna 0 (zero) ao encerrar a conexão com sucesso; caso contrário, será retornado um código de erro.

 
Observações

  • Caso o protocolo IMAP esteja definido para ser utilizado (no arquivo de configuração (INI) do TOTVS Application Server, na seção Mail, a chave Protocol ser definida como o valor "IMAP"), a função irá realizar a desconexão do protocolo IMAP, chamando um comando de Purge antes de desconectar.

 
Exemplos
#INCLUDE "TOTVS.CH"
#DEFINE EMAIL_ACCOUNT          'p10teste'
#DEFINE EMAIL_PASSWORD                '123'
#DEFINE EMAIL_POPSERVER        'pop3.microsiga.com.br'
#DEFINE EMAIL_SMTPSERVER       'smtp.microsiga.com.br'
User Function tstmail002()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:PopConnect()
If nRet == 0
    conout("Open Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:PopDisConnect()
If nRet == 0
    conout("Close Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
return
Purge

Purge

Remove permanentemente todas as mensagens contidas na caixa de e-mail e pasta informada, que contenham a <Deleted> definidas.

 
Sintaxe
TMailManager(): Purge ( < cPasta> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cPasta

Caracter

Indica uma string que contém o nome da pasta que será realizado o purge.

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.) caso tenha sido possível realizar a operação com sucesso; caso contrário, retornará falso (.F.).

 
Observações

  • Utilize esse método somente para conexão IMAP.
  • Para realizar o purge não é preciso estar posicionado na pasta.

RenameFolder

RenameFolder

Altera o nome da pasta no servidor de e-mail IMAP - Internet Message Access Protocol.

 
Sintaxe
TMailManager(): RenameFolder ( [ cPastaAtual], [ cPastaNova] ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cPastaAtual

Caracter

Indica o nome atual da pasta no servidor de e-mail IMAP. Observação: O nome informado nesse parâmetro, deve ser idêntico ao gravado no servidor; caso contrário, a pasta não será encontrada.

 

 

cPastaNova

Caracter

Indica o novo nome da pasta.

 

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.), se alterar o nome da pasta; caso contrário, retornará falso (.F.).

 
Observações
 
SendMail (estrela)

SendMail (estrela)

Envia e-mail através do protocolo SMTP - Simple Mail Transfer Protocol ou MAPI.(estrela) O método SendMail é obsoleto a partir de builds superiores a 7.00.101202A. Para envio de mensagens via SMTP, crie uuma instância de mensagem usando a classe TMailMessage, e utilize o método Send() da mensagem. Para mais informações, consulte a documentação da classe TMailMessage.

 
Sintaxe
TMailManager(): SendMail (estrela) ( < cFrom>, < cTo>, [ cSubject], [ cBody], [ cCC], [ cBCC], [ aAttach], < nNumAttach>, [ nPriority] ) --> nReturn
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cFrom

Caracter

Indica o endereço de uma conta de e-mail (remetente) para representar o e-mail enviado. Exemplo: usuá[email protected].

X

 

cTo

Caracter

Indica o endereço de uma conta de e-mail que será utilizada para enviar o respectivo e-mail.

X

 

cSubject

Caracter

Indica o assunto do e-mail. Caso não seja especificado, o assunto será enviado em branco. Observação: Esse parâmetro é opcional.

 

 

cBody

Caracter

Indica o conteúdo da mensagem que será enviada. Observação: Esse parâmetro é opcional.

 

 

cCC

Caracter

Indica o endereço de e-mail, na seção Com Cópia (CC), que receberá a mensagem. Observação: Esse parâmetro é opcional.

 

 

cBCC

Caracter

Indica o endereço de e-mail, na seção Cópia Oculta, que receberá a mensagem. Observação: Esse parâmetro é opcional.

 

 

aAttach

Vetor

Indica um array de caracteres com o caminho do arquivo que será anexado no e-mail. Observação: Esse parâmetro é opcional.

 

 

nNumAttach

Numérico

Indica a quantidade de arquivos que serão anexados no e-mail, no caso a quantidade de elementos do array.

X

 

nPriority

Numérico

Indica a prioridade da mensagem. Caso não seja preenchido, a prioridade será normal. Observação: Esse parâmetro é opcional.

 

 

 
Retorno
nReturn
(numérico)

  • Retorna 0 (zero) se o e-mail for enviado com sucesso; caso contrário, retornará um código de erro.

 
Observações
 
 
Exemplos
User Function mail008()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init("", EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:SetSMTPTimeout(60) //1 min
If nRet == 0
    conout("SetSMTPTimeout Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nret := oMail:SMTPConnect()
If nRet == 0
    conout("Connect Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:SendMail( "[email protected]" ,;
                        "[email protected]" ,;
                        "SUBJECT" ,;
                        "BODY" ,;
                        "" ,;
                        "" ,;
                        {} ,;
                        0 )
If nRet == 0
    conout("SendMail Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:SmtpDisconnect()
If nRet == 0
    conout("Disconnect Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
return
SetFolderSubscribe

SetFolderSubscribe

Define uma determinada pasta, do servidor de e-mail IMAP - Internet Message Access Protocol, assinada. Desta forma, a pasta ficará visível, na caixa de correio, e suas mensagens serão baixadas.

 
Sintaxe
TMailManager(): SetFolderSubscribe ( < cPasta>, < lAssinado> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cPasta

Caracter

Indica o nome da pasta, no servidor de e-mail IMAP, que será ou não assinada (subscribe).

X

 

lAssinado

Lógico

Indica se, verdadeiro (.T.), a pasta será assinada (subscribe); caso contrário, falso (.F.).

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.), se a operação for realizada com sucesso; caso contrário, falso (.F.).

 
Observações
 
SetMsgFlag

SetMsgFlag

Define o status de uma determinada mensagem.

 
Sintaxe
TMailManager(): SetMsgFlag ( < nNumMsg>, < cFlag> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nNumMsg

Numérico

Indica o número da mensagem que terá o status (flag) alterado.

X

 

cFlag

Caracter

Indica o novo status da mensagem, sendo: A=Answered, F=Flagged, D=Deleted, S=Seen, R=Draft, C=Recent, P=Special.

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.), se a mensagem for posicionada corretamente; caso contrário, retornará falso (.F.).

 
Observações
 
SetPOPTimeout

SetPOPTimeout

Define o tempo de espera para uma conexão estabelecida com o servidor de e-mail POP - Post Office Protocol.

 
Sintaxe
TMailManager(): SetPOPTimeout ( < nTimeout> ) --> nRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nTimeout

Numérico

Indica o tempo de espera em segundos.

X

 

 
Retorno
nRet
(numérico)

  • Retorna 0 (zero) se o tempo de espera for definido com sucesso; caso contrário, será retornado um código de erro.

 
Observações

  •  Se a conexão utilizada for usando o protocolo IMAP, essa função definirá o tempo de espera no servidor IMAP.

 
Exemplos
User Function mail004()
  Local oMail := tMailManager():NEW()
Local nRet := 0
Local nNumMsg := 0
oMail:Init(EMAIL_POPSERVER, EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:SetPOPTimeout(120) //2 min
If nRet == 0
    conout("SetPOPTimeout Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nret := oMail:PopConnect() //contém limite de 2min
If nRet == 0
    conout("Open Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:GetNumMsgs(@nNumMsg) //contém limite de 2min
If nRet == 0
    conout("Count Successful")
    conout(nNumMsg)
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
If nNumMsg > 0
    nRet := oMail:DeleteMsg( 1 ) //contém limite de 2min
    If nRet == 0
        conout("Delete Successful")
        conout(nNumMsg)
    Else
        conout(nret)
        conout(oMail:GetErrorString(nret))
    Endif
Else
    conout("No messages to delete")
Endif
oMail:PopDisconnect()
Return
SetSMTPTimeout

SetSMTPTimeout

Define o tempo de espera para uma conexão estabelecida com o servidor de e-mail SMTP - Simple Mail Transfer Protocol.

 
Sintaxe
TMailManager(): SetSMTPTimeout ( < nTimeOut> ) --> nRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

nTimeOut

Numérico

Indica o tempo de espera em segundos.

X

 

 
Retorno
nRet
(numérico)

  • Retorna 0 (zero) quando a operação é completada com sucesso; caso contrário, o retorno será um código de erro.

 
Observações
 
 
Exemplos
User Function mail006()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init("", EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:SetSMTPTimeout(60) //1 min
If nRet == 0
    conout("SetSMTPTimeout Sucess")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nret := oMail:SMTPConnect()
If nRet == 0
    conout("Connect Sucess")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:SmtpDisconnect()
If nRet == 0
    conout("Disconnect Sucess")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
return
SetUseRealID

SetUseRealID

Define o tipo de identificação, no servidor de e-mail IMAP - Internet Message Access Protocol, para utilização do ID único da mensagem para a busca de mensagens.

 
Sintaxe
TMailManager(): SetUseRealID ( < lOpt> ) --> Nil
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

lOpt

Lógico

Indica o tipo de identificador que será utilizado. Se configurado verdadeiro (.T.), será utilizado o ID real da mensagem; caso contrário, falso (.F.) será utilizado o número da mensagem.

X

 

 
 
Observações

  • Essa função impacta no comportamento das funções CopyMsg, MoveMsg, DeleteMsg, SetMsgFlag, GetMsgHeader e GetMsgBody.

SetUseSSL

SetUseSSL

Define o envio de e-mail utilizando uma comunicação segura através do SSL - Secure Sockets Layer. Deve ser chamado antes de executar o método Init().

 
Sintaxe
TMailManager(): SetUseSSL ( [ lUseSSL] ) --> Nil
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

lUseSSL

Lógico

Indica se, verdadeiro (.T.), utilizará a comunicação segura através de SSL/TLS; caso contrário, falso (.F.).

X

 

 
 
Observações
 
 
Exemplos
user function tstgmail()
Local oMail, oMessage
Local nErro
oMail := TMailManager():New()
oMail:SetUseSSL(.T.)
oMail:Init( '', 'smtp.gmail.com' , "[email protected]", "userpass", 0, 465 )
oMail:SetSmtpTimeOut( 120 )
conout('Conectando do SMTP')
nErro := oMail:SmtpConnect()
if nErro <> 0
    conout("ERROR:" + oMail:GetErrorString(nErro))
    oMail:SMTPDisconnect()
    return .F.
Endif
nErro := oMail:SmtpAuth("[email protected]" ,"userpass")
If nErro <> 0
    conout("ERROR:" + oMail:GetErrorString(nErro))
    oMail:SMTPDisconnect()
    return .F.
Endif
oMessage := TMailMessage():New()
oMessage:Clear()
oMessage:cFrom                  := "[email protected]"
oMessage:cTo                    := "[email protected]"
oMessage:cCc                    := ""
oMessage:cSubject               := "Teste de Envio de E-mail " + time()
oMessage:cBody                  := "<hr>Envio de e-mail via Protheus<hr>"
nErro := oMessage:Send( oMail )
if nErro <> 0
    conout("ERROR:" + oMail:GetErrorString(nErro))
    oMail:SMTPDisconnect()
    return .F.
Endif
conout('Desconectando do SMTP')
oMail:SMTPDisconnect()
return .T.
Veja Também
TMailMessage
SetUseTLS

SetUseTLS

Define no envio de e-mail o uso de STARTTLS durante o protocolo de comunicação. Deve ser chamado antes de executar o método Init().

 
Sintaxe
TMailManager(): SetUseTLS ( < lTLS> ) --> Nil
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

lTLS

Lógico

Indica se, verdadeiro (.T.), utilizará a comunicação segura através de SSL/TLS; caso contrário, falso (.F.).

X

 

 
 
Observações
 
SMTPAuth

SMTPAuth

Realiza a autenticação no servidor de e-mail SMTP - Simple Mail Transfer Protocol para envio de mensagens.

 
Sintaxe
TMailManager(): SMTPAuth ( < cUser>, < cPass> ) --> nRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cUser

Caracter

Indica o usuário no qual será feita a autenticação.

X

 

cPass

Caracter

Indica a senha do usuário para autenticação.

X

 

 
Retorno
nRet
(numérico)

  • Retorna um número inteiro com o status da operação. Caso seja executado com sucesso, o retorno será 0 (zero); caso contrário, retornará valores de erro.

 
Observações

  • O método SMTPAuth ao tentar realizar a autenticação do usuário no servidor de e-mail, verifica a configuração da chave AuthSmtp, na seção [Mail], no arquivo de configuração (INI) do TOTVS Application Server, para determinar o valor.
  • Se a conexão, do tipo POP/POP3, estiver sendo utilizada para envio de e-mail, o sistema verificará as chaves SmtpPopServer e SmtpPopPort, na seção [Mail], e realizará a autenticação pela conexão com o servidor POP. (Isto é realizado devido a configuração determinada por alguns servidores de e-mail). Caso contrário, será realizada a autenticação do usuário no servidor SMTP, através dos protocolos de autenticação suportados (LOGIN, NTLM e PLAIN).
  • Por padrão, o servidor habilita a tentativa de autenticação pelos protocolos LOGIN e NTLM. No entanto, é possível desabilitar algum tipo de autenticação através das chaves AuthNTLM=0 ou AuthLogin=0, na seção [Mail], do arquivo de configuração (INI) do TOTVS Application Server.
  • Para habilitar a autenticação do tipo PLAIN, é necessário definir no arquivo de configuração (INI), do TOTVS Application Server, a chave AuthPlain=1, na seção [Mail].

 
 
 
Exemplos
User function tstsmtp(cSMTPServer, cPort, cUser, cAccount, cPass, lAuth, nTimeout)
Local oServer := Nil
Local oMessage  := Nil
Local nret := 0
oServer := TMailManager():New()
oServer:Init( "", cSMTPServer, cAccount, cPass, 0, val(cPort) )
if (nTimeout <= 0)
    conout("[TIMEOUT] DISABLE")
else
    conout("[TIMEOUT] ENABLE()")
    nRet := oServer:SetSmtpTimeOut( 120 )
    If nRet != 0
        conout("[TIMEOUT] Fail to set")
        conout("[TIMEOUT][ERROR] " + str(nRet,6) , oServer:GetErrorString(nRet))
        Return .F.
    EndIf
Endif
Conout( "[SMTPCONNECT] connecting ..." )
nRet := oServer:SmtpConnect()
If nRet != 0
    conout("[SMTPCONNECT] Falha ao conectar" )
    conout("[SMTPCONNECT][ERROR] " + str(nRet,6) , oServer:GetErrorString(nRet))
    Return .F.
Else
    conout( "[SMTPCONNECT] Sucesso ao conectar" )
EndIf
If lAuth
    conout("[AUTH] ENABLE")
    conout("[AUTH] TRY with ACCOUNT() and PASS()")
    // try with account and pass
    nRet := oServer:SMTPAuth(cAccount, cPass)
    If nRet != 0
        conout("[AUTH] FAIL TRY with ACCOUNT() and PASS()")
        conout("[AUTH][ERROR] " + str(nRet,6) , oServer:GetErrorString(nRet))
        conout("[AUTH] TRY with USER() and PASS()")
        // try with user and pass
        nRet := oServer:SMTPAuth(cUser, cPass)
        If nRet != 0
            conout("[AUTH] FAIL TRY with USER() and PASS()")
            conout("[AUTH][ERROR] " + str(nRet,6) , oServer:GetErrorString(nRet))
            Return .F.
        else
            conout("[AUTH] SUCEEDED TRY with USER() and PASS()")
        Endif
    else
        conout("[AUTH] SUCEEDED TRY with ACCOUNT and PASS")
    Endif
Else
    conout("[AUTH] DISABLE")
Endif
conout("[MESSAGE] Criando mail message")
oMessage := TMailMessage():New()
oMessage:Clear()
oMessage:cFrom          := cAccount
oMessage:cTo            := "[email protected]"
oMessage:cCc            := ""
oMessage:cBcc           := ""
oMessage:cSubject       := "Teste de Email " + dtoc(date()) + " " + time()
oMessage:cBody          := "Teste"
conout("[SEND] Sending ...")
nRet := oMessage:Send( oServer )
If nRet != 0
    conout("[SEND] Fail to send message" )
    conout("[SEND][ERROR] " + str(nRet,6) , oServer:GetErrorString(nRet))
else
    conout( "[SEND] Success to send message" )
EndIf
conout("[DISCONNECT] smtp disconnecting ... ")
nRet := oServer:SmtpDisconnect()
If nRet != 0
    conout("[DISCONNECT] Fail smtp disconnecting ... ")
    conout("[DISCONNECT][ERROR] " + str(nRet,6) , oServer:GetErrorString(nRet))
else
    conout("[DISCONNECT] Success smtp disconnecting ... ")
EndIf
return
SMTPConnect

SMTPConnect

Conecta com o servidor de e-mail SMTP - Simple Mail Transfer Protocol.

 
Sintaxe
TMailManager(): SMTPConnect ( ) --> nReturn
Retorno
nReturn
(numérico)

  • Retorna 0 (zero) quando a operação é completada com sucesso; caso contrário, retornará um código de erro.

 
Observações

  • A conexão será realizada com o servidor SMTP usando a porta configurada no método Init() e as opções definidas pelas funções SetUseSSL() e SetUseTLS().
  • É possível informar uma porta diferente da padrão (25) para o protocolo SMTP, caso seja necessário. Quando nenhuma porta é informada, a porta padrão (25) é utilizada.
  • A função lê no arquivo de configuração (INI) do TOTVS Application Server, na seção Mail, as chaves LOCALHOST (caracter), EXTENDSMTP (lógico), AUTHNTLM (lógico) e AUTHLOGIN (lógico). EXTENDSMTP é habilitada por padrão e serve para enviar o comando EHLO para o servidor SMTP passando o valor definido em LOCALHOST, cujo valor padrão é "local.com". AUTHNTLM e AUTHLOGIN são definidos como habilitados por padrão na chamada da função SMTPConnect(), mas não influenciam a conexão com o servidor SMTP.
  • Entre uma chamada a SMTPDisconnect() e SMTPConnect(), deve ser chamada a função Init() antes de SMTPConnect() para inicialização dos dados do servidor SMTP.

 
Exemplos
#INCLUDE "TOTVS.CH"
#DEFINE EMAIL_ACCOUNT           'p10teste'
#DEFINE EMAIL_PASSWORD          '123'
#DEFINE EMAIL_SMTPSERVER        'smtp.totvs.com.br'
User Function mail005()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init("", EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:SMTPConnect()
If nRet == 0
    conout("Success")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
oMail:SmtpDisconnect()
return
SMTPDisconnect

SMTPDisconnect

Finaliza a conexão entre a aplicação e o servidor de e-mail SMTP - Simple Mail Transfer Protocol.

 
Sintaxe
TMailManager(): SMTPDisconnect ( ) --> nRet
Retorno
nRet
(numérico)

  • Retorna 0 (zero) ao encerrar a conexão com sucesso; caso contrário, retornará um código de erro.

 
Observações

  • Entre uma chamada a SMTPDisconnect() e SMTPConnect(), deve ser chamada a função Init() antes de SMTPConnect() para inicialização dos dados do servidor SMTP.

 
Exemplos
User Function mail006()
Local oMail := tMailManager():NEW()
Local nRet := 0
oMail:Init("", EMAIL_SMTPSERVER, EMAIL_ACCOUNT, EMAIL_PASSWORD)
nret := oMail:SMTPConnect()
If nRet == 0
    conout("Connect Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
nRet := oMail:SmtpDisconnect()
If nRet == 0
    conout("Disconnect Successful")
Else
    conout(nret)
    conout(oMail:GetErrorString(nret))
Endif
return
StartGetAllMsgHeader

StartGetAllMsgHeader

Inicia o processo para adquirir todos os cabeçalhos (headers) e mensagens de uma determinada pasta.

 
Sintaxe
TMailManager(): StartGetAllMsgHeader ( < cFolder>, < aHeader> ) --> lRet
 
Parâmetros
 

Nome

Tipo

Descrição

Obrigatório

Referência

cFolder

Caracter

Indica a pasta, no servidor de e-mail, em que serão adquiridos os cabeçalhos das mensagens.

X

 

aHeader

Vetor

Indica as informações que serão retornadas nos cabeçalhos das mensagens.

X

 

 
Retorno
lRet
(lógico)

  • Retorna verdadeiro (.T.), se iniciar o processo para adquirir os cabeçalhos e mensagens; caso contrário, retornará falso (.F.).

 
Observações
 
 
Exemplos
User Function GetMessages()
Local oMailManager := Nil
Local oMessage := Nil
Local nError := 0
Local aHeaders := {}
oMailManager := tMailManager():New()
oMailManager:Init("apolo.sp01.local", "", "user", "pass")
nError := oMailManager:IMAPConnect()
If nError <> 0
    conout(oMailManager:GetErrorString(nError))
    Return MsgStop(oMailManager:GetErrorString(nError), "oMailManager:IMAPConnect")
EndIf
oMailManager:StartGetAllMsgHeader( "FOLDER", { "From", "Subject", "To" } )
while (!oMailManager:EndGetAllMsgHeader( @aHeaders ))
    Sleep( 100 )
endDo
nError := oMailManager:IMAPDisconnect()
If nError <> 0
    conout(oMailManager:GetErrorString(nError))
    Return MsgStop(oMailManager:GetErrorString(nError), "oMailManager:IMAPDisconnect")
EndIf
return
 
Observações
A classe TMailManager() permite a utilização dos seguintes protocolos de e-mail:

  • 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 (estrela) - 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.

Descrição

nRet

Lógico

Contém o código do erro

Observações


 

Se não houver erro será retornado 0 (zero).

Exemplo


 

nErrCode := oSockSrv:GetError(@cErrMsg)




Close

Fecha o servidor SSL.


Sintaxe



TSktSslSrv():Close() --> lRet

Parâmetros




Retorno


 

Nome

Tipo

Descrição

lRet

Lógico

Verdadeiro (.T.) se fechou corretamente ou falso (.F.) se houve algum erro no fechamento

Observações


 


Exemplo


 

lRet := oSockSrv:Close()



Propriedades



nAccepted

Indica o número de clientes que foram aceitos (conectados).


Sintaxe



TSktSslSrv():nAccepted

Retorno


 

Nome

Tipo

Descrição

nAccepted

Numérico

Indica o número de clientes que foram aceitos (conectados)

Observações


 


Exemplo


 

nAccepted := oSockSrv:nAccepted


 


lBinded

Indica se o servidor está conectado e escutando a porta.


Sintaxe



TSktSslSrv():lBinded

Retorno


 

Nome

Tipo

Descrição

lBinded

Lógico

Indica se o servidor está conectado e escutando a porta

Observações


 


Exemplo


 

lBinded := oSockSrv:lBinded



Bloco de código
languagecpp
titleExemplo HTTP Parser
linenumberstrue
collapsetrue
/*
Teste do tSktSslSrv

Uso: U_SktHttps

Obs. Configure a sessao [SSLConfigure]

autor: Ricardo Castro Tavares de Lima
[email protected]
*/

#define CRLF (Chr(13) + Chr(10))

// Imprime mensagens de Debug
Static lIsDebug := .T.
// Imprime os Headers recebidos
Static lImpHeader := .T.
// Imprime o Status da conexao
Static lImpStatus := .T.

Function u_SktHttps()

  Local nSeq := 0
  Local cTCPIdx := ""

  Local oSockSrv := Nil
  Local nPort := 8008
  Local oObjConn := Nil
  Local nErrCode := 0
  Local cErrMsg := ''

  Local SSL2 := 1
  Local SSL3 := 1
  Local TLS1 := 1
  Local PassPhrase := ""
  Local cert1 := ""
  Local key1 := ""
  Local cert2 := ""
  Local key2 := ""
  Local HSM := 0
  Local Bugs := 0
  Local State := 0
  Local CacheSize := 0
  Local Verbose := 0
  Local Module := ""

  Local nTest := 32
  Local cName := "_name_"
  Local aResult := {}

  /*Local bErrBlk  := */ErrorBlock({|e| TT11_ERR2(e, nTest, cName, @aResult) })

  // Configure a sessao [SSLConfigure]
  PassPhrase := ""
  cert1 := "C:\Users\ricardo\compartilhado\ssl_keys_teste\certificate_localhost.crt"
  key1 := "C:\Users\ricardo\compartilhado\ssl_keys_teste\certificate_localhost.key"

  Begin Sequence

    PassPhrase := ""

    oSockSrv := tSktSslSrv():New(SSL2, SSL3, TLS1, PassPhrase, cert1, key1, cert2, key2, HSM, Bugs, State, CacheSize, Verbose, Module)

    If !oSockSrv:StartTcp(nPort)
      nErrCode := oSockSrv:GetError(@cErrMsg)
      MyErrMsg("STARTTCP FAILED ("+AllTrim(str(nErrCode))+":"+cErrMsg+")")
      Return
    EndIf

    MyLogMsg("")
    MyLogMsg("################################################################################")
    MyLogMsg("[SRV] StartTCP OK - Wait for new connection... on port: " + AllTrim(Str(nPort)))
    MyLogMsg("################################################################################")
    MyLogMsg("")

    oObjConn = NIL

    While !killapp()
      MyDbgMsg("[SRV] new accept")

      // Accept sem time-out
      oObjConn := oSockSrv:Accept( 0 )

      If oObjConn == NIL
        nErrCode := oSockSrv:GetError(@cErrMsg)
        MyErrMsg("ACCEPT FAILED ("+AllTrim(str(nErrCode))+":"+cErrMsg+")")
        loop
      EndIf

      // Cria identificador unico para esta conexão
      // e salva objeto da conexao na memoria
      cTCPIdx := "TCP_" + strzero(++nSeq, 6)
      MyDbgMsg("### SetSslObj: " + cTCPIdx)
      SetSslObj(cTCPIdx, oObjConn)
      oObjConn := NIL

      // Inicia um job dedicado, passando para ele o nome do
      // identificador unico da conexão recebida
      StartJob("U_HTTP_PARSER", getenvserver(), .f., cTCPIdx)
    Enddo

    Recover

  End Sequence

  If(ValType(oSockSrv) == 'O')
    MyLogMsg("Fechando")
    // Fecha o Socket Server
    oSockSrv:Close()
  EndIf

  MyLogMsg("Saindo")

Return


Function U_HTTP_PARSER(cTCPId)
  Local nMAX_BUFFER:= 10240
  Local cOutBuffer := ''
  Local nRet := 0
  Local cInBuffer
  Local nRetAll := 0
  Local cInBufferAll := ''

  Local oHttpParser
  Local bRet := .F.
  Local aHeaders := {}
  Local aHeader := {}
  Local nRetHttpParser := 0
  Local nReadBytes := 0

  Local nI := 0
  Local nJ := 0
  Local cStr := ''

  Local cURL := ""
  Local cMsgResp := ""

  Local nCount := 0

  Local oObjConn := Nil

  // Recupera objeto da conexão
  MyDbgMsg("["+cTCPId+"] " + "### GetSslObj")
  oObjConn := GetSslObj(cTCPId)

  If(ValType(oObjConn) != 'O')
    MyErrMsg("["+cTCPId+"] " + "### GetSslObj: ERRO")
    Return .F.
  EndIf

  oHttpParser := tHttpParser():New()

  While !killapp()
    cInBuffer := space(nMAX_BUFFER)
    MyDbgMsg("["+cTCPId+"] " + "### oObjConn:Receive: " + cTCPId + "")
    nRet := oObjConn:Receive(@cInBuffer, nMAX_BUFFER, 10)
    If nRet < 0
      MyErrMsg("["+cTCPId+"] " + "[ERR] Erro ao receber: " + AllTrim(Str(nRet)))
      Exit
    EndIf

    If nRet == 0
      MyLogMsg("["+cTCPId+"] " + "Nao chegou nada: " + AllTrim(Str(nRet)) + " (saindo)")
      Exit
    EndIf
    MyDbgMsg("["+cTCPId+"] " + AllTrim(str(nRet))+" Byte(s) recebido(s).")

    cInBufferAll := cInBufferAll + cInBuffer
    nRetAll := nRetAll + nRet
    MyDbgMsg("["+cTCPId+"] " + "Tratando: " + AllTrim(Str(nRetAll)) + " nRet: " + AllTrim(Str(nRet)))

    aHeaders := {}
    bRet = oHttpParser:Http_Parser(cInBufferAll, nRetAll, @aHeaders, @nRetHttpParser, @nReadBytes)

    If ! bRet
      If nRetHttpParser == 0 // Parser ok mas incompleto, tenta continuar lendo
        MyDbgMsg("["+cTCPId+"] " + "@@@@@ "+" Parser: mensagem incompleta. Retorno: " + AllTrim(Str(nRetHttpParser)) + " lido(s): " + AllTrim(Str(nReadBytes)) + " total: " + AllTrim(Str(nRetAll)) + " Byte(s) recebido(s): " + AllTrim(str(nRet)))
        loop
      Else // Parser com erro, para de ler a mensagem
        MyErrMsg("["+cTCPId+"] " + "##### [ERR] " + "Parser com erro: " + AllTrim(Str(nRetHttpParser)) + " lido(s): " + AllTrim(Str(nReadBytes)) + " total: " + AllTrim(Str(nRetAll)) + " Byte(s) recebido(s): " + AllTrim(str(nRet)))
        Exit
      EndIf
    Else
      nCount++
      For nI := 1 to Len(aHeaders)
        aHeader = aHeaders[nI]

        // Imprime os Headers
        If(lImpHeader)
          cStr := "Header: " + AllTrim(Str(nI)) + " itens: " + AllTrim(Str(Len(aHeader))) + " Campo: "
          For nJ := 1 to Len(aHeader)
            cStr := cStr + (aHeader[nJ]) + " | "
          Next
          MyLogMsg("["+cTCPId+"] " + "[REC] " + cStr)
        EndIf

        If(Len(aHeader) == 2 .And. aHeader[1] == "_URL_")
          cURL := aHeader[2]
        EndIf
      Next
      MyLogMsg("["+cTCPId+"] " + "PARSER OK num Headers: " + AllTrim(Str(Len(aHeaders))) + " MSG len: " + AllTrim(Str(nRetAll)) + " lidos: " + AllTrim(Str(nReadBytes)) + " URL: " + cURL + " Count: " + cValToChar(nCount))
    EndIf
    aHeaders := {}

    // Montando a resposta
    cMsgResp := "data/hora: [" + cValToChar(date()) + " - " + time() + "]"
    cMsgResp += " bytes recebidos: [" + cValToChar(nRetAll) + "]"
    cMsgResp += " id: [" + cTCPId + "]"
    cMsgResp += " thr: [" + cValToChar(ThreadId()) + "]"
    cMsgResp += " URL: [" + cURL + "]"
    cMsgResp += " Count: [" + cValToChar(nCount) + "]"
    cOutBuffer := "HTTP/1.1 200 OK" + CRLF
    cOutBuffer += "Content-Type: text/html" + CRLF
    cOutBuffer += "Content-Length: "
    cOutBuffer += cValToChar(Len(cMsgResp))
    cOutBuffer += CRLF + CRLF
    cOutBuffer += cMsgResp
    nRetAll := len(cOutBuffer)

    MyLogMsg("["+cTCPId+"] " + "TAM ENVIO: " + AllTrim(Str(nRetAll)) + " Byte(s) enviado(s)." + " Count: [" + cValToChar(nCount) + "]")
    MyDbgMsg("[" + cOutBuffer + "]")
    nRet := oObjConn:Send(cOutBuffer, nRetAll)
    If nRet <= 0
      MyErrMsg("["+cTCPId+"] " + "[SND][ERR] Erro ao enviar: " + AllTrim(Str(nRetAll)))
      Exit
    EndIf

    cInBufferAll := ''
    nRetAll := 0

    If(lImpStatus)
      MyLogMsg("["+cTCPId+"] " + " +++++++++++++++++++++++++++++++++++++++")
      MyLogMsg("["+cTCPId+"] " + " ios: "+cValToChar(oObjConn:nIOSent)+" ior: "+cValToChar(oObjConn:nIORecv)+" bs: "+cValToChar(oObjConn:nBytesSent)+" br: "+cValToChar(oObjConn:nBytesRecv)+" mbs: "+cValToChar(oObjConn:nMaxBytesSent)+" mbr: "+cValToChar(oObjConn:nMaxBytesRecv))
      MyLogMsg("["+cTCPId+"] " + " ip: "+cValToChar(oObjConn:GetIPStr()))
      MyLogMsg("["+cTCPId+"] " + " DataWaiting: "+cValToChar(oObjConn:DataWaiting()))
      MyLogMsg("["+cTCPId+"] " + " IsConnected: "+cValToChar(oObjConn:IsConnected()))
      MyLogMsg("["+cTCPId+"] " + " GetStatistics: "+cValToChar(oObjConn:GetStatistics()))
      MyLogMsg("["+cTCPId+"] " + " +++++++++++++++++++++++++++++++++++++++")
    EndIf

  Enddo

  MyLogMsg("["+cTCPId+"] " + "conn close ")
  If (oObjConn != NIL)
    // Fecha o socket desta conexao ..
    oObjConn:Close()
    oObjConn := NIL
  EndIf

  oHttpParser := NIL

  cTCPId := Nil
  nMAX_BUFFER:= Nil
  cOutBuffer := Nil
  nRet := Nil
  cInBuffer := Nil
  nRetAll := Nil
  cInBufferAll := Nil

  bRet := Nil
  aHeaders := Nil
  aHeader := Nil
  nRetHttpParser := Nil
  nReadBytes := Nil

  nI := Nil
  nJ := Nil
  cStr := Nil

  cURL := Nil
  cMsgResp := Nil

  nCount := Nil
Return


Static Function TT11_ERR2(e, nTest, cName, aResult)
  Local cMsg := ""

  cMsg += "(nro: " + AllTrim(Str(nTest)) + ") " + cName + " | "
  cMsg += "[[[" + e:Description + "]]]"
  cMsg += "{{{" + e:ERRORSTACK + "}}}"

  MyErrMsg("Erro: " + cMsg)

  Break
Return

Static Function MyLogMsg(cMsg)
  Local cThr := " [" + Str(ThreadId(), 5) + "] "
  ConOut(time() + cThr + "[HTTP PARSER] " + cValToChar(cMsg))
Return .T.

Static Function MyDbgMsg(cMsg)
  If(lIsDebug)
    MyLogMsg("[DEBUG] " + cValToChar(cMsg))
  EndIf
Return .T.

Static Function MyErrMsg(cMsg)
  MyLogMsg("[ERROR] " + cValToChar(cMsg))
Return .T.




Abrangência

Protheus 11 com release superior a 7.00.121227P


Veja Também

tSktSslConn , SetSslObj , GetSslObj , Seção [SSLConfigure]


Âncora
_GoBack
_GoBack
(estrela) 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
// 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.
If (nErro := oMailManager:Init( "imap.microsiga.com.br", "" , "seuNomeAntesDo@", "senhadoemail" )) != 0
    sErro := oMailManager:GetErrorString( nErro )
    Conout( sErro )
    Return .F.
EndIf
//realizo uma CONEXAO IMAP
// Necessario configurar no arquivo .ini do server/[MAIL]Protocol=IMAP/
If (nErro := oMailManager:IMAPConnect()) != 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
 
Veja Também
TMailMessage, Códigos de erro da classe TMailManager