簡體   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