2017-04-10 126 views
-1

我正在研究一个PowerShell脚本,每次发送多次不同主题和正文的电子邮件。函数多次发送电子邮件

我试图将Send-MailMessage转移到一个函数或我可以用来减少代码行的东西。

$Sender = '[email protected]' 
$text = "<html><body>" 
$text += "<p>Welcome</p>" 

### A cmdlet that would give recipient email address 
$Recipient = (Get-Details -user $user).email 

$smtp = "server.example.com" 
$subject = "welcome email" 

Send-MailMessage -BodyAsHtml $text -from $Sender -SmtpServer $smtp -Priority high -to $Recipient -Subject $subject 

Write-Output "executing commands to capture results" 
Write-Output "" 
### Few Commands executed in this step 
Write-Output "Analyzing results" 
### Few commands executed in this step 

$newtext = "<html><body>" 
$newtext += "Congrats, you are selected" 
$newsubject = "results email" 

Send-MailMessage -BodyAsHtml $newtext -from $Sender -SmtpServer $smtp -Priority high -to $Recipient -Subject $subject 
+0

无论如何,您需要格式化主体,并且将一行“Send-MailMessage”包装到函数中是不行的。 – Vesper

+0

我删除了_任何建议,或者我在脚本中可以改进的地方?_因为这可能使问题太广泛。如果你真的想要检查你的脚本,可以考虑在CodeReview.SE上提问 – Matt

回答

0

您可以创建这样的函数:

Function Send-Email($text,$subject,$recipient) 
{ 
    Send-MailMessage -BodyAsHtml $text -From "[email protected]" 
     -SmtpServer "server.example.com" -Priority High -To $recipient -Subject $subject 
} 

你可以把它想:

Send-Email -text "Hello" -subject "Test" -recipient "[email protected]" 

您可以添加或删除参数取决于什么会改变,虽然。假设smtp服务器不会改变,例如,这不需要作为参数。

0

我试图将Send-MailMessage转移到一个函数或我可以用来减少代码行的东西。

为一行写一个函数可以如果选项很多并且永远不会改变,那么它会很有用。但是你确实有一个变化。还有另一个PowerShell功能也可以在这里工作。 Splatting!

$emailParameters = @{ 
    From = $Sender 
    SmtpServer = $smtp 
    Priority = "high" 
    To = $Recipient 
    Subject = $subject 
} 

Send-MailMessage -BodyAsHtml $text @emailParameters 
# ... other code and stuff 
Send-MailMessage -BodyAsHtml $newtext @emailParameters 

现在你仍然只需要在一个地方的变化和代码可以说是更简洁。

另一点是,当您一次制作多行字符串时,应该在脚本过程中构建,您始终可以在此处使用字符串。你只有两条线,但如果你的代码随时间演变是一个很好的战术尽早开始,而不是许多$object += "string"线

$text = @" 
<html><body> 
<p>Welcome</p> 
"@ 

注意缩进在结果here-string保留。 "@必须出现在它自己的行中,没有空白。使用双引号意味着您仍然可以在其中扩展变量。