2014-01-10 154 views
0

我已经为Powershell创建了一个小的cmdlet,可以使用交换服务发送电子邮件。当我在Powershell中传递消息正文时,似乎是从字符串中删除所有空白字符。Powershell cmdlet删除空白

下面是cmdlet的代码:

[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 

有什么办法,以确保空白传递到cmdlet的(和我是连权它是PS剥离空白?)

+1

我不认为PowerShell正在删除空白。我发现你发送电子邮件正文的可能性更大,好像它是HTML,而不是纯文本。我不知道EmailMessage是什么类(因为我不知道命名空间或任何东西),但是在MailMessage类中有一个IsBodyHtml的标志,您可以设置它。另一方面,根据您拥有的PowerShell版本,可能已经有内置的Send-MailMessage cmdlet。 –

+0

这种方法相对于将SMTP服务器作为SMTP主机使用'send-mailmessage'有什么好处?表面上,它看起来像你没有额外的功能重新创建该cmdlet。 – alroc

+0

@robert:如果您推荐您的评论回答,我会将其标记为已接受。 –

回答

1

我不认为PowerShell删除空白。我发现你发送电子邮件正文的可能性更大,好像它是HTML,而不是纯文本。我不知道EmailMessage是什么类(因为我不知道命名空间或任何东西),但是在MailMessage类中有一个IsBodyHtml的标志,您可以设置它。