Вопрос или проблема
Я пытаюсь добавить пользовательское действие к правилу в 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
Пояснение кода:
-
Определение переменной: Переменная
olMailFwd
создаётся для нового письма, основанного на пересылаемом письме. -
Пересылка оригинального сообщения: Метод
Forward
создаёт новое письмо на основе текущего текста и включенных вложений оригинала. -
Очистка тела сообщения: С помощью свойства
.HTMLBody
очищается все содержимое. Чтобы письмо выглядело совсем пустым, мы присваиваем свойству пустую строку""
. -
Тема сообщения: Свойство
.Subject
копирует тему оригинала, но без приставки "FW:". -
Добавление получателя: Замените
email@example.com
на фактический адрес получателя. Это может быть статическим или динамическим в зависимости от ваших требований. -
Отображение или отправка: Включите строку
.Display
, чтобы показать созданное письмо перед отправкой, или замените её на.Send
, чтобы сразу отправить письмо.
С помощью этого макроса вы сможете автоматически пересылать письма, сохраняя только вложения и очищая тело сообщения. Не забудьте протестировать макрос в безопасной среде, чтобы гарантировать его корректную работу перед использованием в производственной среде.