Как отправить электронное письмо, которое уже было заполнено в Outlook, с помощью любого скрипта?

Мне нужно отправить электронное письмо через 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"

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

Вот изображение того, что мне нужно отправить файлом сценария:

Заранее спасибо.

Почему бы просто не использовать powershell для отправки электронного письма, которое вы даже можете запустить из btach-file, тогда вам действительно нужен только один скрипт без взаимодействия с графическим интерфейсом. См. мой ответ здесь в качестве примера.

Gerhard 10.04.2022 13:11

Когда я пробую ваш сценарий (тот, что с добавленным вложением) и заполняю все данные по желанию, вывод такой: командлет Send-MailMessage в командном конвейере, позиция 1 Укажите значения для следующих параметров: From: Have I done Что-то не так?

Agent 3 6 9 10.04.2022 14:51

Пишет, что вы не определили параметры. Значит, вы, должно быть, сделали что-то не так.

Gerhard 10.04.2022 15:38
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Престижность за систематическое описание, но есть несколько вещей, на которые стоит обратить внимание:

mklement0 10.04.2022 15:31

Использование "" для побега " с помощью powershell.exe небезопасно (именно с pwsh.exe). В контекстах без оболочки используйте \"; из cmd.exe используйте "^"" (sic).

mklement0 10.04.2022 15:31

Если вы вызываете скрипт файл (вместо передачи произвольного команды), используйте powershell -noexit -File "C:\my_path\MYSCRIPT.ps1", что также позволяет избежать головной боли с цитированием.

mklement0 10.04.2022 15:31

К сожалению, команда контекстного меню, предоставленная Microsoft, которую вы цитируете, разрывается с путями, содержащими встроенные символы '.; когда он работает, он не сохраняет сеанс открытым и запрашивает подтверждение для переопределения политики выполнения (если только для него не установлено значение AllSigned, в этом случае попытка переопределения не предпринимается).

mklement0 10.04.2022 15:32

Относительно Windows PowerShell ISE: это перестал активно развиваться и есть причины не использовать его (нижний раздел), в частности, невозможность запуска PowerShell (Core) 6+. Активно разрабатываемый кроссплатформенный редактор, который предлагает лучший опыт разработки PowerShell, — это Код Visual Studio с его Расширение PowerShell.

mklement0 10.04.2022 15:33

Другие вопросы по теме

Как прочитать несколько строк из файла и вывести их с измененными и добавленными символами в другой файл?
Windows: командная строка, как распаковать файл и переименовать его содержимое с именем заархивированного файла в текущей папке и подпапке?
SyntaxError: (ошибка юникода) кодек 'unicodeescape' не может декодировать байты в позиции 194-195: усеченный escape \UXXXXXXXX
Как получить несколько случаев из текстового файла с помощью пакета?
Можно ли использовать подстановочные знаки в пакетном сценарии для захвата всех каталогов по пути, а затем использовать соответствующее имя для создания файла
Ошибка, связанная с вторичным использованием cd.. в коде C
Хотите запустить скрипт .bat для установки нескольких программ на разные машины
Не удалось сопоставить строку с серийным номером диска в пакетном режиме
Запуск проектов кода VS через пакетный файл
Как получить имя текстового файла, расположенного в текущем каталоге, в переменную с пакетным файлом