Недавно столкнулся с интересной особенностью Service Manager 2012 R2 при настройке обработки входящей почты из Lotus Notes для создания инцидентов.
Обратите внимание на красную скобку - такое происходило при получении писем от более чем 10 различных адресатов, использующих SCSM 2012 R2.
Письмо появлялось в папке C:\inetpub\mailroot\Drop\ и вроде нормально обрабатывалось, однако, как видно из рисунка ниже, система почему-то использовала произвольный почтовый адрес, заменяя тот, который был указан в поле From.
Причина кроется в поле From - почтовый адрес не был взят в < >.
Чтобы победить этот недуг я написал скрипт (см. ниже), который поместил в автозагрузку при старте системы (Local GPO, через gpedit.msc) без выполнения логона какого-либо пользователя.
Собственно сам скрипт - немного кривоватый, но пользоваться можно:
#Version 1.0
#--------------------------------------------------------------------------
#Description
#-------------------------------------------------------------------------
#This script replaces incorrect syntax in string of *.eml files: "From: email@address.domain" to "From: <email@address.domain>"
#General problem described here: http://social.technet.microsoft.com/Forums/systemcenter/en-US/b3fd6aec-0c7a-4121-af49-90c473c8293b/affected-user-in-incident-created-by-mail-is-wrong?forum=systemcenterservicemanager
#That makes SCSM 2012 R2 SMTP E-mail ServiceManager.InboundEmail.Configuration.xml management pack work correctly during workflow of parsing incoming e-mails
#To use this script you need to place it as a task into the Scheduler of the Windows Server which you're using as a Root server of the SCSM MGMT Group.
#It's true only for SMTP and not for Exchange Connector
#Setting up infinity cycle
while(1)
{
#Forming an Array of the *.eml files;
$MyArray = Get-Item C:\inetpub\mailroot\Drop\* | Where-Object {$_.Name -like "*.eml"}
#Write-Host "The array contains: " $MyArray
Foreach ($ArrayMember in $MyArray)
{
#Write-Host "For the member " $ArrayMember "of the array"
#Searching for a text pattern in each letter to identify a need of change
$A = Select-String -path $ArrayMember -pattern "From: <"
#Write-Host $A
#Checking if < > are already used;
IF ($A -eq $null)
{
#If <> are not used - do changes;
#Getting content of the E-mail file that is a member of a $MyArray;
$OriginalString = Get-Content $ArrayMember
#Changing strings;
$OriginalString = $OriginalString -replace "From: ","From: <"
$OriginalString = $OriginalString -replace '@target.domain', '@target.domain>'
#Writing to same file correct information
$OriginalString | Out-File $ArrayMember
#Write-Host "...E-Mail " $ArrayMember " corrected"
}
ELSE
{
#Write-Host "...string not found"
}
}
start-sleep -seconds 1
}
Комментариев нет:
Отправить комментарий
Уважаемый коллега, Ваш комментарий пройдёт модерацию, чтобы избежать спам-атак в ленте. Спасибо за понимание.