邮件发送与字符加密解密

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

 

posted @ 2019-01-24 18:59  一个有故事的devops  阅读(2311)  评论(0编辑  收藏  举报