2017-05-08 41 views
1

我有一个脚本,用于查找文件夹以获取更新,并在出现任何更新时发送电子邮件。如何将电子邮件正文更改或转换为URL或HTML链接而不是文本?Powershell将正文转换为HTML正文

下面的路径和服务器就是例子。

这里是我的脚本:

Param (
    [string]$Path = "\\Desktop\Myfolder\status updates", 
    [string]$SMTPServer = "smtp.myfolder.com", 
    [string]$From = "[email protected]", 
    [string]$To = "[email protected]", 
    [string]$CC = "[email protected]", 
    [string]$Subject = "New Status Report" 
    ) 

$SMTPMessage = @{ 
    To = $To 
    Cc = $cc 
    From = $From 
    Subject = "$Subject" 
    Smtpserver = $SMTPServer  
} 

$File = Get-ChildItem $Path | Where { $_.LastWriteTime -ge [datetime]::Now.AddMinutes(-10) } 
If ($File) 
{ $SMTPBody = "`The following files have recently been added/changed. Please copy and paste the following link to Windows Explorer:`n`n" 
    $File | ForEach { $SMTPBody += "$($_.FullName)`n" } 

    Send-MailMessage @SMTPMessage -Body $SMTPBody 
+0

你是否期待电子邮件中的网址被点击?在浏览器中打开文件?您将无法真正链接到从大多数电子邮件系统打开资源管理器的本地文件,它只能在浏览器中使用。根据文件类型,这可能是可以接受的。 –

回答

3

的PowerShell提供Convert-ToHTML cmdlet的是非常适合您的需求。

只需将您的内容$SMTPBody加入其中即可。你甚至可以申请一个CSS文件,使电子邮件看起来更好一点。

$HTMLBody = ConvertTo-HTML -body $SMTPBody -CSSUri http://www.csszengarden.com/examples/style.css 

然后在您的电子邮件中引用$HTMLBody

天空是CSS的限制。如果你想阅读更多,I covered this topic in a blog post。这是我们可以创建的一个例子。 enter image description here

在这个例子中,我们使用-Pre-Post参数添加上方和下方的表的内容。该表是通过管道对象与-As Table属性创建的。这个只有四个参数的cmdlet可以创建值得输出的网页!

+1

并非所有的客户端都会自动解释HTML;有些会将HTML读为原始文本。为了确保包含适当的MIME部分头文件来将解释“强制”为HTML,除了这里的过程之外,还需要将'-BodyAsHMTL'开关添加到'Send-MailMessage'指令中。 –

1

将您的$SMTPBody值设置为包含HTML的字符串,然后将-BodyAsHTML开关添加到您的Send-MailMessage命令中。

... 
$SMTPBody = "<em>This is italicised</em>" 
... 

Send-MailMessage -Body $SMTPBody -BodyAsHTML -To ...