Решено Слетела кодировка в приветственных письмах Exchange 2016

sashok

Почетный гость
Всем привет.
Слетела кодировка в приветственных письмах. Вероятно после обновления до CU23 Apr24HU. Заметили вчера.
welcome.html не редактировался, кодировка utf-8, да и раньше все приходило норм.
Что-то поломалось, не могу понять что. Есть у кого-нибудь идеи?
xml брал и с оф сайта ms и с хабра, сейчас файлик выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
<Feature Name="WelcomeEmail" Cmdlets="New-Mailbox,Enable-Mailbox">
<ApiCall Name="OnComplete">
if($succeeded) {
# Определение переменных
$WelcomeMessage = "c:\scripts\welcome.html"
$SenderEmail = "sender@domain.local"
$MessageSubject = "Welcome to out company!"
$SMTPServer = "mail.domain.local"
$TargetOU = "domain.local/companyusers"
# Указание на просмотр всего леса
Set-ADServerSettings -ViewEntireForest $true
# Определение Alias в случае, если была исполнена команда New-Mailbox
if ($provisioningHandler.TaskName -eq "New-Mailbox") {
$UsrAlias = $provisioningHandler.UserSpecifiedParameters["Alias"]
$UsrNewMailbox = $true
}
# Определение Alias в случае, если была исполнена команда Enable-Mailbox
if ($provisioningHandler.TaskName -eq "Enable-Mailbox") {
$UsrIdentity = $provisioningHandler.UserSpecifiedParameters["Identity"].ToString()
$UsrAlias = (Get-Mailbox -Identity $UsrIdentity).Alias
}
# Определение, создается ли архивный ящик (нам не нужно приветствовать пользователя при создании архива)
if ($provisioningHandler.UserSpecifiedParameters.Contains("Archive") -eq $true) {
$UsrArchive = $true
}
# Определение SMTP-адреса по Alias
$UsrAddr = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).PrimarySmtpAddress.ToString()
# Определение Organizational Unit, в котором создан пользователь
$UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
# Отправка уведомления при создании нового почтового ящика в указанном OU
if (($UsrOU -match "$TargetOU") -and (($UsrArchive -ne $true) -or ($UsrNewMailbox -eq $true))){
$UsrMsg = [string](Get-Content "$WelcomeMessage")
Send-MailMessage -SmtpServer "$SMTPServer" -To "$UsrAddr" -From "$SenderEmail" -Subject "$MessageSubject" -Body $UsrMsg -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8)
}
# Тихая очистка переменных
if ($UsrAlias) { Remove-Variable UsrAlias }
if ($UsrAddr) { Remove-Variable UsrAddr }
if ($UsrOU) { Remove-Variable UsrOU }
if ($UsrMsg) { Remove-Variable UsrMsg }
if ($UsrIdentity) { Remove-Variable UsrIdentity }
if ($UsrSamAccountName) { Remove-Variable UsrSamAccountName }
if ($UsrArchive) { Remove-Variable UsrArchive }
if ($UsrNewMailbox) { Remove-Variable UsrNewMailbox }
}
</ApiCall>
</Feature>
</Configuration>
 
Последнее редактирование модератором:
А нельзя отключить scripting agent / пересоздать ? Потом включить ?
Enable-CmdletExtensionAgent "Scripting Agent"
 
А нельзя отключить scripting agent / пересоздать ? Потом включить ?
Enable-CmdletExtensionAgent "Scripting Agent"
Это пробовал. Разные xml и html, в разных кодировках тоже пробовал. Не помогает.
Если удалить -Encoding ([System.Text.Encoding]::UTF8) , то и тема приходит крякозябрами.
 
это на разных АРМ происходит ? Может ли это быть настройка клиента outlook / браузера ?
 
это на разных АРМ происходит ? Может ли это быть настройка клиента outlook / браузера ?
Мы пробовали создавать ящики и на win11 и на macOS. Через ecp. Письма отображаются криво и в браузерах и в Outlook.
Если делаю Get-Content c:\scripts\welcome.html , текст виден в кириллице.
Проблема, как мне кажется, в почтовых серверах. Стоят англоязычные win2012r2.
 
