Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador MAPI. Mostrar todas as postagens
Mostrando postagens com marcador MAPI. Mostrar todas as postagens

VBA Excel - Enviando emails via CDO - Send Email Using CDO

O que é CDO?

É uma biblioteca de objetos que expõe as interfaces do Messaging Application Programming Interface (MAPI). 

O CDO permite que manipulemos os dados do Exchange para enviar e receber mensagens.

O uso do CDO pode ser preferível em casos onde gostaríamos de evitar a segurança pop-up que aparecem, tais como: "um programa está tentando enviar automaticamente um e-mail em seu nome", atrasando o nosso envio de e-mail até que o usuário forneça um resposta.

Neste exemplo usaremos a função CreateObject ("CDO.Message").

Um ponto importante a observar aqui é definir a configuração SMTP corretamente, de modo a evitar o temido "Erro em tempo de execução -2147220973 (80040213) " ou o " valor de configuração SendUsing erros é inválido "de aparecer.

Sub EnvieMail_CDO()
Dim CDO_Mail_Object As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim Email_Subject, Email_Send_From, Email_Send_To, Email_Cc, Email_Bcc, Email_Body As String

Let Email_Subject = "Enviando email via CDO"
Let Email_Send_From = "< Seu endereço de email >"
Let Email_Send_To = "< Endereço de email para envio >"
Let Email_Cc = "< Endereço de email de cópia >"
Let Email_Bcc = "< Endereço de email de cópia oculta >"
Let Email_Body = "Parabéns!!!! Seu envio através de CDO funcionou !!!!"

Set CDO_Mail_Object = CreateObject("CDO.Message")
On Error GoTo debugs

Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1

Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

' Coloque o nome do seu SERVIDOR abaixo:
Let .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "YOURSERVERNAME"

Let .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

.Update
End With

With CDO_Mail_Object
Set .Configuration = CDO_Config
End With

Let CDO_Mail_Object.Subject = Email_Subject
Let CDO_Mail_Object.From = Email_Send_From
Let CDO_Mail_Object.To = Email_Send_To
Let CDO_Mail_Object.TextBody = Email_Body
Let CDO_Mail_Object.cc = Email_Cc 'Use se achar necessário
Let CDO_Mail_Object.BCC = "bernardess@gmail.com" 'Use se achar necessário
'CDO_Mail_Object.AddAttachment FileToAttach 'Use se achar necessário
CDO_Mail_Object.send

debugs:
If Err.Description <> "" Then MsgBox Err.Description
End Sub



Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...




Tags: VBA, Excel, e-mail, email, mail, send, CDO, SMTP, CreateObject, MAPI, 



VBA Outlook - Obtendo o endereço SMTP da um pasta pública do Exchange



Ok, é um post mais técnico, mas certamente útil para os desenvolvedores...

Cada pasta na hierarquia do Exchange Server Public pode ter um endereço de e-mail. Caso saiba o endereço do
SMTP, pode enviar mensagens, ou mesmo pedidos de reunião (Invites), diretamente desta pasta. 
O código abaixo mostra como obter o endereço da pasta usando a biblioteca Redemption para evitar o desencadeamento solicitado pela segurança do Outlook.

Também pode utilizar a mesma técnica com o objeto AddressEntry CDO, mas obviamente isso provocaria avisos de segurança em muitos ambientes (versões/instalações) do Outlook.

Use esta versão de código com uma biblioteca qualquer de 'Resgate' de terceiros (Por exemplo o SafeOutlookLibrary), para evitar os avisos de segurança geradas por tentativas de acesso aos objetos e as propriedades de endereço quando o Outlook E-mail Security Update estiver instalado.

Function R_GetPFAddress(objFolder)
    Dim oSafeFolder 'As New Redemption.MAPIFolder
    Dim objUtils 'As Redemption.MAPIUtils
    Dim arrBytes
    Dim strAddress, strEntryID 'As String
    Dim oAE 'As Redemption.AddressEntry

    Const PR_ADDRESS_BOOK_ENTRYID = &amp; H663B0102
    Const PR_EMAIL = &amp; H39FE001E

    On Error Resume Next

    Set objUtils = CreateObject ("Redemption.MAPIUtils")
    Set oSafeFolder = CreateObject ("Redemption.MAPIFolder")

    Let oSafeFolder.Item = objFolder
    Let arrBytes = oSafeFolder.Fields (PR_ADDRESS_BOOK_ENTRYID)
    Let strEntryID = objUtils.HrArrayToString (arrBytes)

    Set oAE = objUtils.GetAddressEntryFromID (strEntryID)

    Let R_GetPFAddress = oAE.Fields (PR_EMAIL)
 End Function


Reference:
FonteOutlookCode

Inspiration:

TagsVBA, outlook, SMTP, exchange, address, folder, pasta, e-mail, email, mail, redemption, MAPI, 

diHITT - Notícias