excel - reunion - Clase de evento de envío de Outlook
calendario de grupo office 365 (1)
Fondo:
Hace un tiempo, descubrí un módulo de clase para obtener eventos de Outlook, específicamente, como sugiere el título, lo estoy usando para captar el elemento de enviar evento, para saber si realmente fue enviado o no. Este es el módulo de la clase en sí. No recuerdo cómo solía llamarlo (lo guardé para referencias posteriores, pero borré la forma de llamarlo en mi sub principal).
Option Explicit
Public WithEvents itm As Outlook.MailItem
Private Sub itm_Send(Cancel As Boolean)
Dim blnSent As Boolean
On Error Resume Next
blnSent = itm.Sent
If Err.Number = 0 Then
Debug.Print "Email not sent"
Else
Debug.Print "Email sent")
End If
End Sub
Problema:
Olvidé cómo debería llamarlo en mi sub que está enviando el correo electrónico. He intentado las siguientes declaraciones en la parte superior:
Dim itmevt As New CMailItemEvents
Public EmailToSend As Outlook.MailItem
Entonces en mi sub que está enviando el correo electrónico:
Set itmevt.itm = EmailToSend
Sin embargo, no puedo obtener el evento de envío activado en la clase.
Preguntás especificas:
1. ¿Cómo llamo a la clase correctamente?
2. ¿Cómo puedo enviar / no enviar el valor de manera eficiente (me gustaría escribirlo en una celda para su posterior análisis -enviada / no enviada-) Pensé en analizar una función pública, que podría recuperar el valor de el submarino que lo llama, pero, no creo que sea el mejor enfoque
Por lo que pude entrenar esta clase es un tanto falsa. El uso correcto sería Set itmevt.itm = OutApp.CreateItem(0)
. El problema radica en utilizar el evento Enviar para probar si el elemento se envió o no. Tenga en cuenta que el parámetro Cancelar del evento. Establecer Cancel = True
evita que se envíe el correo electrónico. Eso nos dice que si el correo electrónico no se envía hasta que se complete este evento. Enviado siempre devolverá falso y nunca causará un error del evento Enviar.
Por otro lado, si probamos para ver MailItem.Sent después de que enviemos el correo electrónico, arrojará un mensaje. The item has been moved or deleted.
error.
Sabiendo que podemos crear una función que enviará nuestros correos electrónicos que devolverán True si el correo electrónico fue enviado y False si no lo fue.
Function SendEmail(addressTo As String, addressCC As String, Subject As String, HTMLBody As String) As Boolean
Dim OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
With OutApp.CreateItem(0)
.To = addressTo
.CC = addressCC
''OutMail.BCC = ""
.Subject = Subject
.HTMLBody = HTMLBody
.Send
On Error Resume Next
Call .Sent
SendEmail = Err.Number <> 0
If Err.Number = 0 Then
Debug.Print "Email not sent"
Else
Debug.Print "Email sent"
End If
On Error GoTo 0
End With
Set OutApp = Nothing
End Function