Отправить файл на адрес электронной почты, используя файл bat, не раскрывая информацию электронной почты?

581
mina nageh

Я хочу отправить файл в свою учетную запись Gmail через файл bat и зашифровать информацию о моей электронной почте в этом файле bat, чтобы, если кто-то откроет файл bat, он не мог получить информацию о нем из электронной почты.

Логика такая как:

  1. проверьте, правильно ли работает интернет

    • если все в порядке, отправьте файл, а затем удалите файл bat
  2. проверьте, правильно ли работает интернет

    • если нет Запланируйте это сделать позже или добавьте его к запуску

    • когда закончите, удалите его из расписания или запуска!

0
Чтобы отправлять электронную почту через Gmail без использования веб-браузера, вам необходим почтовый клиент на основе SMTP, такой как Outlook или Mozilla Thunderbird. У вас есть один установленный? Если так, то какой? K7AAY 5 лет назад 0
«У вас есть один установленный?». Нет, я не ... есть ли альтернативный почтовый сервис, который готов к работе (переносимый), так как ему не нужно устанавливать дополнительное программное обеспечение ?! mina nageh 5 лет назад 0
@PimpJuiceIT, восприятие близкими избирателями «слишком широкого» зависит от наличия хорошего, простого ответа, который демонстрирует, что он не настолько широк. Действуй. fixer1234 5 лет назад 2
@ fixer1234 .... Вот вам и "простой" ответ, верно !! Pimp Juice IT 5 лет назад 0
@PimpJuiceIT, да, никто в здравом уме не ответит на вопрос, который требует разработки приложения для решения проблемы, так что хорошо, что вы продемонстрировали тривиальное решение. Мне пришлось проголосовать, чтобы снова открыть, чтобы убедиться, что это не будет удалено. Может быть, это даже привлечет другой ответ. Кстати, ваш ответ немного краток. Возможно, вы захотите увеличить его, добавив мясо из голых ссылок в конце. ТОЛЬКО ДЕТСКИЙ! fixer1234 5 лет назад 1
@pimp juice IT Привет ... Извините, что спросил больше, чем требуется ..... Есть ли быстрый способ / метод / статья для шифрования пароля и имени пользователя вместо его использования? Одна командная строка, как создать другой файл bat, который декодирует затем пароль и имя пользователя используют их для запуска пакетного сценария (динамического) ..... Еще раз извините, что слишком много спрашиваю .... Я могу запустить другой поток, если вы предпочитаете. mina nageh 5 лет назад 0
хорошо, я не спешу ...... не торопитесь, спасибо, mina nageh 5 лет назад 0
Да что это !! mina nageh 5 лет назад 0
Мина - Просто задай другой вопрос и спроси его, основываясь на приведенной ниже логике, как то, что ты используешь, так как ты можешь сделать это с этой логикой или чем-то подобным и т. Д. Pimp Juice IT 5 лет назад 0
я сделал вот это https://superuser.com/questions/1369904/encrypting-password-and-email-to-send-an-email-in-a-bat-file mina nageh 5 лет назад 0

1 ответ на вопрос

5
Pimp Juice IT

Если вам нужно отправить электронное письмо - даже с вложением - с помощью скрипта PowerShell с логикой, которая создает и отправляет электронное письмо, вы можете выполнить его с помощью пакетного скрипта, передавая конфиденциальные значения в качестве аргументов, а не жестко кодирующие конфиденциальные значения в логика сценария

Сценарий PowerShell логика может принимать аргументы, такие как имя пользователя локального почтового ящика Gmail, пароль для аутентификации для отправки электронной почты, и все, что вы не хотите жестко закодированы в сценарии.

  • PowerShell Args

    Внутри скрипта или функции вы можете ссылаться на безымянные аргументы, используя массив $ args, например, передавая все аргументы в командлет. Вы также можете ссылаться на конкретные аргументы по их позиции:

    «Первый аргумент -« + $Args[0]»

    "Второй аргумент" + $Args[1]"

Вы также можете поместить логику в пакетный скрипт, чтобы он также имел аргументы, которые вы можете передавать чувствительным значениям во время выполнения, и использовать заполнители аргументов, а не жестко кодировать чувствительные значения.

  • Пакетные Арги

    Вы можете получить значение любого аргумента, используя %после него его числовую позицию в командной строке. Первый элемент передается всегда, %1второй элемент всегда %2и т. Д.

    % * в пакетном скрипте относится ко всем аргументам (например, %1 %2 %3 %4 %5 ...%255только по аргументам, %1на %9которые можно ссылаться по номеру).

Таким образом, если сценарии открыты, конфиденциальные значения, которые необходимо защитить, не будут выставлены или жестко закодированы в логике сценария для тех, кто может видеть, кто может иметь доступ для чтения к сценарию.


Важное примечание. Внизу каждого примера сценария PowerShell есть раздел с именем « Пакетный сценарий выполнения», в котором есть логика, которую нужно использовать из пакетного сценария для выполнения, или что угодно, поэтому вы будете использовать полный путь имени пользователя, пароля и / или вложения в качестве соответствующие аргументы для пакетного сценария, т.е.sendemail.bat "<GmailAccountName>" "<GmailPassword>" "<FullPathAttachment>"

Скрипт PowerShell (без вложений)

$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) 

Пакетный сценарий выполнения

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 (с вложением)

$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) 

Пакетный сценарий выполнения

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%'" 

Пакетный скрипт (динамический)

Вот динамический пакетный сценарий «все в одном», в котором вы просто передаете имя пользователя учетной записи Gmail, пароль учетной записи Gmail и полный путь к вложению.

@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 

Вы выполняете пакетный скрипт следующим образом., ,

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

enter image description here


Пакетный скрипт (статический и самоуничтожающийся)

Этот сценарий будет иметь жестко закодированные значения, заданные в переменных GmailAccount=, GmailPassword=и, Attachment=но как только выполняется, он удалит [сам] скрипт целиком с помощью "%~FN0"которой 0является сам скрипт. Это означает, что вы захотите убедиться, что скопировали этот сценарий, а затем запускаете копию только с машин, на которых вы будете запускать, где вы не хотите, чтобы эта информация была раскрыта.

@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 

Дополнительные ресурсы