2014-01-10 152 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的標誌,您可以設置它。