Feature Name="NewOrEnableMailbox" Cmdlets="New-Mailbox,Enable-Mailbox">
<ApiCall Name="OnComplete">
if($succeeded){
$TargetOU = "domain.local/DomainOU/Users"
# Указание на просмотр всего леса
Set-ADServerSettings -ViewEntireForest $true
if ($provisioningHandler.TaskName -eq "New-Mailbox") {
start-sleep -s 10
# Replace place holder.
$USRdname = $provisioningHandler.UserSpecifiedParameters["Name"]
$tempmsg = [string] (get-content ("c:\scripts\WelcomeMSG.html"))
#$tempmsg = $tempmsg.replace('NewUser00', $USRdName)
# Picking Primary SMTP address,saving to $pSMTP to send email.
$UsrAlias=$provisioningHandler.UserSpecifiedParameters["Alias"]
$pSMTP = (get-mailbox $UsrAlias | select-object PrimarySMTPAddress | Format-Wide | Out-String ).trim()
$UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
#Устанавливаем политику хранения
Set-Mailbox $USRdname -RetentionPolicy "Retention Policy"
}
elseif ($provisioningHandler.TaskName -eq "Enable-Mailbox") {
start-sleep -s 10
# Picking Primary SMTP address,saving to $pSMTP to send email.
$UsrAlias = $provisioningHandler.UserSpecifiedParameters["Alias"]
$USRdName = (get-mailbox $UsrAlias | select-object Name | Format-Wide | Out-String ).trim()
$pSMTP = (get-mailbox $UsrAlias | select-object PrimarySMTPAddress | Format-Wide | Out-String ).trim()
$UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
# Replace place holder.
$tempmsg = [string] (get-content ("c:\scripts\WelcomeMSG.html"))
#$tempmsg = $tempmsg.replace('NewUser00', $USRdName)
#Устанавливаем политику хранения
Set-Mailbox $UsrAlias -RetentionPolicy "Retention Policy"
}
if ($provisioningHandler.UserSpecifiedParameters.Contains("Archive") -eq $true) {
$UsrArchive = $true
}
if (($UsrOU -match "$TargetOU") -and ($UsrArchive -ne $true)) {
# Please give the correct HUB serve IP address in the following line.
$HUBServer="mail.domain.local"
$HUBTask = new-object net.mail.smtpclient($HUBServer)
# Email with attachment will be sent from the address given in the following line.
$EMail = new-object net.mail.mailmessage
$EMail.From = "help@domain.local"
$Email.Sender = "help@domain.local"
$EMail.ReplyTo = "admin@domain.local"
# Email with attachment will be sent TO the address given in the following line.
$EMail.To.Add($pSMTP)
# Email Subject and Body details are speficied in following lines
$EMail.Subject = "Добро пожаловать в сеть нашей компании!"
$EMail.Body = $tempmsg
$Email.IsBodyHtml = $true
$HUBTask.send($EMail)
}
if ($UsrAlias) { Remove-Variable UsrAlias }
if ($pSMTP) { Remove-Variable pSMTP }
if ($USRdName) { Remove-Variable USRdName }
if ($UsrArchive) { Remove-Variable UsrArchive }
if ($TempMsg) { Remove-Variable TempMsg }
if ($EMail) { Remove-Variable Email }
if ($HUBTask) { Remove-Variable HUBTask }
if ($HUBServer) { Remove-Variable HUBServer }
if ($UsrOU) { Remove-Variable UsrOU }
}
</ApiCall>
</Feature>
 
