Enviando E-mails com o Visual Basic 6 ...


Hoje vamos mostrar como ler e enviar e-mails usando o Visual Basic 6.

O VB6 possui o controle MAPI ( Mail Application Programming Interface )  permite ler , enviar e anexar arquivos a e-mails em uma aplicação VB. Você vai ter que ter este controle instalado , ele esta presente no arquivo MSMAPI32.OCX - Microsoft MAPI Controls.

A utilização dos Controles MAPI envolve duas etapas :

  1. Estabelecer uma sessão MAPI
  2. e então usar as propriedades e métodos para acessar e gerenciar a sua caixa de mensagens.

Para fazer isto você vai usar dois controles : MAPISession - e MAPIMessage. .

Controle MAPISession

1- A primeira coisa a fazer é uma conexão com o seu servidor de email usando o seu código de identificação e sua senha. Podemos fazer isto de duas maneiras:  Deixando que o próprio controle  solicite as informações ou definindo-as via código.

Para abrir uma conexão usamos o método SignOn do controle MAPISession:

MAPISession.UserName = "SeuNome"

MAPISession.Password = "SeuSenha"

MAPISession.SignOn

Controle MAPIMessages

Depois de efetuar a conexão com o servidor de mensagens a propriedade SessionID irá conter o identificador da sessão MAPI. Este identificador precisa ser passado para o controle MAPIMessages para que possamos usá-lo. Vejamos algo funcional:

Private Sub Form_Load()

   MAPISession.SignOn

 

   MAPIMessages1.SessionID = MAPISession1.SessionID

   MAPIMessages1.Fetch

   Msgbox " Você tem " & MAPIMessages1.MsgCount & " Mensagens..."

   MAPISession1.SignOff

End Sub

Na linha : MAPIMessages.SessionID = MAPISession1.SessionID - o identificador da sessão SessionID precisa ser passado do controle MAPISession para o controle MAPIMessage antes de usá-lo.

Este código exibe um aviso informando quantas mensagens você possui na sua caixa de mensagens ; usamos aqui a propriedade MsgCount do controle MAPIMessages.

Obs:Para contar somente as mensagens não lidas use a propriedade FetchUnreadOnly definida como True :

MAPIMessage1.FetchUnreadOnly [ = value ]

 

Vamos continuar : No exemplo abaixo temo um projeto que usa uma caixa de listagem - List1 - para exibir uma lista de todas as mensagens que você tem na caixa de entrada exibindo o remetente e o assunto da mesma,veja o código abaixo:

 

Private Sub Form_Load()
    Dim i As Long
    
    MAPISession1.DownLoadMail = True
    MAPISession1.SignOn
    
    MAPIMessages1.SessionID = MAPISession1.SessionID
    MAPIMessages1.Fetch
    
    If MAPIMessages1.MsgCount > 0 Then
        For i = 0 To MAPIMessages1.MsgCount - 1
            MAPIMessages1.MsgIndex = i
            List1.AddItem "De: " & MAPIMessages1.MsgOrigDisplayName &  " Assunto: " & MAPIMessages1.MsgSubject
        Next
    End If
    MAPISession1.SignOff
End Sub

Como funciona :

- A propriedade DownloadMail  - que determina quando novas mensagens serão baixadas do servidor para o usuário - esta definida como True , assim todas as novas mensagens são forçadas a ir para caixa de entrada do usuário.

- Iniciamos uma nova sessão - SignOn

- O método Fetch cria um conjunto de mensagens de todas as mensagens selecionadas na caixa de entrada. Aqui podemos usar as propriedades :  FetchMsgType para indicar o tipo de mensagem ;  FetchSorted - para ordernar as mensagens e  FetchUnreadOnly para definir se somente as mensagens não lidas comporão o conjunto.

- A quantidade de mensagens é obtida com a propriedade MsgCount

- O número do índice de cada mensagem é obtida com a propriedade MsgIndex 

- As mensagens são incluídas no ListBox sendo exibidas : 

    1-) o Remetente - MAPIMessages1.MsgOrigDisplayName

    2-) o Assunto da mensagem  - MAPIMessages1.MsgSubject

Criando e enviando um Email

Criar e enviar um email usando  MAPI é  muito simples : Veja abaixo o código :

MAPISession1.SignOn
    
MAPIMessages1.SessionID = MAPISession1.SessionID
MAPIMessages1.Compose

MAPIMessages1.Send True
    
MAPIMessages1.SignOff

Aqui método Compose cria a mensagem a seguir o método Send envia a mensagem. Aqui estará sendo usado o seu programa de Email instalado e você não vai ter muito controle sobre o processo. Vejamos a seguir como você pode definir vários parâmetros e assim controlar melhor sua aplicação.

