繁体   English   中英

使用PowerShell发送电子邮件

[英]Sending email using PowerShell

因此,如果我手动将电子邮件地址添加到$Mail.To = ("XYZ@xxx.com") ,则下面的代码可以工作,但是一旦我禁用了该地址,然后从excel列( mgremail )中提取,就会出现此错误

There must be at least one name or contact group in the To, Cc, or Bcc box.At C:\Users\pshivam\Desktop\Scripts\test.ps1:60 char:5
+ $Mail.Send()
+ ~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

我的代码:

Import-Module ac*
$csv = Import-Csv C:\Users\pshivam\Desktop\Scripts\User.csv
$password = ConvertTo-SecureString -String “Newuser1” -AsPlainText -Force 

foreach($item in $csv){
$mgrmail = $item.mgremail
$sam =$item.Username
$displayname = (Get-ADUser $sam -Properties displayname).displayname
    ##name
    $nameTitle = "Name: "
    $Name = (Get-ADUser $sam -Properties cn).name
    #upn
    $upnTitle = "User Logon: "
    $UPN = (Get-ADUser $sam -Properties userprincipalname).userprincipalname
    $ol = New-Object -comObject Outlook.Application
    $mail = $ol.createItem(0)
    $Mail.To=($mgrmail)
    #$Mail.To=("XYZ@xxx.com")
    $Mail.Subject="TEST"
    $Mail.Body = "Hi, 

    "+ $nameTitle, $displayname, "
    " + $upnTitle, $upn + "
TEST
    "
    $Mail.Send()
}

我写了一段时间的脚本,供第1层团队使用,当他们在帮助最终用户时会在Outlook中为他们生成电子邮件。 它没有发送电子邮件(出于工作流程的原因),但是发送起来很简单。 这至少应该为您提供一些可以自动将收件人添加到电子邮件中的功能。

$Outlook = New-Object -ComObject Outlook.Application
$MailItem = $Outlook.CreateItem(0)
$MailItem.GetInspector.Activate()|Out-Null
$Signature = $MailItem.HTMLBody
$CCAddr = $MailItem.Recipients.add($User.email)
$CCAddr.Type = 2
$CCAddr.Resolve()|Out-Null
$MailItem.Recipients|?{$_.Type -eq 1}|%{$_.Delete()}
$ToAddr = $MailItem.Recipients.add($Item.MgrEmail)
$ToAddr.Resolve()|Out-Null
$MailItem.Subject="Task description"
$MailItem.SentOnBehalfOfName='Team DL'
$MailItem.HTMLBody = $HTMLBody + $Signature
$MailItem.GetInspector.Activate()|Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Outlook) | Out-Null
Remove-Variable Outlook,MailItem

我在脚本中将包含电子邮件正文HTML的字符串定义为$HTMLBody 这将打开一个新电子邮件,对其进行初始化,将团队的通讯组列表添加到CC行,将用户添加到“收件人”行(已更新,以反映您的$Item.MgrEmail ),设置电子邮件的发送者,以便该电子邮件来自团队的DL,并保留用户的签名。 它工作得非常好,除了GUI中的“发送为”选项不能准确反映我设置的发送电子邮件的值(它仍从其DL正确发送,只是在GUI中显示了他们的个人别名)。

您显然可以省略一些东西,但是我认为我会提供它,因为我使用了它并且知道它可以工作。

非常复杂的代码示例。 这里的事情要简单得多:

Import-Module ActiveDirectory
$csv = Import-Csv C:\Users\user\Desktop\Scripts\User.csv

ForEach ($item in $csv)
{
    $User = Get-ADUser $item.Username -Properties @('userprincipalname','displayname')

    $Params=@{
        ErrorAction='Stop'

        To = $item.mgremail
        From = 'Example@test.com'
        SmtpServer = 'fwdhost@test.com'
        Subject = 'Test'
        Body = @"
Hi,
    Name: $($User.displayname)
    User Logon: $($User.userprincipalname)

Regards,
    TEST
"@
    }

    Try {
        Send-MailMessage @Params
    } Catch {
        Write-Host ('Failed to send email. ' + $PSItem.Exception.Message) -ForegroundColor Red -BackgroundColor White
    }
}

尝试此操作以进行简单的SMTP发送:

$smtpserver="smtp server"
$from = "email address"
$to = "email address"
$subject = "subject"
$body = "What ever you want...."
$secpasswd = ConvertTo-SecureString “password” -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ($from, $secpasswd)
Send-MailMessage -smtpServer $smtpserver -Credential $creds -Usessl true -from $from -to $to -subject $subject -attachment $body

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM