2017-10-18 6 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

空の値をテストする必要があります。 'If​​(-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

は、私はしばらく前にスクリプトを書いた彼らは、エンドユーザーを支援したときにそれらのために、Outlookの電子メールを生成するであろうティア1つのチームによって使用された:ここでは非常に簡単なものです。それは電子メールを送信しなかった(ワークフロー上の理由から)が、それを送信させるのに十分なほど簡単だった。これは、少なくとも自動化された方法で電子メールに受信者を追加するためのものです。

$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 

私は、以前$HTMLBodyとしてスクリプトに電子メールの本文のためのHTMLを含む、ここで文字列を定義していました。これにより、新しい電子メールが開かれ、初期化され、CCラインにチームの配信リストが追加され、Toラインにユーザーが追加され($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