Eine Datei mit einer bat-Datei an eine E-Mail-Adresse senden, ohne die E-Mail-Informationen preiszugeben?

704
mina nageh

Ich möchte eine Datei über eine BAT-Datei an mein Gmail-Konto senden und meine E-Mail-Informationen in dieser BAT-Datei verschlüsseln, sodass jemand, der die BAT-Datei öffnet, die E-Mail-Informationen nicht abrufen kann.

Logik wie:

  1. Prüfen Sie, ob das Internet ordnungsgemäß funktioniert

    • Wenn ja, senden Sie die Datei und entfernen Sie die Bat-Datei
  2. Prüfen Sie, ob das Internet ordnungsgemäß funktioniert

    • Wenn nein, planen Sie es später oder fügen Sie es dem Start hinzu

    • Wenn Sie fertig sind, entfernen Sie es aus dem Zeitplan oder dem Startup!

0
Um eine E-Mail über Gmail zu senden, ohne einen Webbrowser zu verwenden, benötigen Sie einen SMTP-basierten E-Mail-Client wie Outlook oder Mozilla Thunderbird. Hast du eine installiert? Wenn ja welche? K7AAY vor 5 Jahren 0
"Haben Sie einen installiert?" Nein, ich weiß nicht ... Gibt es einen alternativen E-Mail-Dienst, der sofort einsatzbereit ist (tragbar), ohne dass zusätzliche Software installiert werden muss ?! mina nageh vor 5 Jahren 0
@PimpJuiceIT, die Wahrnehmung von "zu breit" durch die engsten Wähler wird durch das Vorhandensein einer guten, einfachen Antwort beeinflusst, die zeigt, dass sie nicht so breit ist. Tue es. fixer1234 vor 5 Jahren 2
@ fixer1234 .... Soviel zur "einfachen" Antwort, richtig !! Pimp Juice IT vor 5 Jahren 0
@PimpJuiceIT, ja, niemand, der bei Verstand ist, würde eine Frage beantworten, die die Entwicklung einer App zur Lösung des Problems erfordert. Es ist also gut, dass Sie eine triviale Lösung gezeigt haben. Ich musste für die Wiedereröffnung stimmen, um sicherzustellen, dass dies nicht gelöscht wird. Vielleicht zieht es sogar eine andere Antwort an. Übrigens ist deine Antwort etwas kurz. Vielleicht möchten Sie es noch verbessern, indem Sie am Ende das Fleisch von den bloßen Gliedern hinzufügen. NUR EIN SCHERZ! fixer1234 vor 5 Jahren 1
@pimp juice IT Hi ... Entschuldigung, dass Sie mehr gefragt haben als nötig ..... Gibt es einen schnellen Weg / eine Methode / einen Artikel, um das Passwort und den Benutzernamen zu verschlüsseln, anstatt sie zu verwenden? Das Passwort und der Benutzername verwenden sie dann zum Ausführen des Batch-Skripts (dynamisch) ..... Nochmals entschuldigen Sie, dass Sie zu viel gefragt haben .... Ich kann einen anderen Thread starten, wenn Sie möchten. mina nageh vor 5 Jahren 0
ok ich bin nicht in Eile ...... nimm dir Zeit danke, mina nageh vor 5 Jahren 0
Ja, was ist es!! mina nageh vor 5 Jahren 0
Mina - Senden Sie einfach eine weitere Frage und fragen Sie danach, ob Sie die folgende Logik verwenden: Wie können Sie dies mit dieser Logik oder ähnlichem tun? Pimp Juice IT vor 5 Jahren 0
Ich habe es hier getan, es ist https://superuser.com/questions/1369904/encrypting-password-and-email-to-send-an-email-in-a-bat-file mina nageh vor 5 Jahren 0

1 Antwort auf die Frage

5
Pimp Juice IT

