|
![]() |
![]() |
No artigo de hoje vou mostrar como podemos enviar emails a partir de uma aplicação Windows Forms usando a linguagem VB .NET e o Outlook, no meu caso, estou usando o Outlook 2007. |
O modelo de objeto do OutLook possui as classes : MailItem, AppointmentItem, MobileItem, SharingItem, TaskItem e todas elas fornecem o método Send.
O método Send não aceita ou retorna qualquer valor ou objeto, ele apenas faz o seu trabalho que é enviar a mensagem.
No entanto para poder enviar uma mensagem usando o Outlook você precisa saber para quem entregar a mensagem, e , a propriedade Recipient é usada para tal tarefa, pois ela retorna uma instância da classe Recipients que contém todos os destinatários da sua mensagem, ou seja, instâncias da classe Recipient no Outlook.
A coleção de destinatários (Recipients) fornece o método Add que adiciona novos destinatários para a coleção sendo que o método aceita uma string que contém o nome de destinatário ou um endereço de email SMTP completo, e, retorna uma nova instância da classe Recipient. ( O nome do destinatário deve ser válido e tem que ter uma entrada correspondente no seu livro de endereços)
A coleção também fornece o método ResolveAll o qual não aceita qualquer parâmetro e retorna um valor Boolean indicando se todos os destinatários na coleção foram resolvidos ou não. (Se um ou mais destinatário não for resolvido, ou seja, não corresponder às entradas do livro de endereços irá retornar false).
A classe Recipient também fornece a propriedade Resolved a qual pode ser usada ao invés do método ResolveAll.
Nota : Se você especificar um endereço de e-mail SMTP, não vai precisar ter uma entrada "mapeada" no livro de endereços.
Vamos então criar uma aplicação Windows Forms usando a linguagem VB .NET e mostrar como enviar emails usando o Outlook.
Nota: Veja o artigo - Visual Basic 6 - Chamando o Outlook e usando o preenchimento automático - que realiza a mesma tarefa usando o Visual Basic 6.
Recursos usados
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
A seguir selecione Visual Basic -> Windows Forms Application
Informe o nome vbn_Outlook_Email e clique no botão OK;
![]() |
A seguir a partir da ToolBox inclua no formulário form1.vb os seguintes controles:
5 Labels
6 TextBox
1 Button
2 CheckBox
Disponha os controles no formulário conforme o leiaute da figura abaixo:
Agora vamos incluir uma referência a biblioteca do Outlook em nosso projeto.
No menu Project clique em Add Reference e na janela Reference Manager clique na guia COM e selecione o pacote: Microsoft Outlook 12.0 Object Library
![]() |
Agora vamos definir no formulário form1.vb a declaração do namespace:
Imports
Microsoft.OfficeDeclare no início do formulário a variável a seguir que irá receber o nome do arquivo anexo:
Dim
arquivoAnexo As StringNo evento Click do botão de comando - Enviar Email via Outlook - inclua o código a seguir:
Private Sub btnEnviarEmail_Click(sender As Object, e As EventArgs) Handles btnEnviarEmail.Click
'se não selecionou o anexo então atribui um arquivo sem nome
If String.IsNullOrEmpty(arquivoAnexo) Then
arquivoAnexo = ""
End If
'define o nome do anexo
Dim nome As String = "Macoratti"
If validaDados() Then
EnviaEmail(txtAssunto.Text, txtMensagem.Text, txtDestino.Text, txtCC.Text, arquivoAnexo, nome)
Else
MessageBox.Show("Dados inválidos", "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub
|
Neste código temos a rotina validaDados() que verifica se as informações para o envio do email foram informadas.
A seguir temos o código do método validaDados() :
Private Function validaDados() As Boolean If String.IsNullOrWhiteSpace(txtAssunto.Text) Then Return False ElseIf String.IsNullOrWhiteSpace(txtDestino.Text) Then Return False ElseIf String.IsNullOrWhiteSpace(txtMensagem.Text) Then Return False Else Return True End If End Function |
Se os dados foram informados então o método EnviaEmail() chamado passando os parâmetros necessários.
Private Sub EnviaEmail(Assunto As String, Mensagem As String, Destino As String, ComCopia As String, NomeArquivo As String, Nome As String) Try Dim oApp As Interop.Outlook._Application oApp = New Interop.Outlook.Application Dim oMsg As Interop.Outlook._MailItem oMsg = oApp.CreateItem(Interop.Outlook.OlItemType.olMailItem) oMsg.Subject = Assunto oMsg.Body = Mensagem oMsg.To = Destino oMsg.CC = ComCopia Dim ArquivoAnexo As String = NomeArquivo Dim nomeDestino As String = Nome 'se informar o nome do arquivo então anexa If NomeArquivo <> "" Then Dim tamanhoMensagem As Integer = Int(Mensagem.Length) Dim oAttachs As Interop.Outlook.Attachments = oMsg.Attachments Dim oAttach As Interop.Outlook.Attachment oAttach = oAttachs.Add(ArquivoAnexo, , tamanhoMensagem, nomeDestino) End If 'apenas exibe o email ou envia diretamente via outlook If chkExibirOutlook.Checked Then oMsg.Display() MessageBox.Show("O email será aberto no Outlook. para enviar clique no botão Enviar.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Else oMsg.Send() MessageBox.Show("Email enviado", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If Catch ex As Exception MessageBox.Show("Erro ao enviar o Email " & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
Este código usa o modelo de objetos do OutLook e criar um objeto do tipo MailItem que representa uma mensagem de email usando o método CreateItem.
Criamos também um novo anexo na coleção Attachments usando o método Add : oAttachs.Add(ArquivoAnexo, , tamanhoMensagem, nomeDestino)
Precisamos também definir o código no evento CheckedChanged do controle chkAnexo que será acionado quando o usuário marcar para enviar um anexo.
O método .Send envia o email diretamente enquanto o método .Display abre o Outllok e exibe o email preenchido e pronto para enviar.
Neste evento temos o código que permite selecionar um arquivo de anexo :
Private Sub chkAnexo_CheckedChanged(sender As Object, e As EventArgs) Handles chkAnexo.CheckedChanged If chkAnexo.Checked Then Dim ofd1 As New OpenFileDialog ofd1.InitialDirectory = "C:\dados" ofd1.RestoreDirectory = True ofd1.ReadOnlyChecked = True ofd1.ShowReadOnly = True Dim dr As DialogResult = ofd1.ShowDialog() If dr = System.Windows.Forms.DialogResult.OK Then arquivoAnexo = ofd1.FileName txtAnexo.Text = arquivoAnexo End If End If End Sub |
Temos também a opção de exibir o Email no Outlook marcando o CheckBox - Exibir no Outlook - conforme mostra o programa em execução na figura abaixo:
Dessa forma fizemos uma abordagem bem simples usando os recursos dos objetos do Outlook para enviar emails via VB .NET.
Pegue o projeto completo aqui :
vbn_OutLook_Email.zip
Aquele que diz: Eu conheço-o (Jesus), e
não guarda os seus mandamentos, é mentiroso, e nele não está a verdade.
1 João 2:4
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a
Objetos com VB .NET