Макрос VBA для Outlook, чтобы пересылать вложение электронной почты, но удалить текст сообщения.

Вопрос или проблема

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

Мне нужно написать код для части ‘очистки содержимого’. На данный момент у меня есть следующее:

Public Sub MyMacro(msg As MailItem)
  Dim strID As String
  Dim olNS As NameSpace
  Dim olMail As MailItem

  strID = msg.EntryID
  Set olNS = Application.GetNamespace("MAPI")
  Set olMail = olNS.GetItemFromID(strID)

  With olMail.HTMLBody = " "
  End With

  Set olMail = Nothing
  Set olNS = Nothing
End Function

После .HTMLBody я не могу удалить ничего.

Правка: Добавил фактическое требование, скрытое в комментарии. “Мне нужно, чтобы оригинальное содержимое электронной почты было удалено, включая информацию о том, от кого оно. В общем, чтобы это выглядело как совершенно новое электронное письмо.”

Оператор “With” позволяет вам ссылаться на несколько свойств объекта (в данном случае olMail) в блоке.

Поскольку вы устанавливаете только одно свойство, нет необходимости использовать блок “With”. Попробуйте без операторов “With/End With”, просто используя olMail.HTMLBody = "", и удалите строку End With.

Не вижу, как код может что-то сделать с учётом оператора with и

Public Sub и End Function

Примечание: Код не тестировался. В нём могут быть опечатки и другие проблемы.

Public Sub MyMacro(msg As MailItem)
  Dim strID As String
  Dim olNS As NameSpace
  Dim olMail As MailItem

  Dim olMailFwd as Mailitem

  strID = msg.EntryID
  Set olNS = Application.GetNamespace("MAPI")
  Set olMail = olNS.GetItemFromID(strID)

  'With olMail
  '  .HTMLBody = " "
  'End With

  Set olMailFwd = olMail.Forward

  With olMailFwd
      .HTMLBody = ""
      .subject = olMail.subject ' Нет FW:
      .To = "[email protected]"
  end with

  olMailFwd.display
  ' после первоначального тестирования изменить на
  ' olMailFwd.Send

  Set olMailFwd = Nothing
  Set olMail = Nothing
  Set olNS = Nothing

End Sub

Если только у вас нет ещё чего-то, чем вы не поделились.

Public Sub MyMacro(msg As MailItem)

  Dim olMailFwd as Mailitem

  Set olMailFwd = msg.Forward

  With olMailFwd
      .HTMLBody = ""
      .subject = msg.subject ' Нет FW:
      .To = "[email protected]"
  end with

  olMailFwd.display
  ' после первоначального тестирования изменить на
  ' olMailFwd.Send

  Set olMailFwd = Nothing

End Sub

Ответ или решение

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

Вот полный пример макроса:

Public Sub MyMacro(msg As MailItem)

    Dim olMailFwd As MailItem

    ' Создаём новое письмо на основе пересылаемого
    Set olMailFwd = msg.Forward

    ' Очищаем тело пересылаемого письма
    With olMailFwd
        .HTMLBody = "" ' Удаляем содержимое тела сообщения
        .Subject = msg.Subject ' Оставляем тему без "FW:" (пересылка)

        ' Измените <email@example.com> на реальный адрес получателя
        .To = "email@example.com"  

        ' Отобразить письмо для проверки перед отправкой
        .Display
        ' Раскомментируйте следующую строку, чтобы отправить письмо автоматически
        ' .Send
    End With

    ' Освобождаем память
    Set olMailFwd = Nothing

End Sub

Пояснение кода:

  1. Определение переменной: Переменная olMailFwd создаётся для нового письма, основанного на пересылаемом письме.

  2. Пересылка оригинального сообщения: Метод Forward создаёт новое письмо на основе текущего текста и включенных вложений оригинала.

  3. Очистка тела сообщения: С помощью свойства .HTMLBody очищается все содержимое. Чтобы письмо выглядело совсем пустым, мы присваиваем свойству пустую строку "".

  4. Тема сообщения: Свойство .Subject копирует тему оригинала, но без приставки "FW:".

  5. Добавление получателя: Замените email@example.com на фактический адрес получателя. Это может быть статическим или динамическим в зависимости от ваших требований.

  6. Отображение или отправка: Включите строку .Display, чтобы показать созданное письмо перед отправкой, или замените её на .Send, чтобы сразу отправить письмо.

С помощью этого макроса вы сможете автоматически пересылать письма, сохраняя только вложения и очищая тело сообщения. Не забудьте протестировать макрос в безопасной среде, чтобы гарантировать его корректную работу перед использованием в производственной среде.

Оцените материал
Добавить комментарий

Капча загружается...