Назад | Перейти на главную страницу

Автоматическое извлечение вложения электронной почты на Exchange Server

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

Каждое вложение Excel необходимо сохранить в одной из трех разных папок.

Можно ли настроить сервер Exchange на автоматическое выполнение этой операции, или я должен запрограммировать сценарий, который отслеживает учетную запись на наличие новых писем?

Я считаю, что это сервер Exchange 2007.

В настоящее время я использую для этой цели скрипт python, он входит в почтовый ящик с POP3, а затем загружает вложения и создает резервные копии электронных писем, с небольшими модами он может очень хорошо удовлетворить ваши потребности, вы можете скомпилировать его с помощью py2exe, если хотите . Вот код.

PS: Этот код был первоначально написан Сурешом Кесмаром (все кредиты ему);)

Боюсь, вам придется сделать это с помощью сценария, поскольку Outlook любит защищать вас от самого себя. Приведенные ниже инструкции взяты из Вот. Я несколько изменил, чтобы применить к вашим таблицам Excel. Имейте в виду, что если они из Excel 2007, вам нужно будет использовать «xlsx» в качестве расширения файла в скрипте.

  1. Откройте Outlook. Я использую Outlook 2007, но это также должно работать в Outlook 2003. Перейдите в Инструменты> Макрос> Редактор Visual Basic.
  2. Выделив папку проекта (в верхнем левом углу на панели PROJECT; я просто использовал проект по умолчанию), щелкните правой кнопкой мыши и выберите Insert> Module. Скопируйте и вставьте следующий код в главное окно редактора:
[vb]Sub SaveAttachmentsToDisk(Item As Outlook.MailItem)

Dim olkFolder As Outlook.MAPIFolder, _

olkAttachment As Outlook.Attachment, _

objFSO As Object, _

strRootFolderPath As String, _

strFilename As String, _

intCount As Integer

‘Change the following path to match your environment

strRootFolderPath = "z:\www\departments\webreports\"

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set olkFolder = Application.ActiveExplorer.CurrentFolder

If Item.Attachments.Count > 0 Then

For Each olkAttachment In Item.Attachments

If objFSO.GetExtensionName(LCase(olkAttachment.FileName))

= "xls" Тогда

strFilename = olkAttachment.FileName

intCount = 0

Do While True

If objFSO.FileExists(strRootFolderPath &

strFilename) Тогда

intCount = intCount + 1

objFSO.deletefile (strRootFolderPath & strFilename)

Else

Exit Do

End If

Loop

olkAttachment.SaveAsFile strRootFolderPath & strFilename

End If

Next

End If

Set objFSO = Nothing

Set olkAttachment = Nothing

Set olkFolder = Nothing

End Sub[/vb]
  1. Вам нужно будет убедиться, что у вас установлен правильный уровень безопасности, чтобы правильно обработать скрипт. В Outlook выберите Инструменты> Макрос> Безопасность. Я выбрал Без проверки безопасности для макросов. Это может быть слишком слабым ограничением для вашей среды; если да, попробуйте следующую максимальную настройку.

  2. Создайте новое правило Outlook (Инструменты> Правила и предупреждения), чтобы отразить ваши изменения. Мое правило ищет новые сообщения с определенного адреса электронной почты и имеет вложение (веб-файл, который я хочу переместить), перемещает сообщение в определенную папку (чтобы я мог иметь резервную копию сообщения / вложения), затем запускает модуль / сценарий выше, чтобы переместить веб-файл в соответствующий общий ресурс samba. Вот как выглядит мое Описание правила:

Apply this rule after the message arrives
from joeuser@email.com  
and which has an attachment  
and on this machine only  
move it to the WEBBACKUP folder  
and run Project1.SaveAttachmentsToDisk
  1. Нажмите Применить и ОК, чтобы сохранить правило. Несколько предостережений: это правило на стороне клиента, поэтому вы должны продолжать работу Outlook, чтобы правило было обработано. Кроме того, код перезапишет любой файл (в моем случае в целевом ресурсе samba), имя которого совпадает с именем вложения. Если вы хотите только сделать копию, вы можете добавить номер к имени вложения. Для этого замените эту строку кода:

objFSO.deletefile (strRootFolderPath и strFilename)

с участием

strFilename = "Копировать (" & intCount & ") из" & olkAttachment.FileName