01 前言
最近在搞搞服务器,用的是Windows系统,配合脚本应该有的玩玩,比如间隔多久查一些东西发到指定邮箱,嘿嘿。下面做简单记录。
02 正文
代码贴上
<#
# 邮件发送
# 使用smtp协议
# 默认为正文为html格式
# by hokis
# 2019-03-27
#>
function Send-Email-BySMTP
{
[CmdletBinding()]
param(
[string]$userName, #用户名
[string]$password, #密码
[string]$hostName, #smtp服务器
[string]$sendName,#发件人 有些邮箱可以设置与用户名不一致,如果省略的话,默认与用户名一致
[string[]]$mailTo, #接收人
[string[]]$ccTo, #抄送人
[string]$subject, #主题
[string]$content, #内容
[string[]]$attachments #附件
)
if([string]::IsNullOrEmpty($sendName)){$sendName = $userName}
$message = New-Object System.Net.Mail.MailMessage
if($mailTo){$mailTo | %{$message.To.Add($_)}}
if($ccTo){$ccTo | %{$message.CC.Add($_)}}
$message.From = New-Object System.Net.Mail.MailAddress($sendName)
$message.Subject = $subject
$message.Body = $content
$message.BodyEncoding = [System.Text.Encoding]::UTF8 #正文编码
$message.SubjectEncoding = [System.Text.Encoding]::UTF8 #主题编码
$message.Priority = [System.Net.Mail.MailPriority]::High #优先级
$message.IsBodyHtml = $true
try{
if($attachments){
$attachments | %{
$message.Attachments.Add((New-Object System.Net.Mail.Attachment($_)))
}}
}
catch{
Write-Verbose ("添加附件异常:" + $Error[0].Exception.Message)
}
$smtpClient = New-Object System.Net.Mail.SmtpClient($hostName)
$smtpClient.UseDefaultCredentials = $true
if($hostName.EndsWith("qq.com")){ #qq邮箱特别设置
$smtpClient.UseDefaultCredentials = $false
}
$smtpClient.Port = 25 #端口
$smtpClient.DeliveryMethod = [System.Net.Mail.SmtpDeliveryMethod]::Network
#指定用户名和密码
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($userName,$password)
$smtpClient.EnableSsl = $true
try{
$smtpClient.Send($message)
return $true
}
catch
{
Write-Verbose ("发送异常:" + $Error[0].Exception.Message)
}
return $false
}
$res = Send-Email-BySMTP -userName "XXXX@163.com" -password "XXXX" -hostName "smtp.163.com" -mailTo "XXXXX@qq.com" -subject "约吗" -content "亲爱的,今晚约吗,我看好了一家好吃的!" -Verbose
if($res){
Write-Host "邮件发送成功!"
}else{
Write-Host "邮件发送失败!"
}
使用方法不多说了,有疑问的朋友可以参考之前写的powershell系列。
03 后记
其它邮箱的设置请参考相应官网的帮助说明,如果脚本用不了的话。
参考资料:
C#发送邮件类