Последнее редактирование:
Всем привет.
Слетела кодировка в приветственных письмах. Вероятно после обновления до CU23 Apr24HU. Заметили вчера.
welcome.html не редактировался, кодировка utf-8, да и раньше все приходило норм.
Что-то поломалось, не могу понять что. Есть у кого-нибудь идеи?
xml брал и с оф сайта ms и с хабра, сейчас файлик выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
<Feature Name="WelcomeEmail" Cmdlets="New-Mailbox,Enable-Mailbox">
<ApiCall Name="OnComplete">
if($succeeded) {
# Определение переменных
$WelcomeMessage = "c:\scripts\welcome.html"
$SenderEmail = "sender@domain.local"
$MessageSubject = "Welcome to out company!"
$SMTPServer = "mail.domain.local"
$TargetOU = "domain.local/companyusers"
# Указание на просмотр всего леса
Set-ADServerSettings -ViewEntireForest $true
# Определение Alias в случае, если была исполнена команда New-Mailbox
if ($provisioningHandler.TaskName -eq "New-Mailbox") {
$UsrAlias = $provisioningHandler.UserSpecifiedParameters["Alias"]
$UsrNewMailbox = $true
}
# Определение Alias в случае, если была исполнена команда Enable-Mailbox
if ($provisioningHandler.TaskName -eq "Enable-Mailbox") {
$UsrIdentity = $provisioningHandler.UserSpecifiedParameters["Identity"].ToString()
$UsrAlias = (Get-Mailbox -Identity $UsrIdentity).Alias
}
# Определение, создается ли архивный ящик (нам не нужно приветствовать пользователя при создании архива)
if ($provisioningHandler.UserSpecifiedParameters.Contains("Archive") -eq $true) {
$UsrArchive = $true
}
# Определение SMTP-адреса по Alias
$UsrAddr = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).PrimarySmtpAddress.ToString()
# Определение Organizational Unit, в котором создан пользователь
$UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
# Отправка уведомления при создании нового почтового ящика в указанном OU
if (($UsrOU -match "$TargetOU") -and (($UsrArchive -ne $true) -or ($UsrNewMailbox -eq $true))){
$UsrMsg = [string](Get-Content "$WelcomeMessage")
Send-MailMessage -SmtpServer "$SMTPServer" -To "$UsrAddr" -From "$SenderEmail" -Subject "$MessageSubject" -Body $UsrMsg -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8)
}
# Тихая очистка переменных
if ($UsrAlias) { Remove-Variable UsrAlias }
if ($UsrAddr) { Remove-Variable UsrAddr }
if ($UsrOU) { Remove-Variable UsrOU }
if ($UsrMsg) { Remove-Variable UsrMsg }
if ($UsrIdentity) { Remove-Variable UsrIdentity }
if ($UsrSamAccountName) { Remove-Variable UsrSamAccountName }
if ($UsrArchive) { Remove-Variable UsrArchive }
if ($UsrNewMailbox) { Remove-Variable UsrNewMailbox }
}
</ApiCall>
</Feature>
</Configuration>
Решил вот так, html-файл должен быть в utf-8
Feature Name="NewOrEnableMailbox" Cmdlets="New-Mailbox,Enable-Mailbox">
<ApiCall Name="OnComplete">
if($succeeded){
$TargetOU = "domain.local/DomainOU/Users"
# Указание на просмотр всего леса
Set-ADServerSettings -ViewEntireForest $true
if ($provisioningHandler.TaskName -eq "New-Mailbox") {
start-sleep -s 10
# Replace place holder.
$USRdname = $provisioningHandler.UserSpecifiedParameters["Name"]
$tempmsg = [string] (get-content ("c:\scripts\WelcomeMSG.html"))
#$tempmsg = $tempmsg.replace('NewUser00', $USRdName)
# Picking Primary SMTP address,saving to $pSMTP to send email.
$UsrAlias=$provisioningHandler.UserSpecifiedParameters["Alias"]
$pSMTP = (get-mailbox $UsrAlias | select-object PrimarySMTPAddress | Format-Wide | Out-String ).trim()
$UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
#Устанавливаем политику хранения
Set-Mailbox $USRdname -RetentionPolicy "Retention Policy"
}
elseif ($provisioningHandler.TaskName -eq "Enable-Mailbox") {
start-sleep -s 10
# Picking Primary SMTP address,saving to $pSMTP to send email.
$UsrAlias = $provisioningHandler.UserSpecifiedParameters["Alias"]
$USRdName = (get-mailbox $UsrAlias | select-object Name | Format-Wide | Out-String ).trim()
$pSMTP = (get-mailbox $UsrAlias | select-object PrimarySMTPAddress | Format-Wide | Out-String ).trim()
$UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
# Replace place holder.
$tempmsg = [string] (get-content ("c:\scripts\WelcomeMSG.html"))
#$tempmsg = $tempmsg.replace('NewUser00', $USRdName)
#Устанавливаем политику хранения
Set-Mailbox $UsrAlias -RetentionPolicy "Retention Policy"
}
if ($provisioningHandler.UserSpecifiedParameters.Contains("Archive") -eq $true) {
$UsrArchive = $true
}
if (($UsrOU -match "$TargetOU") -and ($UsrArchive -ne $true)) {
# Please give the correct HUB serve IP address in the following line.
$HUBServer="mail.domain.local"
$HUBTask = new-object net.mail.smtpclient($HUBServer)
# Email with attachment will be sent from the address given in the following line.
$EMail = new-object net.mail.mailmessage
$EMail.From = "help@domain.local"
$Email.Sender = "help@domain.local"
$EMail.ReplyTo = "admin@domain.local"
# Email with attachment will be sent TO the address given in the following line.
$EMail.To.Add($pSMTP)
# Email Subject and Body details are speficied in following lines
$EMail.Subject = "Добро пожаловать в сеть нашей компании!"
$EMail.Body = $tempmsg
$Email.IsBodyHtml = $true
$HUBTask.send($EMail)
}
if ($UsrAlias) { Remove-Variable UsrAlias }
if ($pSMTP) { Remove-Variable pSMTP }
if ($USRdName) { Remove-Variable USRdName }
if ($UsrArchive) { Remove-Variable UsrArchive }
if ($TempMsg) { Remove-Variable TempMsg }
if ($EMail) { Remove-Variable Email }
if ($HUBTask) { Remove-Variable HUBTask }
if ($HUBServer) { Remove-Variable HUBServer }
if ($UsrOU) { Remove-Variable UsrOU }
}
</ApiCall>
</Feature>
 
Назад
Верх