郵件發送是一個很基本的操作,在powershell中有兩種實現方式,第一種是使用自帶的“Send-MailMessage“命令,第二種是使用由.NET提供的方法發送郵件。在介紹兩種發送郵件的方法之前,先簡單的解釋一下常聽到的兩種協議:
一、郵件相關的協議
1、SMTP
簡單郵件傳輸協議,端口號25,用於發送郵件
2、POP3
第三版郵局協議,端口號110,用於連接到郵件服務器上下載郵件
3、IMAP
交互式郵件訪問協議,端口號是143,作用是下載郵件,但整體上IMAP協議優於POP3協議
二、Send-MailMessage
1、優缺點比較
優點:在命令行即可實現郵件的發送
缺點:難以解決用戶自動認證問題,利用憑證發送郵件,每次需要手動輸入密碼,難以實現自動化
2、常用參數

3、使用
Send-MailMessage -to "TO@126.com" -From "FROM@163.com" -Body "nei rong" -SmtpServer smtp.163.com -Subject "minglinghang" -Credential FROM@163.com
輸入密碼,即可發送成功

【注】:常用郵箱的SMTP地址,點這里
三、.NET提供的方法
實現過程:
#定義發送郵件的服務器 $smtpServer = "smtp.163.com" $smtpUser = "From@163.com" $smtpPassword = "mimabugaosuni" #創建郵件對象,由於設置郵件的各種信息 $mail = New-Object System.Net.Mail.MailMessage #設置郵件信息 $MailAddress="From@163.com" $MailtoAddress="To@126.com" $mail.From = New-Object System.Net.Mail.MailAddress($MailAddress) $mail.To.Add($MailtoAddress) $mail.Subject = "zhegeshi zhu ti"; $mail.Priority = "High" #默認是普通 $mail.Body = "Hello World" $filename="C:\test\c.txt" #添加附件 $attachment = new-Object System.Net.Mail.Attachment($filename) $mail.Attachments.Add($attachment) #發送 $smtp = New-Object System.Net.Mail.SmtpClient -argumentList $smtpServer $smtp.Credentials = New-Object System.Net.NetworkCredential -argumentList $smtpUser,$smtpPassword $smtp.Send($mail)
執行上述代碼即可發送成功,並且便於實現自動化,但是最致命的一點是密碼是明文的。
對此進行優化,可以將密碼進行加密然后存入某個文件,然后再進行解密傳到參數中,這樣做安全程度是得到了一定的提高,但是還存在一定的問題,比如黑客獲取到加密的密碼,他可以解密看到明文密碼,所有這種方法需要保護好密碼文件的安全性。
四、明文與密文間的轉換
1、將明文轉成密文
“passwd” | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString > passwd.txt
2、將密文轉成明文
$miwen =cat passwd.txt $sec = $miwen | ConvertTo-SecureString $ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToGlobalAllocUnicode($sec) $mingwen = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($ptr)
保護好passwd.txt文件便可保證方案二的可靠性。
