Отправить письмо и ответить на него - PullRequest
0 голосов
/ 07 февраля 2020

Моя задача - отправить электронное письмо, содержащее отчет, и отправить другое электронное письмо, содержащее другой отчет, в ту же ветку электронной почты путем ответа / пересылки на отправленное электронное письмо (исключая некоторых получателей) .

Option Explicit

Sub TestReply()

    Dim objApp As Application
    Dim objNewMail As Outlook.MailItem
    Dim objReply As Outlook.MailItem

    Set objApp = Outlook.Application
    Set objNewMail = objApp.CreateItem(0)

    ' Outgoing email
    With objNewMail
        .Subject = "Test sending email"
        .To = "abc@abc.com"
        .HTMLBody = "This is the outgoing email."
        .Send
    End With

    ' Reply email
    Set objReply = objNewMail.ReplyAll
    With objReply
        .HTMLBody = "This is the reply emal."
        .Display
    End With

    Set objApp = Nothing
    Set objNewMail = Nothing
    Set objReply = Nothing
End Sub

Я не могу найти способ отправить следующее электронное письмо (ответом или пересылкой).

Когда я пытаюсь использовать приведенный выше код, появляется сообщение об ошибке: элемент перемещен / удален. Я предполагаю, что это происходит, когда электронное письмо отправляется, odject objNewMail также прекращается.

Я попытался добавить RE: или FW: к теме исходное электронное письмо, но тогда два электронных письма будут находиться не в одной ветке, а в независимых письмах.

Дополнительная проблема заключается в том, что у меня в Outlook есть две учетные записи электронной почты: моя собственная электронная почта и команда электронная почта и отчеты должны быть отправлены с команды электронная почта.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2020

Прямо сейчас ваш код делает это:

  1. Создание письма, отправка его.

  2. Попытка ответить на объект mailitem, который уже отправлен.

Вам нужно перехватить событие, чтобы перехватить почту при получении самостоятельно. (при условии, что вы ответите всем и удалите некоторых получателей для отчета 2)

Вот как вы выполните sh this:

Сначала создайте WithEvents как элементы, вызывая AllMyItems, затем перехват в AllMyItems_ItemAdd, а затем инициализировать событие, когда Outlook запускается с помощью Application_Startup (встроенное событие)

Будьте очень осторожны при определении критериев для переадресации / действия элемента входящей почты, так как этот код события будет просканируйте каждое письмо, отправленное на ваш главный почтовый ящик, и оцените его. Если вы хотите еще больше снизить риск пересылки почтового элемента не тому человеку, рассмотрите возможность использования правила outlook для сортировки его в пользовательскую папку, а затем задайте местоположение этой папки в виде строки Set AllMyItems = вместо папки по умолчанию

Option Explicit
'for the Default DL inbox
Private WithEvents AllMyItems As Items

Private Sub Application_Startup()
  Dim olapp As Outlook.Application
  Dim objNS As Outlook.NameSpace
  Set olapp = Outlook.Application
  Set objNS = olapp.GetNamespace("MAPI")
  'Set myolitems = objNS.GetDefaultFolder(olFolderInbox).Items

    'all my items in the main box
    Set AllMyItems = objNS.GetDefaultFolder(olFolderInbox).Items
    Set olapp = Nothing
    Set objNS = Nothing
 End Sub

Private Sub AllMyItems_ItemAdd(ByVal Item As Object)
  On Error Resume Next
  If TypeName(Item) <> "Mailitem" Then
  If TypeName(Item) = "ReportItem" Then GoTo 0 'undeliverables shows as a report item
  If TypeName(Item) = "MeetingItem" Then GoTo 0

  Dim oItem As MailItem
  Dim myForward As MailItem
  Set oItem = Item
  'use the next line to check for a property of the incoming mail, that distinguishes it from other mail, since this event will run on every mail item
  If InStr(1, oItem.Subject, "Your public folder is almost full", vbTextCompare) > 0 Then
    Set myForward = oItem.Forward
    myForward.Recipients.Add "derp@derpinacorp.com"
    myForward.Importance = olImportanceHigh
    'MsgBox "uno momento"
    myForward.Send

  Else

  End If

  Else

  End If
  0:
End Sub
0 голосов
/ 07 февраля 2020

Вы можете определить, соответствует ли элемент, добавленный в отправленную папку, objNewMail.

В ThisOutlookSession

Option Explicit

Private WithEvents sentFolderItems As Items

Private Sub Application_Startup()

    'Set sentFolderItems = Session.GetDefaultFolder(olFolderSentMail).Items

    ' Reference any folder by walking the folder tree
    '  assuming the team folder is in the navigation pane
    Set sentFolderItems = Session.folders("team mailbox name").folders("Sent").Items

End Sub


Private Sub sentFolderItems_ItemAdd(ByVal Item As Object)

    Dim myReplyAll As MailItem

    If Item.Class = olMail Then

        'do not use InStr unless you change some part of words in original subject
        ' or another reply will be generated
        If Item.Subject = "Test sending email" Then
            Set myReplyAll = Item.ReplyAll

            With myReplyAll
                .HTMLBody = "This is the reply email."
                .Display
            End With
        End If

    End If

End Sub


Sub TestReply()

    Dim objNewMail As MailItem

    'Set objNewMail = CreateItem(olMailItem)

    ' Add, not create, in non-default folder
    Set objNewMail = Session.folders("team mailbox name").folders("Inbox").Items.Add

    ' Outgoing email
    With objNewMail
        .Subject = "Test sending email"
        .To = "abc@abc.com"
        .HTMLBody = "This is the outgoing email."
        .Send
    End With

End Sub

Примечание: Application. и Outlook. не нужны, когда код находится в Перспективы.

0 голосов
/ 07 февраля 2020

Call Send только на исходный адрес электронной почты (objNewMail) после вы создаете ответ.

...