Тема письма с кодировкой - PullRequest
3 голосов
/ 20 сентября 2011

Я использую сообщение для отправки электронной почты в нашу Систему поддержки. Но когда он отправляет электронное письмо, он показывает строку темы, как этот экран!

=? Us-ascii? Q? R899076: Aman: Обзор системы? =

В теме я использую переменную:

$vUserName = (Get-Item env:\username).Value
$vComputerName = (Get-Item env:\Computername).Value
$subject = "$vComputerName : $vUserName : System Summary"

, а затем

send-MailMessage  -SmtpServer Smtp-local -To $to -From $from -Subject $subject -Body $body  -BodyAsHtml -Priority High 

Но когда я получаю это электронное письмо в Outlook, оно прекрасно смотрится в любой идее?


На самом деле этот скрипт длиной около 150 строк и тело сервера электронной почты и smtp уже указаны на сервере. да я пробовал переменную $subject = "$env:ComputerName : $env:UserName : System Summary" и результат тот же.

да, я попробовал опцию - encoding, и она выдает ошибку

Send-MailMessage: Невозможно связать параметр 'Кодировка'. Не удается преобразовать значение "utf8" типа "Syste m.String "для ввода" System.Text.Encoding ". В D: \ PowerShell \ MyScripts \ SystemInfo \ SysInfo-V6-test [notfinal] .ps1: 151 char: 84 + send-MailMessage -SmtpServer $ smtp -To $ to -From $ from -Subject $ subject -Кодирование <<<< utf8 -B ody $ body -Attachments "$ filepath \ $ name.html" -BodyAsHtml -Priority High + CategoryInfo: InvalidArgument: (:) [Send-MailMessage], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Commands.SendMai lMessage </p>

Любая подсказка?

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

Вы можете написать пользовательскую функцию для отправки с использованием .net вместо использования командлета Send-MailMessage.Это намного грубее, но обходит проблему.

Примерно так:

Function SendEmail  ($emailFrom, $emailTo, $subject, $body, $attachment) {

# Create from/to addresses  
$from = New-Object System.Net.Mail.MailAddress $emailFrom
$to =   New-Object System.Net.Mail.MailAddress $emailTo

# Create Message  
$message = new-object System.Net.Mail.MailMessage $from, $to  
$message.Subject = $subject  
$message.Body = $body

$attachment = new-object System.Net.Mail.Attachment($attachment)
$message.Attachments.Add($attachment)


# Set SMTP Server and create SMTP Client  
$server = <your server> 
$client = new-object system.net.mail.smtpclient $server  

# Send the message  
"Sending an e-mail message to {0} by using SMTP host {1} port {2}." -f $to.ToString(), $client.Host, $client.Port  
try {  
   $client.Send($message)  
   "Message to: {1}, from: {0} has beens successfully sent" -f $from, $to  
}  
catch {  
  "Exception caught in CreateTestMessage: {0}" -f $Error.ToString()  
} 

}

(Спасибо Томасу Ли (tfl@psp.co.uk) - я поправил это из егокод на http://powershell.com/cs/media/p/357.aspx)

1 голос
/ 20 сентября 2011

Командлет Send-MailMessage не имеет выходных данных после отправки сообщений электронной почты. Интересно, откуда вывод?Можете ли вы включить команду, которую вы используете, и вывод?

Что касается строки вашей темы, вы можете уменьшить ее до одной строки:

$subject = "$env:ComputerName : $env:UserName : System Summary"

Send-MailMessage имеет параметр Encoding,Вы пробовали это?

0 голосов
/ 13 октября 2013

Это случилось со мной, когда я использовал Send-MailMessage с кодировкой по умолчанию (ASCII), когда в теме были пробелы.

Во-первых, чтобы ответить на вопрос о параметре Encoding: вы пытаетесь передать его в виде строки (то есть "-Encoding ASCII"), когда вместо этого следует использовать синтаксис этого типа: "-Encoding ([System. Text.Encoding] :: ASCII)».

Эта проблема "кодирования в теме" произошла со мной, и я сузил ее до пробелов в теме. Для демонстрации:

Не будет содержать кодировку в теме:

Send-MailMessage -To "alice@example.com" -From "bob@example.com" -Smtp "localhost" -Subject "one" -BodyAsHtml "body1" -Encoding ([System.Text.Encoding]::ASCII)

Но это будет:

Send-MailMessage -To "alice@example.com" -From "bob@example.com" -Smtp "localhost" -Subject "one two" -BodyAsHtml "body1" -Encoding ([System.Text.Encoding]::ASCII)

Обратите внимание, что единственным существенным отличием является пространство в объекте.

Если я укажу UTF8 в качестве кодировки, то в теме нет кодировки:

Send-MailMessage -To "alice@example.com" -From "bob@example.com" -Smtp "localhost" -Subject "one" -BodyAsHtml "body1" -Encoding ([System.Text.Encoding]::UTF8)

Но, как вы говорите, в Outlook все выглядит хорошо, поэтому я предполагаю, что тема правильная. Я не эксперт по форматам электронной почты или кодированию текста, поэтому я не буду размышлять о том, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...