无法通过Powershell发送Outlook电子邮件

时间:2016-10-26 14:30:43

标签: powershell

我可以创建一个电子邮件并使用我的脚本显示它,但由于某种原因它不会发送,我收到以下错误。我错过了什么,也许还有权限问题?

Exception calling "Send" with "0" argument(s): "Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))"At C:\TEMP\Scripts\PowerShell\Outlook EMail Creation\TestEMailSend.ps1:27 char:5
+     $mail.Send()
+     ~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

我的代码:

$global:UserReportsToEmail = "my.email@domain.com"
$ol = New-Object -comObject Outlook.Application
$mail = $ol.CreateItem(0)
$mail.To = "$global:UserReportsToEmail"
$mail.cc = "EMAIL@domain.com"
$mail.Subject = "mySubject" 
$mail.HTMLBody = 
"<font color ='blue'><b>TESTING STUFFFF!</b></font><br>
Text on a new line $UserID"

$mail.Send()
$inspector = $mail.GetInspector
$inspector.Display()

2 个答案:

答案 0 :(得分:0)

您可以使用Send-MailMessage CmdLets:https://technet.microsoft.com/en-us/library/hh849925.aspx

然后当我需要更多控件并处理功能时我使用System.Net.Mail.SmtpClient

    try
    {
        $emailCredentials = Import-Clixml "C:\testMail\credentials.clixml"
        $recipients = @("user@mail.com", "user2@mail.com", "user3@mail.com")
        $attachments = @("C:\testMail\file.txt", ""C:\testMail\file2.txt", "C:\testMail\file3.txt")

        # create mail and server objects
        $message = New-Object -TypeName System.Net.Mail.MailMessage
        $smtp = New-Object -TypeName System.Net.Mail.SmtpClient($buildInfoData.BuildReports.Mail.Server)

        # build message
        $recipients | % { $message.To.Add($_) }
        $message.Subject = $subject
        $message.From = New-Object System.Net.Mail.MailAddress($emailCredentials.UserName)
        $message.Body = $mailHtml
        $message.IsBodyHtml = $true
        $attachments | % { $message.Attachments.Add($(New-Object System.Net.Mail.Attachment $_)) }

        # build SMTP server
        $smtp = New-Object -TypeName System.Net.Mail.SmtpClient(smtp.googlemail.com)
        $smtp.Port = 572
        $smtp.Credentials = [System.Net.ICredentialsByHost]$emailCredentials
        $smtp.EnableSsl = $true

        # send message
        $smtp.Send($message)

        Write-Host "Email message sent" 
    }
    catch
    {
        Write-Warning "$($_.Exception | Select Message, Source, ErrorCode, InnerException, StackTrace | Format-List | Out-String)" 
    }
    finally
    {
        Write-Verbose "Disposing Smtp Object"
        $message.Dispose()
        $smtp.Dispose()
    }

答案 1 :(得分:0)

根据一些Microsoft网站(例如https://social.msdn.microsoft.com/Forums/en-US/80c66a08-66ee-4ab6-b629-6b1e70143eb0/operation-aborted-exception-from-hresult-0x80004004-eabort-outlook-appointment?forum=outlookdev),这是由于&#39;对象模型防范&#39;。一种安全功能,可防止自动程序执行诸如从后台自动发送病毒和内容等内容。

你可能已经解决了这个问题。在此发布此内容,以便像我这样的其他人可以更快速,更轻松地理解为什么它不起作用。