Wenn Sie eine E-Mail - auch mit einem Anhang - senden müssen, indem Sie ein PowerShell-Skript mit der Logik zum Erstellen und Senden der E- Mail verwenden, können Sie sie über ein Stapelskript ausführen, wobei vertrauliche Werte als Argumente übergeben werden, anstatt empfindliche Werte hart zu codieren die Skriptlogik.

Die PowerShell- Skriptlogik kann Argumente akzeptieren, z. B. den Benutzernamen des lokalen Google Mail-Postfachs, das zu authentifizierende Kennwort für das Senden von E-Mails und alle anderen Elemente, die im Skript nicht fest codiert werden sollen.

  • PowerShell Args

    Innerhalb eines Skripts oder einer Funktion können Sie mit dem Array $ args auf nicht benannte Argumente verweisen, beispielsweise indem Sie alle Argumente an ein Cmdlet übergeben. Sie können sich auch auf bestimmte Argumente über ihre Position beziehen:

    "Das erste Argument ist" + $Args[0]"

    "Zweites Argument ist" + $Args[1]"

Sie können auch eine Logik in das Batch-Skript einfügen, damit auch Argumente zur Verfügung stehen, mit denen Sie zur Ausführungszeit sensible Werte übergeben und Argumentplatzhalter verwenden können, anstatt empfindliche Werte fest zu codieren.

  • Batch Args

    Sie können den Wert eines beliebigen Arguments abrufen, %indem Sie eine numerische Position in der Befehlszeile verwenden. Der erste übergebene Artikel ist immer %1der zweite Artikel ist immer %2und so weiter

    % * in einem Batch-Skript bezieht sich auf alle Argumente (z. B. %1 %2 %3 %4 %5 ...%255nur Argumente, %1auf %9die durch Nummer verwiesen werden kann).

Auf diese Weise werden die sensiblen Werte, die Sie schützen müssen, beim Öffnen der Skripts weder offengelegt noch in die Skriptlogik eingebettet, sodass jeder sehen kann, der Lesezugriff auf das Skript hat.


Wichtiger Hinweis: Am Ende jedes PowerShell-Skript-Beispiels befindet sich ein Abschnitt mit dem Namen " Batch Execute Script" (Batch Execute Script), das die Logik enthält, die vom Batch-Skript zur Ausführung verwendet werden soll. Geben Sie dabei den Benutzernamen, das Kennwort und / oder den vollständigen Pfad als Anhang ein entsprechende Argumente für den Batch - Skript dhsendemail.bat "<GmailAccountName>" "<GmailPassword>" "<FullPathAttachment>"

PowerShell-Skript (kein Anhang)

$Username = $args[0] $EmailPassword = $args[1]  $Username = $Username $EmailTo = "EmailAddress@domain.com"  $EmailFrom = "noreply@Whatever.notify" $Subject = "Email Subject" $Body = "Email Body" $SMTPServer = "smtp.gmail.com"  $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)  $SMTPClient.EnableSsl = $true  $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword);  $SMTPClient.Send($SMTPMessage) 

Batch Execute Script

SET GmailAccount=%~1 SET GmailPassword=%~2 SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& 'C:\Scripts\SendEmail.ps1' '%GmailAccount%' '%GmailPassword%'" 

PowerShell-Skript (mit Anhang)

$Username = $args[0] $EmailPassword = $args[1] $Attachment = $args[2]  $Username = $Username $EmailTo = "EmailAddress@domain.com"  $EmailFrom = "noreply@Whatever.notify" $Subject = "Email Subject" $Body = "Email Body" $SMTPServer = "smtp.gmail.com"  $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) $Attachment = New-Object System.Net.Mail.Attachment($Attachment) $SMTPMessage.Attachments.Add($Attachment) $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)  $SMTPClient.EnableSsl = $true  $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword);  $SMTPClient.Send($SMTPMessage) 

Batch Execute Script

SET GmailAccount=%~1 SET GmailPassword=%~2 SET Attachment=%~3 SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%"  Powershell -ExecutionPolicy Bypass -Command "& 'C:\Scripts\SendEmail.ps1' '%GmailAccount%' '%GmailPassword%' '%Attachment%'" 

Batch-Skript (dynamisch)

Hier ist ein dynamisches All-in-One-Batch-Skript, bei dem Sie einfach den Benutzernamen des Google Mail-Kontos, das Passwort für das Google Mail-Konto und den vollständigen Pfad zum Anhang übergeben.

@ECHO OFF  SET GmailAccount=%~1 SET GmailPassword=%~2 SET Attachment=%~3  CALL :PowerShell CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'" EXIT  :PowerShell SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 SET PSScript=%temp%\~tmpSendeMail.ps1 IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"  ECHO $Username = $args[0]>> "%PSScript%" ECHO $EmailPassword = $args[1]>> "%PSScript%" ECHO $Attachment = $args[2]>> "%PSScript%" ECHO >> "%PSScript%" ECHO $Username = $Username >> "%PSScript%" ECHO $EmailTo = "EmailAddress@domain.com" >> "%PSScript%" ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%" ECHO $Subject = "Email Subject" >> "%PSScript%" ECHO $Body = "Email Body" >> "%PSScript%" ECHO $SMTPServer = "smtp.gmail.com" >> "%PSScript%" ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) >> "%PSScript%" ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment) >> "%PSScript%" ECHO $SMTPMessage.Attachments.Add($Attachment) >> "%PSScript%" ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> "%PSScript%" ECHO $SMTPClient.EnableSsl = $true >> "%PSScript%" ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword) >> "%PSScript%" ECHO $SMTPClient.Send($SMTPMessage) >> "%PSScript%" GOTO :EOF 

Sie führen das Batch-Skript so aus. . .

 sendemail.bat "<GmailAccountName>" "<GmailPassword>" "<FullPathAttachment>" 


Batch-Skript (statisch und selbstlöschend)

Für dieses Skript werden die hartcodierten Werte in den Variablen von GmailAccount=, festgelegt GmailPassword=. Attachment=Sobald es jedoch ausgeführt wird, wird es das Skript vollständig löschen, und zwar dort, "%~FN0"wo 0sich das Skript selbst befindet. Dies bedeutet, dass Sie sicher sein möchten, dass Sie dieses Skript kopieren und dann die Kopie nur von den Maschinen ausführen, die Sie ausführen, wenn diese Informationen nicht verfügbar gemacht werden sollen.

@ECHO OFF  SET GmailAccount=<GmailAccountName> SET GmailPassword=<GmailPassword> SET Attachment=<FullAttachmentPath>  CALL :PowerShell CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'" IF EXIST "%~FN0" DEL /Q /F "%~FN0" EXIT  :PowerShell SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 SET PSScript=%temp%\~tmpSendeMail.ps1 IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"  ECHO $Username = $args[0]>> "%PSScript%" ECHO $EmailPassword = $args[1]>> "%PSScript%" ECHO $Attachment = $args[2]>> "%PSScript%" ECHO >> "%PSScript%" ECHO $Username = $Username >> "%PSScript%" ECHO $EmailTo = "EmailAddress@domain.com" >> "%PSScript%" ECHO $EmailFrom = "noreply@Whatever.notify" >> "%PSScript%" ECHO $Subject = "Email Subject" >> "%PSScript%" ECHO $Body = "Email Body" >> "%PSScript%" ECHO $SMTPServer = "smtp.gmail.com" >> "%PSScript%" ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) >> "%PSScript%" ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment) >> "%PSScript%" ECHO $SMTPMessage.Attachments.Add($Attachment) >> "%PSScript%" ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> "%PSScript%" ECHO $SMTPClient.EnableSsl = $true >> "%PSScript%" ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword) >> "%PSScript%" ECHO $SMTPClient.Send($SMTPMessage) >> "%PSScript%" GOTO :EOF 

Weitere Ressourcen