【问题标题】:Sending E-Mail with attachment in PowerShell在 PowerShell 中发送带附件的电子邮件
【发布时间】:2019-07-15 08:32:43
【问题描述】:

我想在这封电子邮件中发送一个 CSV 文件。 我可以毫无问题地发送电子邮件,但我尝试了很多发送附件,但最后发送的电子邮件没有附件。

function sendmail($Body) {
    $Smtp = New-Object System.Net.Mail.SmtpClient
    $MailMessage = New-Object System.Net.Mail.MailMessage
    $Smtp.Host = "smtp-server"
    $MailMessage.From = "sender@example.com"
    $MailMessage.To.Add("recipient@example.org")
    $MailMessage.Subject = "Hello"

    $MailMessage.Body = $Body

    $smtp.Port = 25
    $smtp.EnableSsl = $false

    $Smtp.Send($MailMessage)
} 

$Body = "12334"
sendmail $Body

电子邮件只需如下所示:

您好,所有信息都在文件Example.csv中

【问题讨论】:

  • 当您实际上不是attaching 时,您希望如何发送带有附件的电子邮件?此外,PowerShell 从 v2 开始就带有 Send-MailMessage cmdlet,因此除非您因某种原因被 v1 卡住,否则不需要实现自己的邮件功能。
  • 我知道这段代码中没有任何附件。但我问是否有人有想法如何做到这一点
  • 也许我在评论中特别包含的文档链接可以提供一些线索?你怎么看?
  • @Ansgar Wiechers:制作邮件功能是有正当理由的。就我而言,我需要从内存中的可变数据而不是磁盘资产创建附件,因此我使用了 .Net 组件。据我所知,Send-MailMessage 无法做到这一点。

标签: powershell email smtp attachment


【解决方案1】:

Send-MailMessage 可以直接处理附件。下面是示例。

Send-MailMessage -From "User01 <user01@example.com>" `
                       -To "User02 <user02@example.com>", `
                           "User03 <user03@example.com>" `
                       -Subject "Sending the Attachment" `
                       -Body "Forgot to send the attachment. Sending now." `
                       -Attachment "data.csv" -SmtpServer smtp.fabrikam.com

或者,你应该使用System.Net.Mail.MailMessage,那么你必须使用:

$EmailFrom = "<user@domain.tld>"
$EmailTo = "<user@domain.tld>"
$EmailSubject = "<email subject"  

$SMTPServer = "smtphost.domain.tld"
$SMTPAuthUsername = "username"
$SMTPAuthPassword = "password"

$emailattachment = "<full path to attachment file.csv>"

function send_email {
    $mailmessage = New-Object System.Net.Mail.MailMessage 
    $mailmessage.From = ($emailfrom) 
    $mailmessage.To.Add($emailto)
    $mailmessage.Subject = $emailsubject
    $mailmessage.Body = $emailbody

    $attachment = New-Object System.Net.Mail.Attachment($emailattachment, 'text/plain')
    $mailmessage.Attachments.Add($attachment)

    #$mailmessage.IsBodyHTML = $true
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)  
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$SMTPAuthUsername", "$SMTPAuthPassword") 
    $SMTPClient.Send($mailmessage)
}

如果需要,请参考THIS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2011-01-28
    • 2014-04-24
    • 1970-01-01
    • 2014-04-23
    • 2019-03-09
    相关资源
    最近更新 更多