Как я могу получить отправителя из Exchange и обычной электронной почты - PullRequest
1 голос
/ 22 мая 2019

Привет, я почти новичок в макросах, и извините, если я что-то неправильно написал. Так что, пожалуйста, потерпите меня.

Я пытаюсь написать макрос, цель которого - отправлять почту, когда я получаю почту на работе. Затем макрос должен отправить письмо в службу смс, которая преобразует почту в смс и отправляет ее на мой телефон. Сообщение будет содержать короткое сообщение, адрес отправителя и время отправки и получения.

Я собрал два макроса. Что я нашел по поиску в интернете

Первый код находится по этой ссылке tachytelic.net и секрет, который я нашел здесь 1010 * stackoverflow.com *

Вот часть кода, которая не работает.

'variable for select case
Dim EmailFrom As String
Dim OldMessage As Outlook.MailItem

Set OldMessage = Application.ActiveInspector.CurrentItem

'Puts sender mail address in variable both ordinary mail and Exchange emails.
Select Case OldMessage.SenderEmailType
    Case "EX"
       EmailFrom = OldMessage.Sender.GetExchangeUser.PrimarySmtpAddress
    Case Else
       EmailFrom = OldMessage.SenderEmailAddress
End Select

'Sends E-mail to sms service.
If TypeName(Item) = "MailItem" Then
    With olEmail
        .BodyFormat = olFormatPlain
        .To = "some@mail.com"
        .Subject = "You got a new E-mail!"
        .Body = EmailFrom & vbCrLf & "Sendt: " & Item.SentOn & vbCrLf & "Modtaget: " & Item.ReceivedTime
        .Send
    End With
End If

Когда я запускаю этот код, я получаю ошибку времени выполнения 91 - переменная объекта или переменная блока не установлены.

Я пытался использовать клавишу F8, но это невозможно, я не знаю почему.

Затем я взял оригинальный код и вставил его в модуль. Затем я могу использовать клавишу F8, чтобы пройти код. Ошибка появляется, когда я достигаю этой строки.

Set OldMessage = Application.ActiveInspector.CurrentItem

Может кто-нибудь сказать мне, что я делаю неправильно и что я могу сделать, чтобы это исправить? THX


Вот весь код

Option Explicit
Private WithEvents inboxItems As Outlook.Items
Sub Application_Startup()
  Dim outlookApp As Outlook.Application
  Dim objectNS As Outlook.NameSpace

  Set outlookApp = Outlook.Application
  Set objectNS = outlookApp.GetNamespace("MAPI")
  Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items
End Sub

Sub inboxItems_ItemAdd(ByVal Item As Object)

On Error GoTo ErrorHandler

'variable for if statments
Dim olApp As Outlook.Application
Dim olEmail As Outlook.MailItem

Set olApp = New Outlook.Application
Set olEmail = olApp.CreateItem(olMailItem)

'variable for select case
Dim EmailFrom As String
Dim OldMessage As Outlook.MailItem

'Deletes sms status mails I recieve when I mail to sms service
If InStr(Item.Subject, "SMS status") > 0 Then
    Item.UnRead = False
    Item.Save
    Item.Delete
    End
End If

'Puts sender mail address in variable both ordinary mail and Exchange emails.
Select Case OldMessage.SenderEmailType
    Case "EX"
       EmailFrom = OldMessage.Sender.GetExchangeUser.PrimarySmtpAddress
    Case Else
       EmailFrom = OldMessage.SenderEmailAddress
End Select

'Sends E-mail to sms service.
If TypeName(Item) = "MailItem" Then
    With olEmail
        .BodyFormat = olFormatPlain
        .To = "some@mail.com"
        .Subject = "You got a new E-mail!"
        .Body = EmailFrom & vbCrLf & "Sendt: " & Item.SentOn & vbCrLf & "Modtaget: " & Item.ReceivedTime
        .Send
    End With
End If

ExitNewItem:
    Exit Sub
ErrorHandler:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitNewItem
End Sub 

Тогда обзор будет проще.

Итак, как мне заставить ActiveInspector просмотреть полученную почту и сохранить ее в OldMessage? Вот что я думаю, я должен сделать. Но поправь меня, если я ошибаюсь.

1 Ответ

0 голосов
/ 22 мая 2019

Если нет открытого окна какого-либо элемента, ActiveInspector будет Nothing.Кроме того, на основе предоставленного вами примера кода переменная Item нигде не объявлена ​​и не установлена, поэтому вы, скорее всего, также получите сообщение об ошибке в этой строке:

If TypeName(Item) = "MailItem" Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...