hemos escrito una función de controlador de mensajes en Visual Basic de Outlook (estamos usando Outlook 2003 y Exchange Server) para ayudarme a clasificar el correo electrónico entrante. Me funciona, excepto que algunas veces la regla falla y Outlook la desactiva. Luego vuelvo a activar la regla y la ejecuto manualmente en mi Bandeja de entrada para ponerme al día. La regla falla espontáneamente y se desactiva varias veces al día. Me encantaría solucionar esto de una vez por todas.
Este es el código despojado de la funcionalidad, pero que le da una idea de cómo se ve:
Public WithEvents myOlItems As Outlook.Items
Public Sub Application_Startup()
' Reference the items in the Inbox. Because myOlItems is declared
' "WithEvents" the ItemAdd event will fire below.
' Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items
Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub myOlItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
If TypeName(Item) = "MailItem" Then
MyMessageHandler Item
End If
End Sub
Public Sub MyMessageHandler(ByRef Item As MailItem)
Dim strSender As String
Dim strSubject As String
If TypeName(Item) <> "MailItem" Then
Exit Sub
End If
strSender = LCase(Item.SenderEmailAddress)
strSubject = Item.Subject
rem do stuff
rem do stuff
rem do stuff
End Sub
Un error que consigo es "No coinciden los tipos" llamando MyMessageHandler donde VB se queja de que el tema no es un MailItem . De acuerdo, pero TypeName (Item) devuelve "MailItem", entonces, ¿cómo es que Item no es un MailItem?
Otra que recibo es donde aparece un correo electrónico con un tema vacío. La línea
strSubject = Item.Subject
me da un error. Sé Item.Subject debe estar en blanco, pero ¿por qué es eso un error?
Gracias.
TypeName interroga a un tipo para una versión humanamente legible. Dado que puede haber dos tipos diferentes con el mismo nombre, depender de TypeName para realizar la comprobación de tipo dará como resultado falsos positivos/negativos. Pruebe "TypeOf Item is MailItem" en su lugar – rpetrich
Si 'TypeName (Item) =" MailItem "', llame a un procedimiento ... que no solo acepta solo MailItems, sino que comprueba si el artículo es un MailItem. – JimmyPena