В свете моей текущей должности мне приходит много писем с резюме. Причем письма приходят в таком формате: Письмо, в него вложено ~ 10 других писем (с одинаковой темой) и уже в этих письмах лежат по нескольку резюме. Руками все это разбирать слишком долго и скучно, поэтому я разработал скрипт для автоматизации процесса.
Идея скрипта проста -
С помощью COM обращаемся к outlook.
Задаем нужную папку - Inbox идет под номером 6.
Среди писем в папке Inbox ищем нужное письмо.
Берем вложения этого письма и сохраняем их на диск (вложения сохраняются в формате outlook template).
Берём каждое сохраненное письмо и вытаскиваем из него вложения.
Сохраняем вложения в определенную папку.
Если письмо не содержит вложений, то по опыту резюме лежит в теле письма, и в этом случае мы текст письма сохраняем в файл.
В конце удаляем все временные папки.
Ниже листинг скрипта на PowerShell:
1: $ol = new-object -comobject "Outlook.Application"
2: $mapi = $ol.getnamespace("mapi")
3: $items = $Mapi.GetDefaultFolder(6).Items
4:
5: foreach($item in $items)
6: {
7: if(($item.Subject -like "subject") -and ($item.SenderEmailAddress -like "*e-mail*") )
8: {
9: $itemCV = $item
10: Continue
11: }
12: }
13:
14: $itemAttachments = $itemCV.Attachments
15: $directoryAttachments = "msg"
16: $pathAttachments = "D:\" + $directoryAttachments
17:
18: if (!(Test-Path -Path $pathAttachments))
19: {
20: New-Item -Path $pathAttachments -ItemType Directory
21: }
22:
23: $itemAttachments | %{
24: $_.SaveAsFile("$pathAttachments\$count" + ".msg")
25: }
26:
27: $pathCV = "d:\Documents\Собеседования\Резюме\"
28: $nameDirectory = Get-Date -Format dd.MM
29:
30: if (!(Test-Path -Path "$pathCV\$nameDirectory"))
31: {
32: New-Item -Path $pathCV -Name $nameDirectory -ItemType Directory
33: }
34:
35: $files = Get-Item -Path $pathAttachments + "\*"
36:
37: $files | %{
38: $msg = $ol.CreateItemFromTemplate($_.FullName)
39: $msgAttachments = $msg.Attachments
40: if ($msgAttachments.Count -eq 0)
41: {
42: $fileName = $msg.SenderName + ".txt"
43: $msg.Body > "$pathCV\$nameDirectory\$fileName"
44: }
45: else
46: {
47: $msgAttachments | %{
48: $_.SaveAsFile("$pathCV\$nameDirectory" + "\" + $_.FileName)
49: }
50: }
51: }
52:
53: Remove-Item $pathAttachments -Recurse
Как обычно, powershell своим могуществом пришел ко мне на помощь. Кстати, очень скоро Игорь Любин расскажет чем еще powershell может помочь тестировщику на супер конференции ConfeT&QA.
есть аутлук.
ОтветитьУдалить"почтовый ящик 1@www.ru"
и подключин еще один "почтовый ящик 2@www.ru"
обратиться к первому можно так :
$outlook = New-Object -com outlook.application
$ns = $Outlook.GetNamespace("MAPI")
и тд
Вопрос как обратиться ко второму?