Extração automatizada de anexos de email no Exchange Server

2

Uma conta de e-mail do Exchange foi criada por meio da qual receberei e-mails diários com três anexos do Excel diferentes.

Cada anexo do Excel deve ser salvo em uma das três pastas diferentes.

Um servidor do Exchange pode ser configurado para fazer isso automaticamente ou eu devo programar um script que monitore a conta para novos e-mails?

Eu acredito que é um servidor do Exchange 2007.

    
por lamcro 21.11.2009 / 15:55

2 respostas

3

Atualmente estou usando um script python para essa finalidade, ele faz o login no mailbow trought POP3 e depois baixa os anexos e faz backup dos e-mails, com pequenos mods que podem atender às suas necessidades muito bem, você pode compilar com py2exe se você deseja isso. Aqui está o código .

PS: Este código foi originalmente escrito por Suresh Kesmar (todos os créditos para ele);)

    
por 21.11.2009 / 16:23
2

Eu tenho medo que você tenha que fazer isso com um script, já que o Outlook gosta de protegê-lo de si mesmo. As instruções abaixo são de aqui . Eu modifiquei um pouco para aplicar às suas planilhas do Excel. Tenha em mente que, se eles são do Excel 2007, você terá que usar "xlsx" para a sua extensão de arquivo no script.

  1. Abra o Outlook. Estou usando o Outlook 2007, mas isso também deve funcionar no Outlook 2003. Vá em Ferramentas > Macro > Editor do Visual Basic.
  2. Com a pasta do projeto destacada (no canto superior esquerdo, no painel PROJETO; acabei de usar o projeto padrão), clique com o botão direito e escolha Inserir > Módulo. Copie e cole o seguinte código na janela principal do editor:
[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" Then

strFilename = olkAttachment.FileName

intCount = 0

Do While True

If objFSO.FileExists(strRootFolderPath &

strFilename) Then

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. Você precisará garantir que tenha o nível de segurança adequado configurado para processar adequadamente o script. No Outlook, vá para Ferramentas > Macro > Segurança. Eu escolhi Sem verificação de segurança para macros. Isso pode ser muito solto de uma restrição para o seu ambiente; Nesse caso, tente a próxima configuração mais alta.

  2. Crie uma nova regra do Outlook (Ferramentas > Regras e alertas) para refletir suas alterações. Minha regra procura novas mensagens de um endereço de e-mail específico e tem um anexo (o arquivo da web que desejo mover), move a mensagem para uma pasta específica (para que eu possa ter um backup da mensagem / anexo) e executa module / script acima para mover o arquivo da web para o compartilhamento de samba apropriado. Aqui está a aparência da descrição da minha regra:

Apply this rule after the message arrives
from [email protected]  
and which has an attachment  
and on this machine only  
move it to the WEBBACKUP folder  
and run Project1.SaveAttachmentsToDisk
  1. Clique em Aplicar e em OK para salvar sua regra. Um par de advertências: essa é uma regra do lado do cliente, portanto, você deve manter o Outlook em execução para que a regra seja processada. Além disso, o código irá sobrescrever qualquer arquivo (no meu caso, no compartilhamento de samba de destino) que tenha o mesmo nome do anexo. Se você deseja apenas fazer uma cópia, pode acrescentar um número ao nome do anexo. Para fazer isso, substitua esta linha de código:

objFSO.deletefile (strRootFolderPath & strFilename)

com

strFilename = "Copy (" & intCount & ") of " & olkAttachment.FileName

    
por 21.11.2009 / 16:15