Powershell 邮件发送

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 目录目录前言Send-MailMessageNETMail使用OutLook发送邮件前言最近领导想在winServer2012上搞个自动发送邮件的计划任务,下面有几种发送邮件的方式。

目录

前言

最近领导想在winServer2012上搞个自动发送邮件的计划任务,下面有几种发送邮件的方式。
如果Powershell V2.0 以上建议使用第一种方式(比较无脑),2.0以下的话也可以使用第二种方法。

Send-MailMessage

Syntax

Send-MailMessage -To $to -From $from -cc $cc -Subject $sub -Body $body -Credential $mycreds -SmtpServer $smtp -DeliveryNotificationOption Never -BodyAsHtml -UseSsl -port 587 -Attachments $attach

Example:

#Create the secure passward
Function Set-SecurePwd($storage)
{

    $mysecret = 'YOURPASSWORD'
    $mysecret | 
    ConvertTo-SecureString -AsPlainText -Force |    #将加密的标准字符串转换为安全字符串。它还可以将纯文本转换为安全字符串。
    ConvertFrom-SecureString |      #将安全字符串转换为加密的标准字符串。
    Out-File -FilePath $storage     #将加密的标准字符输出到指定文件

    $pw = Get-Content $storage | ConvertTo-SecureString     #获取经过加密的标准字符并转换为安全字符串

    return $pw
}

Function Send-Email($attach)
{
    $pwd = Set-SecurePwd $storage

    $cred = New-Object System.Management.Automation.PSCredential "userName",$pwd    #创建身份认证对象
    $to = "xxx@xxx.com"
    $from = "xxx@163.com"
    $cc = "xxx@xxx.com"
    $sub = "TEST"
    $body = "Just test"
    $smtp = "smtp.163.com"

    Send-MailMessage -To $to -From $from -cc $cc -Subject $sub -Body $body -Credential $cred -SmtpServer $smtp -UseSsl -port 25 -Attachments $attach 

    if($?)
    {
        Write-Host "Sent Successfully!" -ForegroundColor Green
    }
    else
    {
        Write-Host "Error" -ForegroundColor Red
    }
}


#Main

$storage = "E:\pwd\password.txt"
$attach = "E:\attach\test.txt"

Send-Email $attach    #指定需要发送的附件

注意$from 的Address必须能够与$cred身份认证对象一致,这个例子使用了163邮件的SMTP Server 。

.NET.Mail

还可以使用.NET支持的实例来实现邮件发送,上面的Cmdlet也是调用了这一实例。

Function send-mail
{ 
    param( 
        [string]$toAddress = $(throw "toAddress must be set") 
        ,[string]$Subject = $(throw "subject must be set") 
        ,[string]$body = "" 
        ,[string]$file = "") 
#mail server configuration 
    $smtpServer = "SMTPSERVERADDRESS" 
    $smtpUser = "smtpUserName" 
    $smtpPassword = "smtpUserPwd" 
    $sslNeed =$true 
#SMTP server needs SSL should set this attribute 
    $MailAddress ="xxx@163.com" 
    $fromName = "mailAccountName" 
    $replyTo = "xxx@163.com" 
#create the mail message 
    $mail = New-Object System.Net.Mail.MailMessage 
#set the addresses 
    $mail.From = New-Object System.Net.Mail.MailAddress($MailAddress,$fromName) 
    $mail.To.Add($toAddress) 
#set the content 
    $mail.Subject = $Subject 
    $mail.Priority = "High" 
    $mail.Body = $Body 
    $filename= $file 
    $attachment = new-Object System.Net.Mail.Attachment($filename) 
    $mail.Attachments.Add($attachment) 
#send the message 
    $smtp = New-Object System.Net.Mail.SmtpClient -argumentList $smtpServer 
    $smtp.Credentials = New-Object System.Net.NetworkCredential -argumentList $smtpUser,$smtpPassword 
    $smtp.EnableSsl = $sslNeed; 
    try{ 
        $smtp.Send($mail) 
        echo 'Ok,Send succed!' 
    } 
    catch 
    { 
        echo 'Error!Filed!' 
    } 
}
Send-Mail "xxx@xxx.com" "TEST" "Just test" "E:\attach\hd.txt"

使用OutLook发送邮件

这是调用了本地的MAPI Client程序,不能自动发送,只是填充了邮件信息,需要手动点击发送。例子来自——Powershell中文博客

$subject = 'Sending via MAPI client'
$body = 'My Message'
$to = 'tobias@powertheshell.com'

$mail = "mailto:$to&subject=$subject&body=$body"

Start-Process -FilePath $mail

:)

相关文章
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
73 0
|
3月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
137 10
|
7月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
215 0
|
Shell Linux 开发工具
windows中cmd和PowerShell批处理命令
之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的
111 0
|
JavaScript Windows
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
|
Windows
使用PowerShell获取Windows当前锁屏壁纸
使用PowerShell获取Windows当前锁屏壁纸 如果原始图片丢了,用这段代码就可以提取当前锁屏壁纸了!
191 0
|
应用服务中间件 nginx Windows
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
|
XML 监控 数据格式
利用powershell进行windows日志分析
0x00 前言   Windows 中提供了 2 个分析事件日志的 PowerShell cmdlet:一个是Get-WinEvent,超级强大,但使用起来比较麻烦;另一个是Get-EventLog,使得起来相当简单,可以实时筛选,接下来,我们利用PowerShell 来自动筛选 Windows 事件日志。
2534 0