2017-10-18 81 views
0

發送電子郵件所以下面的代碼工作,如果我手動添加電子郵件地址$Mail.To = ("[email protected]")但一旦我禁用,然後從Excel列(mgremail)把它給了我這個錯誤使用PowerShell

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=("[email protected]") 
    $Mail.Subject="TEST" 
    $Mail.Body = "Hi, 

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

這是一個更容易,只需使用'發送-MailMessage'。 –

+0

您應該測試空值。 '如果(-not $ mgrmail){}' – TheIncorrigible1

回答

0

非常令人費解的代碼示例。這裏的東西要簡單得多:

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') 

    [email protected]{ 
     ErrorAction='Stop' 

     To = $item.mgremail 
     From = '[email protected]' 
     SmtpServer = '[email protected]' 
     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 
    } 
} 
+0

@ShivPatel確保在您打算指向的服務器上啓用角色。這裏是[幫助主題](https://social.technet.microsoft.com/Forums/exchange/en-US/9c99624f-4379-4f19-85a3-5e2c58/how-to-find-smtp-address-on-exchange -server?forum = exchangesvradminlegacy) – TheIncorrigible1

+0

如果我沒有權限在服務器上啓用此角色,該怎麼辦? –

2

我寫了一個腳本,而回過去曾通過一個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中的Send As選項沒有準確地反映我設置發送電子郵件的值(它仍然正確地從DL發送,它只是在GUI中顯示了它們的個人別名)。

你顯然可以省略一些東西,但我想我會提供這個,因爲我用它並知道它的工作原理。

0

試試這個一個簡單的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