Agora inclua o código abaixo  associado ao botão Enviar Email :

Private Sub Command1_Click()
  MAPISession1.SignOn

  MAPIMessages1.SessionID = MAPISession1.SessionID

  MAPIMessages1.Compose
  MAPIMessages1.RecipAddress = Text1.Text
  MAPIMessages1.MsgSubject = Text2.Text
  MAPIMessages1.MsgNoteText = Text3.Text

  MAPIMessages1.Send False

  MAPISession1.SignOff
End Sub

Como funciona:

- Atribuimos o endereço eletrônico , inserido em Text1.text ,  a propriedade -  RecipAddress

- O assunto do email é definido em Text2.text e associado a propriedade - MsgSubject

- O texto da mensagem presente em Text3.text é atribuido a propriedade - MsgNoteText

Obs- Essas propriedades somente podem ser definidas em tempo de execução 

- O método Send é definido como False , assim mensagem não será enviada imediatamente , sendo direcionada para a caixa de saida.

Para poder acessar a sua agenda de endereços e assim poder enviar a mensagem para vários destinatários basta incluir a seguinte linha de código antes da linha :   MAPIMessages1.Send False :

    MAPIMessages1.Show

Anexando arquivos aos seus emails

Vamos agora adicionar a funcionalidade de anexar arquivos aos seus emails. Com os controles MAPI esta tarefa também é muito simples e você não vai se precisar se preocupar com nada além de indicar o arquivo a ser anexado. ( geralmente você teria que usar MIME ou UUENCODE neste processo ...)

Vamos aproveitar o projeto anterior e inserir mais uma caixa de texto - Text4.txt - que indicara o nome do arquivo que vamos anexar. O layout do formulário fica assim:

O Código associado ao botão Enviar é o seguinte:

Private Sub Command1_Click()
  MAPISession1.SignOn

  MAPIMessages1.SessionID = MAPISession1.SessionID

  MAPIMessages1.Compose
  MAPIMessages1.RecipAddress = Text1.Text
  MAPIMessages1.MsgSubject = Text2.Text
  MAPIMessages1.MsgNoteText = Text3.Text

  'anexa no final da mensagem
  MAPIMessages1.AttachmentPosition = Len(MAPIMessages1.MsgNoteText)
  'define o tipo de dados do anexo
  MAPIMessages1.AttachmentType = mapData
  'da um nome ao anexo
  MAPIMessages1.AttachmentName = "Anexos"
  'define o caminho e nome do arquivo a anexar
  MAPIMessages1.AttachmentPathName = Text4.Text

  'envia o arquivo
  MAPIMessages1.Send True

  MAPISession1.SignOff

End Sub

Como funciona:

- Apenas definimos as propriedades AttachmentPosition, AttachmentType , AttachmentName e AttachmentPathName do controle MAPIMessages

Ao executar o projeto deverás obter algo parecido com:

Deletando e repassando mensagens

Para encerrar nosso assunto veremos agora como podemos deletar e repassar mensagens recebidas usando o MAPI.

Para excluir uma mensagem basta usar o método Delete , assim:   MAPI.Messages1.Delete

Para repassar uma mensagem usamos o método Forward :  MAPI.Messages1.Forward

O controle MAPIMessages contém ainda outras propriedades para que possamos gerenciar mensagens de e-mail; embora elas não tenha sido aqui abordadas , abaixo temos uma relação com a descrição resumida de cada uma delas:

Propriedade Descrição
MsgConversationID Determina o valor do identificador da conversação para a mensagem atual.
MsgCount Retorna o numero total de mensagens presentes no conjunto de mensagens recebidas para a sessão atual.
MsgDateReceived Retorna a data na qual a mensagem foi recebida.
MsgID Retona uma string que identifica a indice da mensagem atual.
MsgIndex Determina o número do indice da mensagem atual.
MsgOrigAddress Retorna o endereço de email do remetente da mensagem atual.
MsgOrigDisplayName Retorna o nome original para a mensagem atual.
MsgRead Retorna uma expressão Boleana indicando se a mensagem ja foi lida.
MsgSent Determina se a mensagem atual já foi enviada ao servidor de email para distribuição.
MsgType Define o tipo da mensagem atual.

Embora não tenha me aprofundado muito , creio que você já é capaz de receber, criar e enviar emails usando o Controle MAPI no seu projeto VB.

É claro que para mandar um email sem rodeios você simplesmente poderia usar o seguinte código no seu programa VB:

RetVal = SHELL("Start.exe mailto:macoratti@riopreto.com.br", vbHide)

É isso ai...  

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti