E-Mail Versand, null Value bei Net.Mail.Send PowerShell
Hallo,
bei dem Versuch E-Mails mit einer Funktion zu verschicken, welche auch sonst funktionierte, lässt mich nun auflaufen. Ich verstehe nicht, wohin die Werte sind, bzw. wieso keine richtige Übergabe stattfindet?
Fehler:
Meine Powershell Funktion:
Die Variablen die ich Übergabe stimmen wenn ich mir diese Anzeigen lasse per Write-host:
Ergebnis mit Write-Host
Warum werden keine Werte korrekt übergeben?
Danke wieder vorab!
bei dem Versuch E-Mails mit einer Funktion zu verschicken, welche auch sonst funktionierte, lässt mich nun auflaufen. Ich verstehe nicht, wohin die Werte sind, bzw. wieso keine richtige Übergabe stattfindet?
Fehler:
A constructor was not found. Cannot find an appropriate constructor for type System.Net.Mail.Attachment.
You cannot call a method on a null-valued expression.
At .....AVIS_MAIL.ps1:74 char:7
+ $smtp.Send($Mail_Msg)
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) , RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Meine Powershell Funktion:
function AVIS_Mail($Mail, $body, $Mail_File, $Subject) {
#Fehler Abfangen
try {
#Mailobjekt erzeugen
$SMTPServer = “smtp.office365.com”
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("user", "pass")
$Mail_Msg = New-Object System.Net.Mail.mailmessage
$Mail_Att = New-Object System.Net.Mail.Attachment($Mail_File)
#E-Mail Anhang
$Mail_Msg.Attachments.Add($Mail_Att)
#Server
#$smtp.Host = "smtp.office365.com"
$Mail_Msg.from = "avis@.....de"
$bccMail = "e.....@.de"
$Mail_Msg.To.add($Mail)
$Mail_Msg.Bcc.Add($bccMail)
#Bereitstellen abhängig von der Sprache
$Mail_Msg.Subject=$Subject
#Format
$Mail_Msg.IsBodyHtml = $true
$Mail_Msg.Body = $body
#Versenden
$SMTPClient.Send($Mail_Msg)
}
catch
{
$_.exception.message
$Mail_Msg.Subject = "Fehler beim Zustellen einer Nachricht"
$Mail_Msg.Body = "Fehler! Es konnte keine E-Mail an: "+$Mail+" geschickt werden<br><br>$_.exception.message"
$Mail_Msg.To.add("...@....")
$smtp.Send($Mail_Msg)
break;
}
#Prozess wieder freigeben, da sonst Zugriffsfehler
$Mail_Att.Dispose()
$Mail_Msg.Dispose()
[gc]::Collect()
}
Die Variablen die ich Übergabe stimmen wenn ich mir diese Anzeigen lasse per Write-host:
[array]$AVIS_f = Get-ChildItem -Path $($AVIS.ToString()+"*") -Include "*.pdf"
foreach($af in $AVIS_f){
$MC=$af.Name.Split("_")
[array]$CMD=$("
SELECT
('AVIS // '+Anschrift_Name1+', '+Anschrift_PLZ+' '+ Anschrift_Ort) 'AVIS',
(select top 1 Kund_Partner.email from Kund_Partner where Kund_Partner.ID_Kunde=KB.ID and Kund_Partner.Funktion='AVIS') 'MAIL',
(select top 1 Kund_Partner.Fax from Kund_Partner where Kund_Partner.ID_Kunde=KB.ID) 'FAX'
from Kund_Basis KB where ID=(select ID from Kund_Basis where MC='$MC')
")
[array]$SUB = (querySQL -cSQL $CMD).AVIS
[array]$MAIL = (querySQL -cSQL $CMD).MAIL
[array]$FAX = (querySQL -cSQL $CMD).FAX
foreach($s in $SUB){
foreach($m in $MAIL){
foreach($f in $FAX){
Write-Host $af", " $s ", " $m ", " $f
AVIS_Mail("..@...", $BODYtx, $af, $s)
}
}
}
}
Ergebnis mit Write-Host
"F:\mail\AVIS_FIRST\WIEDEIGERS_1125.PDF, AVIS // Memann GmbH, 90009 Igereim, info@......de"
Warum werden keine Werte korrekt übergeben?
Danke wieder vorab!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 627160
Url: https://administrator.de/contentid/627160
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
7 Kommentare
Neuester Kommentar
Wieder das selbe Problem wie bei deinem letzten Post hier im Forum, du übergibst als Attachment ein [FILEINFO] Object statt einem String. Deswegen findet die PS keinen validen Konstruktor für System.Net.Mail.Attachment, weil es dafür keinen gibt.
Die Fehlermeldung sagt genau das aus
https://docs.microsoft.com/de-de/dotnet/api/system.net.mail.attachment.- ...
Dein genutzter Konstruktor ist nämlich dieser
public Attachment (string fileName);
Und der erwartet einen String und kein Object der Klasse FileInfo welche die Variable $af nunmal ist weil du diese mit Get-ChildItem erstellst.
Übergebe also statt nur das Objekt $af die passende Property des Objects
Die Powershell arbeitet objektorientiert mit .NET Klassen und mit expliziten Typen und macht nicht alles selbst daran solltest du dich langsam mal gewöhnen!
Die Fehlermeldung sagt genau das aus
Cannot find an appropriate constructor for type System.Net.Mail.Attachment.
Die möglichen Konstruktoren kannst du hier nachschlagenhttps://docs.microsoft.com/de-de/dotnet/api/system.net.mail.attachment.- ...
Dein genutzter Konstruktor ist nämlich dieser
public Attachment (string fileName);
Und der erwartet einen String und kein Object der Klasse FileInfo welche die Variable $af nunmal ist weil du diese mit Get-ChildItem erstellst.
Übergebe also statt nur das Objekt $af die passende Property des Objects
$af.Fullname
an die Function.Die Powershell arbeitet objektorientiert mit .NET Klassen und mit expliziten Typen und macht nicht alles selbst daran solltest du dich langsam mal gewöhnen!
> A constructor was not found. Cannot find an appropriate constructor for type System.Net.Mail.Attachment.
> You cannot call a method on a null-valued expression.
> At .....AVIS_MAIL.ps1:74 char:7
> + $smtp.Send($Mail_Msg)
> + ~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : InvalidOperation: (:) , RuntimeException
> + FullyQualifiedErrorId : InvokeMethodOnNull
>
Die Attachment Klasse kennt keinen Konstruktor für Objekte des Typs System.IO.FileInfo.
Du rufst die Powershell Funktion ja auch falsch auf...
So muss das aussehen
Eigene CMDLets werden nicht mit Klammern für Parameter noch Kommata um die Parameter zu trennen aufgerufen, macht man ja bei den üblichen CMDLets auch nicht!
So muss das aussehen
AVIS_Mail "..@..de" $BODYtx $af.FullName $s
Dann fürs nächste mal erst vorher nochmal gründlich nachdenken und die Docu zu Rate ziehen bevor man vorschnell einen Post lostritt .