邮件发送是一个很基本的操作,在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: estc.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文件便可保证方案二的可靠性。