Ok. Bekomme ständig die Fehler-Meldung "Es wurde kein Parameter gefunden, der dem Parameternamen "port" entspricht." ![]()
Email versenden
-
MrB -
11. März 2022 um 08:26 -
Unerledigt
-
-
ich nutze immer folgendens Script.
AutoIt
Alles anzeigen#include <File.au3> #include <String.au3> #Include <Array.au3> #include <Date.au3> #include <WindowsConstants.au3> Dim $oMyRet, $oMyError, $to, $cc, $bcc, $subject, $body, $attachment, $aRecords Local $ADMINUSER = "xxxxx" Local $ADMINPASS = "xxxxx" $from = "mail adresse" $to = "mail adresse" $cc = "" $bcc = "" $subject = "betreff" $body = "body" $attachment = "" Sendmail() sleep (2000) Func Sendmail() Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ;################################## ; Variables ;################################## ;$s_SmtpServer = "10.82.0.41" "mail1-erf01.fti.int" ; address for the smtp-server to use - REQUIRED $s_SmtpServer = "server" ; address for the smtp-server to use - REQUIRED $s_FromName = $from ; name from who the email was sent $s_FromAddress = $from ; address from where the mail should come $s_ToAddress = $to ; destination address of the email - REQUIRED $s_Subject = $subject ; subject from the email - can be anything you want it to be $as_Body = $body ; the messagebody from the mail - can be left blank but then you get a blank mail $s_AttachFiles = $attachment ; the file you want to attach- leave blank if not needed $s_CcAddress = $cc ; address for cc - leave blank if not needed $s_BccAddress = $bcc ; address for bcc - leave blank if not needed $s_Username = $ADMINUSER ; username for the account used from where the mail gets sent - Optional (Needed for eg GMail) $s_Password = $ADMINPASS ; password for the account used from where the mail gets sent - Optional (Needed for eg GMail) ;$IPPort = 25 ; port used for sending the mail $IPPort = 465 ; port used for sending the mail $ssl = 1 ; enables/disables secure socket layer sending - put to 1 if using httpS ;$IPPort=465 ; GMAIL port used for sending the mail ;~ $ssl=1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS ;################################## ; Script ;################################## Global $oMyRet[2] ;MsgBox(0,"", $s_SmtpServer& $s_FromName& $s_FromAddress& $s_ToAddress& $s_Subject& $as_Body& $s_AttachFiles& $s_CcAddress& $s_BccAddress& $s_Username& $s_Password& $IPPort& $ssl) $rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl) If @error Then MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc,1) EndIf EndFunc ;==>Sendmail Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0) $objEmail = ObjCreate("CDO.Message") $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' $objEmail.To = $s_ToAddress Local $i_Error = 0 Local $i_Error_desciption = "" If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf If $s_AttachFiles <> "" Then Local $S_Files2Attach = StringSplit($s_AttachFiles, ";") For $x = 1 To $S_Files2Attach[0] $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x]) If FileExists($S_Files2Attach[$x]) Then $objEmail.AddAttachment($S_Files2Attach[$x]) Else $i_Error_desciption = $i_Error_desciption & @LF & 'File not found to attach: ' & $S_Files2Attach[$x] SetError(1) Return 0 EndIf Next EndIf $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort ;Authenticated SMTP If $s_Username <> "" Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password EndIf If $ssl Then $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True EndIf ;Update settings $objEmail.Configuration.Fields.Update ; Sent the Message $objEmail.Send If @error Then SetError(2) Return $oMyRet[1] EndIf EndFunc ;==>_INetSmtpMailCom Func MyErrFunc() $HexNumber = Hex($oMyError.number, 8) $oMyRet[0] = $HexNumber $oMyRet[1] = StringStripWS($oMyError.description, 3) ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF) SetError(1); something to check for when this function returns Return EndFunc ;==>MyErrFunc Func stringencrypt($fencrypt, $sdata, $spassword) _crypt_startup() Local $sreturn = "" If $fencrypt Then $sreturn = _crypt_encryptdata($sdata, $spassword, $calg_aes_256) Else $sreturn = BinaryToString(_crypt_decryptdata($sdata, $spassword, $calg_aes_256)) EndIf _crypt_shutdown() Return $sreturn EndFuncGruß gmmg
-
Das Script unterscheidet sich nicht wirklich von allen anderen. Mit welchem Provider funktioniert das denn? Mit gmx-freemail jedenfalls leider nicht.
VG
-
Funktionierendes Beispiel mit Powershell golum :
PowerShell
Alles anzeigen$from = "nameA@gmx.de" $to = "nameB@web.de" $subject = "Klappt das so?" $body = "Ja es klappt!" $smtpServer = "mail.gmx.net" $smtpPort = 587 $securePassword = Read-Host "GMX Passwort eingeben" -AsSecureString $credential = New-Object System.Management.Automation.PSCredential ($from, $securePassword) Send-MailMessage ` -From $from ` -To $to ` -Subject $subject ` -Body $body ` -SmtpServer $smtpServer ` -Port $smtpPort ` -UseSsl ` -Credential $credentialPasse $from und $to an, öffne powershell_ise.exe, alles markieren und mit F8 abschicken.
"Works on my machine" 😅 .Viele Grüße
Sven
Nachtrag: Natürlich musst du dein GMX Passwort nach Aufforderung eingeben. -
Hi. Vielen Dank dafür. Leider auch nicht. Ich habe keine Idde mehr woran es liegen könnte. Firewall etc. sind aus
es ist immer der selbe Fehler:
Spoiler anzeigen
ZitatSend-MailMessage : Es wurde kein Parameter gefunden, der dem Parameternamen "Port" entspricht.
Bei Zeile:18 Zeichen:10
+ -Port <<<< $smtpPort `
+ CategoryInfo : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SendMailMessage -
Dann ersetze mal die Zeile 18 (aus meinem Beispiel), mit -SmtpPort $smtpPort `.
Du scheinst eine ziemlich alte Powershell Version zu benutzen (Vermutung).Bin gespannt ob es dann klappt, vermute ja.
Viele Grüße
Sven -
Verdammt. Du hast recht, was die Version angeht. Auch der Parameter "SmtpPort" ist nicht bekannt. Es ist ein WIN 7 System mit Powershell 2.
Kann es sein, dass man in dieser "uralten" PS-Version den Port garnicht definieren kann? -
Oha, die 2'er Version!? Ohne zu recherchieren oder ein LLM zu befragen weiß ich nicht, wie das Cmdlet damals war/was es braucht. Meine erste Empfehlung ist auf mind. Win10 umsteigen 😅 , und zweitens zumindest auf Powershell 5.1 (auch unter Windows 7 möglich) zu upgraden.
Viele Grüße
Sven -
Ok. PS auf 5.1 upgedatet. Folgende Meldung erscheint nun:
CodeGMX Passwort eingeben: ************ Send-MailMessage : Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen. At C:\Users\Administrator\Desktop\Neuer Ordner\PS4.ps1:12 char:1 + Send-MailMessage -From $from -To $to -Subject $subject -Body $body -S ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:Sm tpClient) [Send-MailMessage], SmtpException + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.Send MailMessageDiese Meldung kommt bei aktiver Firewall. Jetzt kennt er wenigstens den Parameter -Port
Hier ohne Firewall:
CodeGMX Passwort eingeben: ************ Send-MailMessage : Fehler bei SSPI-Aufruf, siehe interne Ausnahme. At C:\Users\Administrator\Desktop\Neuer Ordner\PS4.ps1:12 char:1 + Send-MailMessage -From $from -To $to -Subject $subject -Body $body -S ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:Sm tpClient) [Send-MailMessage], AuthenticationException + FullyQualifiedErrorId : AuthenticationException,Microsoft.PowerShell.Com mands.SendMailMessage -
das Problem sind die heutigen Sicherheits Hürden. Diese nennt sich STARTTLS. Der Provider möchte erst eine authentifizierung und kommuniziert erst dann mit dir.
-
siehe SMTP Settings GMX:
Code
Alles anzeigenPostausgang (SMTP) Server: mail.gmx.net Port: 587 Verschlüsselung: STARTTLS, TLS oder Verschlüsselung Steht in einem Programm "STARTTLS" nicht zur Verfügung, nutzen Sie bitte das Protokoll "TLS". Existiert auch hierfür keine Option, genügt es, die Option "Verschlüsselung" zu aktivieren. Alternativ können Sie für den Postausgangsserver auch Port 465 mit der Verschlüsselung "SSL" nutzen. Bitte beachten Sie: Ein TLS-Protokoll können Sie nur dann verwenden, wenn Ihr E-Mail-Programm über die aktuellen TLS-Versionen 1.2 oder 1.3 verfügt. Die TLS-Versionen 1.0 und 1.1 werden aus Sicherheitsgründen nicht mehr von uns unterstützt.geht angeblich auch ohne STARTLS, TLS
habe eben mal in der registry nachgesehen. Selbst wenn ich bspw. TLS 1.2 nutzen wollte, gibt es dort nur ein SSL 2.0 Protokoll.
-
Das Script unterscheidet sich nicht wirklich von allen anderen. Mit welchem Provider funktioniert das denn? Mit gmx-freemail jedenfalls leider nicht.
VG
golum, das Script funktioniert eigentlich mit allen Providern. Welche TLS Version hast du auf deinem Win7 aktiv?
Hast du mal dein Script auf Windows 10 oder 11 getestet?
-
Meiner Ansicht nach liegt das (wahrscheinlich konfigurative) Problem bei dir lokal golum .
Die Anforderungen an SMTP seitens GMX sind zum einem nicht unüblich und zum anderen auch nicht besonders strikt oder so.- Mit dem Powershell-Skript konnte ich erfolgreich von GMX zu WEB oder von GMX zu GMAIL Emails versenden.
- Das AutoIt-Skript von gmmg funktioniert bei mir ebenfalls.
- Beides habe ich unter Win10 und Win11 ohne "Spezialeinstellungen" erfolgreich laufen lassen können.
Daher bin ich auch der Meinung das dein System entsprechend angepasst werden muss, da SMTP seit Jahrzehnten recht unverändert ist und "nur" TLS, SSL und wie sie alle heißen als Hürden (oder als zusätzlicher Anspruch an die Sicherheit) dazugekommen ist.
Ich verfolge den Thread auf jeden Fall mit Spannung 😀 - mal schauen was es am Ende bei dir gewesen sein wird.
Viele Grüße
Sven -