2017-10-18 2 views
0

So Sie den Code unten funktioniert, wenn ich die E-Mail-Adresse manuell hinzufügen, um $Mail.To = ("[email protected]") aber sobald ich das deaktivieren und dann ziehen aus einer Excel-Spalte (mgremail) es gibt mir diesen FehlerE-Mail wird mit 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 

Mein Code:

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

es viel einfacher ist nur 'Verschicken MailMessage' zu ​​verwenden. –

+0

Sie sollten auf leere Werte testen. 'If ​​(-not $ mgrmail) {}' – TheIncorrigible1

Antwort

0

Sehr verworren Codebeispiel. Hier ist etwas viel einfacher:

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 Stellen Sie sicher, dass die Rolle auf dem Server aktiviert ist, auf den Sie zeigen möchten. Hier ist [ein Hilfethema] (https://social.technet.microsoft.com/Forums/exchange/en-US/9c99624f-4379-4f19-85a3-5e2c58/how-to-find-smtp-address-on-exchange -server? forum = exchangesvradminlegacy) zum Thema – TheIncorrigible1

+0

Was passiert, wenn ich keinen Zugriff habe, um diese Rolle auf dem Server zu aktivieren. –

2

Ich schrieb ein Skript eine Weile zurück, die von einem Tier-1-Team verwendet wurde, die für sie E-Mails in Outlook erzeugen würden, wenn sie ein Anwender wurden zu helfen. Es hat die E-Mail (aus Workflow-Gründen) nicht gesendet, aber es wäre einfach genug, um es zu senden. Dies sollte Ihnen zumindest etwas geben, auf das Sie automatisch zugreifen können, um Empfänger zu einer E-Mail hinzuzufügen.

$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 

Ich hatte hier String mit dem HTML-Code für den Körper der E-Mail vorher im Skript als $HTMLBody definiert. Dies würde eine neue E-Mail öffnen, initialisieren, die Verteilerliste des Teams der CC-Zeile hinzufügen, den Benutzer der Zeile An hinzufügen (aktualisiert, um Ihre $Item.MgrEmail widerzuspiegeln), festlegen, wer die E-Mail gesendet wurde, so dass sie vom DL des Teams kam und würde die Signatur des Benutzers beibehalten. Es funktionierte wirklich gut, außer dass die Option "Senden als" in der GUI nicht genau den Wert widerspiegelte, den ich für die E-Mail gesetzt hatte (sie wurde immer noch korrekt gesendet, von ihrem DL zeigte sie nur ihren persönlichen Alias ​​in der GUI).

Sie könnten natürlich einige Dinge auslassen, aber ich dachte, ich würde dies anbieten, da ich es benutzt habe und weiß, dass es funktioniert.

0

Versuchen Sie dies für einen einfachen SMTP senden:

$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