Мне нужно отправить электронное письмо через Outlook, в котором уже есть все данные (например, тема, тело и т. д.), за исключением того, что это нужно сделать с помощью какого-то сценария. Это может быть любой скрипт, работающий в Windows 10.
По сути, все, что мне нужно, чтобы скрипт сделал, это «щелкнуть» отправить по электронной почте. Можно ли как-то это сделать или это невозможно. Предпочтительными типами шрифтов являются .bat
, .cmd
и .vbs
. Я не хочу использовать стороннее программное обеспечение.
Это то, что у меня сейчас есть в моем пакетном файле, опять же, мне просто нужен скрипт для отправки электронной почты:
cd C:\Program Files (x86)\Microsoft Office\root\Office16 & start outlook.exe /c ipm.note /m "someone@gmail.com?subject=subject here"
Я буду заполнять тело письма другим скриптом, который мне удалось сделать. Если у вас есть идеи по поводу альтернативных вариантов, все равно ответьте, может быть полезно.
Вот изображение того, что мне нужно отправить файлом сценария:
Заранее спасибо.
Когда я пробую ваш сценарий (тот, что с добавленным вложением) и заполняю все данные по желанию, вывод такой: командлет Send-MailMessage в командном конвейере, позиция 1 Укажите значения для следующих параметров: From: Have I done Что-то не так?
Пишет, что вы не определили параметры. Значит, вы, должно быть, сделали что-то не так.
Powershell — это среда сценариев для Microsoft Windows. Скрипты сохраняются в виде простых текстовых файлов с расширением .ps1
. Вы можете создать файл в Windows Powershell ISE или текстовом редакторе. Вот пример сценария, который можно использовать для выполнения работы:
#create COM object named Outlook
$Outlook = New-Object -ComObject Outlook.Application
#create Outlook MailItem named Mail using CreateItem() method
$Mail = $Outlook.CreateItem(0)
#add properties as desired
$Mail.To = "recipient@test.com"
$Mail.Subject = "subject"
$Mail.HTMLBody = "testing"
#send message
$Mail.Send()
#quit and cleanup
$Outlook.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Outlook) | Out-Null
Но в реальном мире код может быть более сложным:
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
add-type -assembly "System.Runtime.Interopservices"
try
{
$outlook = [Runtime.Interopservices.Marshal]::GetActiveObject('Outlook.Application')
$outlookWasAlreadyRunning = $true
}
catch
{
try
{
$Outlook = New-Object -comobject Outlook.Application
$outlookWasAlreadyRunning = $false
}
catch
{
write-host "You must exit Outlook first."
exit
}
}
$namespace = $Outlook.GetNameSpace("MAPI")
См. Автоматизация электронной почты Outlook с помощью PowerShell для получения дополнительной информации.
Обратите внимание, что вы можете запустить скрипт powershell из пакетного файла или командной строки (cmd.exe
):
powershell -noexit "& ""C:\my_path\MYSCRIPT.ps1"""
Это метод, который использует Microsoft, когда мы щелкаем правой кнопкой мыши сценарий ps1 и нажимаем «Запустить с PowerShell»:
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & 'C:\Users\USERNAME\Desktop\MYSCRIPT.ps1'"
Престижность за систематическое описание, но есть несколько вещей, на которые стоит обратить внимание:
Использование ""
для побега "
с помощью powershell.exe
небезопасно (именно с pwsh.exe
). В контекстах без оболочки используйте \"
; из cmd.exe
используйте "^""
(sic).
Если вы вызываете скрипт файл (вместо передачи произвольного команды), используйте powershell -noexit -File "C:\my_path\MYSCRIPT.ps1"
, что также позволяет избежать головной боли с цитированием.
К сожалению, команда контекстного меню, предоставленная Microsoft, которую вы цитируете, разрывается с путями, содержащими встроенные символы '
.; когда он работает, он не сохраняет сеанс открытым и запрашивает подтверждение для переопределения политики выполнения (если только для него не установлено значение AllSigned
, в этом случае попытка переопределения не предпринимается).
Относительно Windows PowerShell ISE: это перестал активно развиваться и есть причины не использовать его (нижний раздел), в частности, невозможность запуска PowerShell (Core) 6+. Активно разрабатываемый кроссплатформенный редактор, который предлагает лучший опыт разработки PowerShell, — это Код Visual Studio с его Расширение PowerShell.
Почему бы просто не использовать
powershell
для отправки электронного письма, которое вы даже можете запустить изbtach-file
, тогда вам действительно нужен только один скрипт без взаимодействия с графическим интерфейсом. См. мой ответ здесь в качестве примера.