powershell 发送邮件

本文介绍了一个使用Windows系统下的PowerShell脚本实现定时发送邮件的功能。该脚本通过SMTP协议发送HTML格式邮件,并支持添加附件。文章提供了完整的脚本代码及配置示例。

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#发送邮件类

### 如何使用 PowerShell 脚本通过 Outlook 发送电子邮件 为了实现这一目标,可以利用 COM 对象来创建并发送带有 HTML 格式的邮件。下面是一个详细的说明以及相应的脚本实例。 #### 创建并初始化 Outlook 应用程序对象 首先需要启动 Outlook 的应用程序实例,并获取命名空间以便访问邮箱账户信息: ```powershell $outlook = New-Object -ComObject outlook.application; $namespace = $outlook.GetNamespace("MAPI"); ``` #### 构建邮件项 接着定义一个新的 `MailItem` 实例用于设置收件人、主题、正文等内容属性;这里展示了一个简单的例子,其中包含了基本的文本内容和附件功能[^1]: ```powershell $mail = $outlook.CreateItem(0); $mail.To = "recipient@example.com"; $mail.Subject = "Test Email from PowerShell"; $mail.BodyFormat = 2; # olFormatHTML (https://docs.microsoft.com/en-us/office/vba/api/outlook.olbodyformat) $mail.HTMLBody = "<h2>This is an HTML formatted email</h2><p>Sent using PowerShell and Outlook.</p>"; $fileAttachmentPath = "C:\path\to\your\attachment.txt"; if(Test-Path $fileAttachmentPath){ $mail.Attachments.Add($fileAttachmentPath); } ``` #### 设置发件箱身份验证和其他选项(可选) 如果当前用户的默认配置无法满足需求,则可能还需要指定特定的发件地址或其他参数。这通常涉及到更改 `$namespace.Logon()` 方法中的参数或者调整其他高级设置[^3]。 #### 发送邮件 最后一步就是调用 `.Send()` 方法完成实际的操作过程,在此之前建议先执行一 `.Display()` 来预览即将发出的信息确保无误后再继续操作: ```powershell # Optional preview before sending #$mail.Display(); # Send the mail item directly without displaying it. $mail.Send(); ``` 以上即为完整的流程介绍及对应的 PowerShell 命令行代码片段,按照上述步骤编写即可成功地经由本地安装好的 Microsoft Outlook 客户端向外传输定制化的内容给指定联系人列表成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值