2014-01-10 3 views
0

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

Вот код Командлет:

[Cmdlet(VerbsCommunications.Send, "ExchangeEmail")] 
public class SendExchageEmailCommand : Cmdlet 
{ 
    [Parameter(Mandatory=true)] 
    public string ServerUri { get; set; } 

    [Parameter(Mandatory=true)] 
    public string Subject { get; set; } 

    [ValidatePattern("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z][email protected]([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$")] 
    [Parameter(Mandatory = true)] 
    public string To { get; set; } 

    [ValidatePattern("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z][email protected]([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$")] 
    [Parameter] 
    public string From { get; set; } 

    [Parameter] 
    public string Body { get; set; } 

    protected override void ProcessRecord() 
    { 
     var service = new ExchangeService(ExchangeVersion.Exchange2007_SP1) {Url = new Uri(ServerUri)}; 

     var mail = new EmailMessage(service) {Subject = Subject}; 

     if (!string.IsNullOrEmpty(From)) 
     { 
      mail.From = From; 
     } 

     if (!string.IsNullOrEmpty(Body)) 
     { 
      mail.Body = Body; 
     } 

     mail.ToRecipients.Add(To); 

     mail.Send(); 
    } 
} 

И код PowerShell выглядит следующим образом:

$subject = "Testing Reports" 

$body = "" 
$files = Get-ChildItem $ReportsFolder 
foreach ($file in $files) 
{ 
    $body += "`r`n" 
    $body += $file.FullName 
} 

Send-ExchangeEmail -ServerUri $SMTPServerURI -Subject $subject -To $MessageTo -Body $body 

Есть ли способ, чтобы гарантировать, что пустое пространство передается в командлет (и я даже право что это PS зачистки пробелов?)

+1

Я не думаю, что PowerShell удаляет пробелы. Я считаю, что вы отправляете тело электронной почты так, как будто это HTML, а не обычный текст. Я не знаю, какой класс EmailMessage (поскольку я не знаю пространство имен или что-то еще), но в классе MailMessage есть флаг для IsBodyHtml, который вы можете установить. С другой стороны, в зависимости от версии PowerShell у вас может быть встроенный командлет Send-MailMessage. –

+0

В чем преимущество этого метода с использованием 'send-mailmessage' с вашим сервером Exchange в качестве хоста SMTP? На первый взгляд кажется, что вы заново изобрели этот командлет без каких-либо дополнительных функций. – alroc

+0

@robert: если вы продвигаете свой комментарий к ответу, я помечаю его как принятый. –

ответ

1

Я не думаю, что PowerShell удаляет пробелы. Я считаю, что вы отправляете тело электронной почты так, как будто это HTML, а не обычный текст. Я не знаю, какой класс EmailMessage (поскольку я не знаю пространство имен или что-то еще), но в классе MailMessage есть флаг для IsBodyHtml, который вы можете установить.

 Смежные вопросы

  • Нет связанных вопросов^_^