zoukankan      html  css  js  c++  java
  • Powershell 邮件发送

    目录

    前言

    最近领导想在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:pwdpassword.txt"
    $attach = "E:attach	est.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:attachhd.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

    :)

    相关阅读:

  • 相关阅读:
    php mysql与mysqli 区别
    让IT工作者过度劳累的12个坏习惯
    HR不懂爱,他的问题答不上来
    励志小故事
    php中如何把一个数字字符串作为一个变量
    新手应该具备的基本素质
    邮件中的缩写
    强大的网页性能测试工具Speed Tracer
    Windows环境下EditPlus运行Perl程序
    ActionScript3检测当前下载资源的速度
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13310904.html
Copyright © 2011-2022 走看看