Send email windows api

Как отправлять письма используя Powershell Send-MailMessage

Для отправки писем в Powershell есть команда Send-MailMessage. С помощью этой команды мы можем выполнять отправку писем используя вложения, HTML формат и множеству получателей. У этой команды есть ряд особенностей, которые мы рассмотрим ниже на примерах.

Навигация по посту

Настройка SMTP сервера

Что бы вы смогли отправить письмо вы должны знать настройки для вашего сервера. Почтовые сервера, для отправки писем, используют протокол SMTP. Когда сервера SMTP общаются друг с другом они используют 25 порт, а клиент с сервером 465 или 587 порт. Кроме этого вы должны знать по какому адресу отвечает сервер и использует ли он шифрование. Обычно, если вы используете публичного провайдера, эти настройки доступны в документации.

Ниже пример настроек для яндекса:

Адрес сервера, в Powershel, можно указать двумя способами. Можно объявить используя специальную встроенную переменную $PSEmailServer:

Такая переменная будет работать в рамках одной сессии Powershell (до закрытия консоли) и нам не нужно будет указывать ее в каждой команде. Например так:

Отмечу, что в случае яндекса и gmail знать логин/пароль и почтовый сервер не достаточно. В случае этих провайдеров, в их веб интерфейсах, понадобится настраивать специфические разрешения. В случае обычных, локальных серверов, этого обычно не требуется.

Порт сервера устанавливается в дополнительном параметре Port. Если он не указан, то будет использоваться порт по умолчанию — 25:

Аутентификация

Что бы мы могли отправить письмо — мы должны предоставить пару логин и пароль. Это можно сделать с помощью команды ‘Get-Credential’:

Как видно на скриншоте — при каждом выполнении команды у нас появляется окно для ввода логина и пароля. Вы так же можете сохранить учетные данные в переменную и передавать ее в команды:

При работе с командой Get-Credential есть неочевидная деталь — ее запуск создает объект (логин и пароль) в памяти. Любая попытка его экспортировать (сохранить) приведет к шифрованию объекта ключем, индивидуальным для каждого пользователя. Т.е. это плохой вариант, если вы планируете отправлять письма со множества компьютеров — вам просто понадобится вводить эти данные у каждого пользователя.

Вы можете передать пароль обычным текстом, что решит проблему описанную выше:

Более подробно, про работу логинов и паролей в Powershell, описывалось в предыдущих статьях.

Как подставлять значения переменных в строках с Powershell

Отправка писем

Разобравшись с предыдущими параметрами мы можем отправить письмо. Дополнительно мы должны указать следующие параметры:

  • UseSsl — так как наше подключение шифруется;
  • From — ящик, с которого отправляется письмо;
  • To — кому отправляем;
  • Subject — тема письма;
  • Body — содержание письма.

В моем случае команда будет выглядеть так:

Данная команда, в случая yandex и многих других, публичных, провайдеров вернет ошибку:

  • Send-MailMessage : Не удается прочитать данные из транспортного соединения: net_io_connectionclosed.

Эта проблема связана с тем, что библиотека .NET SmtpClient, которая работает с командой Send-MailMessage, может использовать шифрование SSL/TLS только с поддержкой STARTTLS. Стандарт STARTTLS расширял возможности шифрования и должен был стать массовым, но этого не случилось (и скорее всего не случится). Во время публикации стандарта STARTTLS был объявлен новый порт для SMTP — 587(msa), а порт 465 (smtps) объявили устаревшим. Так как новый стандарт так и не приобрел массовость провайдеры, чаще всего, пишут только про 465 порт, но и 587 так же у многих провайдеров работает.

Подводя коротко итог предыдущего абзаца, если провайдер пишет про 465 порт, а он не работает — попробуйте 587. В случае с яндексом это именно так.

Так же, если вам нужно что бы у получателя выводилось ваше имя/название компании, используйте следующий формат во From:

Читайте также:  Как посмотреть теневые копии windows 10

Несколько адресатов

Так же как и в случае обычного почтового клиента мы можем отправлять письма нескольким адресатам используя:

  • To — обычный получатель;
  • Cc — получатель копии;
  • Bcc — получатель скрытой копии.

Если планируется использовать несколько почтовых ящиков, в одном параметре, разделяйте их запятыми:

Кодировка

Как вы знаете Windows пока не перевела работу ОС на UTF8 (используется ANSI и ASCII). В это же время UTF8 является стандартом для работы в интернете. По этой причине, если вы не укажете кодировку, то может получится следующая картина:

Отмечу, что это проблема возникнет в Powershell 5.1, которая установлена по умолчанию в Windows. В случае с Powershell 7.1, по умолчанию используется UTF8. Тем не менее вы можете установить свое значение:

Значения устанавливаются в параметре Encoding:

Отправка письма с разметкой HTML

Письма могут быть посланы как обычный текст или с HTML разметкой. Для разметки дополнительно к параметру Body нужно указать BodyAsHtml:

Вложения

Вложения можно перечислить используя параметр Attachments и пути до файлов:

Этот параметр так же принимает значения через конвейер т.е. мы можем получить все файлы в папке и отправить их:

Уведомления о доставке

Мы можем получить уведомления, если установим следующие параметры у -DeliveryNotificationsOptions:

  • OnSuccess — при успешной доставке;
  • OnFailure — если сообщение не доставлено;
  • Delay — при задержке SMTP сервером.

Через запятую их можно установить несколько:

Уведомление будет доставлено на почтовый ящик.

Приоритет

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

Метод MailItem. Send (Outlook) MailItem.Send method (Outlook)

Отправляет сообщение электронной почты. Sends the email message.

Синтаксис Syntax

выражение. expression. Send

Expression (выражение ) Переменная, представляющая объект MailItem . expression A variable that represents a MailItem object.

Примечания Remarks

Метод Send отправляет элемент, используя учетную запись по умолчанию, указанную для сеанса. The Send method sends an item using the default account specified for the session. В сеансе, где в профиле определено несколько учетных записей Microsoft Exchange, первая учетная запись Exchange, добавленная в профиль, является основной учетной записью Exchange, а также учетной записью по умолчанию для этого сеанса. In a session where multiple Microsoft Exchange accounts are defined in the profile, the first Exchange account added to the profile is the primary Exchange account, and is also the default account for the session. Чтобы указать другую учетную запись для отправки элемента, задайте для свойства SendUsingAccount нужный объект учетной записи , а затем вызовите метод Send . To specify a different account to send an item, set the SendUsingAccount property to the desired Account object and then call the Send method.

Пример Example

Если вы используете Microsoft Visual Basic Scripting Edition (VBScript) в форме Outlook, вы не создадите объект Application , и вы не можете использовать именованные константы. If you use Microsoft Visual Basic Scripting Edition (VBScript) in an Outlook form, you do not create the Application object, and you cannot use named constants. В этом примере показано, как переадресовать почтовый элемент с помощью кода VBScript. This example shows how to forward a mail item using VBScript code.

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Использование REST API почты Outlook Use the Outlook mail REST API

Microsoft Graph позволяет вашему приложению получать авторизованный доступ к данным почты Outlook в личной или корпоративной учетной записи. Имея соответствующие делегированные разрешения или разрешения почты приложения, приложение может получать доступ к данным почты вошедшего пользователя или любого пользователя в клиенте. Дополнительные сведения о маркерах доступа, регистрации приложения, а также делегированных разрешениях и разрешениях приложения см. в статье Основные сведения о проверке подлинности и авторизации. Microsoft Graph lets your app get authorized access to a user’s Outlook mail data in a personal or organization account. With the appropriate delegated or application mail permissions, your app can access the mail data of the signed-in user or any user in a tenant. For more information on access tokens, app registration, and delegated and application permissions, see Authentication and authorization basics.

Читайте также:  Linux find размер файла

API Microsoft Graph поддерживает доступ к данным в основных и общих почтовых ящиках пользователей. The Microsoft Graph API supports accessing data in users’ primary mailboxes and in shared mailboxes. Это может быть календарь, почта или личные контакты в почтовом ящике, хранящиеся в облаке на сервере Exchange Online в Microsoft 365 или на локальном сервере Exchange в гибридном развертывании. The data can be calendar, mail, or personal contacts stored in a mailbox in the cloud on Exchange Online as part of Microsoft 365, or on Exchange on-premises in a hybrid deployment.

API не поддерживает доступ к почтовым ящикам архива на месте ни на сервере Exchange Online, ни на сервере Exchange Server. The API does not support accessing in-place archive mailboxes, not on Exchange Online nor on Exchange Server.

Использование REST API почты Using the mail REST API

Запросы API почты выполняются от имени пользователя, который может определяться свойством пользователя id (уникальным GUID), адресом электронной почты или псевдонимом me , обозначающим вошедшего пользователя. Mail API requests are performed on behalf of a user which can be identified by the user’s id property (a unique GUID), email address, or the me shortcut alias for the signed-in user.

Сообщения электронной почты представлены ресурсом message и упорядочены в почтовой папке mailFolder. Сообщения и почтовые папки определяются свойством id, которое можно получить из операций GET . Email messages are represented by the message resource and organized in a mailFolder. Messages and mail folders are identified by their id property, obtainable from GET operations.

Идентификаторы message и mailfolder не являются уникальными и неизменными в почтовом ящике. In general, do not assume that message and mailfolder IDs are unique and always remain the same within a mailbox. Они могут изменяться, например после копирования или перемещения. They might change after certain actions such as copy or move. Вы можете использовать неизменяемые идентификаторы, чтобы сохранять их, пока сообщение находится в том же почтовом ящике, за исключением отправки черновика и нескольких других сценариев. You can choose to use immutable IDs to retain the same ID as long as the message remains in the same mailbox, with the exception of sending a draft message, and a few other scenarios. Подробные сведения см. в разделе жизненный цикл неизменяемых идентификаторов. See lifetime of immutable IDs for details.

Сообщения могут быть в формате HTML или текстовом формате. Message bodies can be in HTML or text format.

Вы можете использовать такие известные имена папок, как Inbox , Drafts , SentItems или DeletedItems , чтобы указать почтовые папки, которые существуют по умолчанию для всех пользователей. You can use well-known folder names such as Inbox , Drafts , SentItems , or DeletedItems to identify certain mail folders that exist by default for all users. Список поддерживаемых известных имен см. в статье Тип ресурса mailFolder. For a list of supported well-known folder names, see mailFolder resource type.

Например, вы можете получить сообщения из папки Outlook Отправленные вошедшего пользователя, не получая идентификатор папки: For example, you can get messages in the Outlook Sent Items folder of the signed-in user, without first getting the folder ID:

Основные варианты использования Common use cases

Ресурс message предоставляет такие свойства, как categories, conversationId, flag и importance, которые соответствуют функциям, доступным в пользовательском интерфейсе, позволяя приложениям автоматизировать работу или интегрироваться со встроенными возможностями Outlook. The message resource exposes properties such as categories, conversationId, flag, and importance that correspond to features available in the UI, allowing apps to automate or integrate with the built-in Outlook user experience.

В API Microsoft Graph также есть методы и действия, которые поддерживают основные варианты использования сообщений. The Microsoft Graph API also provides methods and actions that support common use cases of messages.

Читайте также:  Office 365 portable для windows 10
Варианты использования Use cases Ресурсы REST REST resources См. также See also
Действия, ориентированные на пользователя User-centric actions
Создание, чтение, ответ, пересылка, отправка, обновление или удаление сообщений Draft, read, reply, forward, send, update, or delete messages message message Методы ресурса message Methods of message
Предоставление другому пользователю права отправлять сообщения от имени владельца почтового ящика Delegate another user to send messages on behalf of the mailbox owner message message Задание свойств from и sender в ресурсе message Setting the from and sender properties in a message
Показ более важных сообщений Let user view more important messages first inferenceClassificationOverride inferenceClassificationOverride Сортировка почты Focused Inbox
Запрос сообщений и их получение в папке поиска Query for messages and get them in a search folder mailSearchFolder mailSearchFolder Методы ресурса mailSearchFolder Methods of mailSearchFolder
Получение содержимого MIME сообщения или его вложения Get the MIME content of a message or message attachment message message Получение содержимого MIME Get MIME content
Добавление, получение или удаление вложений сообщения Add, get, or delete attachments of a message attachment, attachment,
fileAttachment, fileAttachment,
itemAttachment, itemAttachment,
referenceAttachment, referenceAttachment,
message message
Методы ресурса attachment Methods of attachment
Получение настроек языка и часовых поясов для пользователя Get language and time zone choices for a user localeInfo, localeInfo,
timeZoneInformation timeZoneInformation
supportedLanguages, supportedLanguages,
supportedTimeZones supportedTimeZones
Получение или обновление автоматического ответа, языкового стандарта, часового пояса или рабочего времени пользователя Get or update a user’s automatic reply, locale, time zone, or working hours mailboxSettings, mailboxSettings,
automaticRepliesSetting, automaticRepliesSetting,
localeInfo, localeInfo,
workingHours workingHours
Получение настроек почтового ящика пользователя, Get user’s mailbox settings,
Обновление параметров почтового ящика пользователя Update user’s mailbox settings
Получение подсказок об особом состоянии других пользователей, например об отсутствии на месте Get MailTips of other recipients’ special status, such as out-of-office user, user,
mailTips mailTips
Получение подсказок Get MailTips
Управление почтой и папками Mail and folder management
Упорядочивание сообщений в иерархии папок почты Organize messages in a mail folder hierarchy mailFolder mailFolder Методы ресурса mailFolder Methods of mailFolder
Классификация сообщений Categorize messages outlookCategory outlookCategory Методы ресурса outlookCategory Methods of outlookCategory
Автоматизация действий, например пересылка определенных входящих сообщений, с помощью правил папки «Входящие» Use Inbox rules to automate actions such as forwarding specific incoming messages messageRule messageRule Методы ресурса messageRule Methods of messageRule
Получение заголовков сообщений Интернета для сообщения Get Internet message headers of a message message message Получение свойства internetMessageHeaders сообщения. Get the internetMessageHeaders property of a message.
Поиск и фильтрация сообщений Search and filter messages message message Параметры запроса Query parameters
Получение уведомлений об изменениях сообщений в папке Get notified of changes to messages in a folder subscription subscription Работа с веб-перехватчиками в Microsoft Graph Working with webhooks in Microsoft Graph
Синхронизация сообщений или иерархии папок почты Synchronize messages or mail folder hierarchy message message Получение добавочных изменений сообщений в папке Get incremental changes to messages in a folder
Разработка приложений App development
Получение пользовательских данных приложения в виде заголовков сообщений Интернета для сообщения Add custom app data as Internet message headers of a message message message Добавление пользовательских данных в свойство internetMessageHeaders сообщения. Add custom data to the internetMessageHeaders property of the message.
Добавление пользовательских данных приложения в сообщение с помощью расширений Add custom app data to a message by using extensions openTypeExtension, openTypeExtension,
schemaExtension schemaExtension
Добавление пользовательских данных в ресурсы с помощью расширений Add custom data to resources using extensions
Доступ к пользовательским данным для редко предоставляемых свойств Outlook MAPI Access custom data for under-exposed Outlook MAPI properties singleValueLegacyExtendedProperty, singleValueLegacyExtendedProperty,
multiValueLegacyExtendedProperty multiValueLegacyExtendedProperty
Общие сведения о расширенных свойствах Outlook Outlook extended properties overview

Что нового What’s new

Узнайте о новых функциях и обновлениях для этого набора API. Find out about the latest new features and updates for this API set.

Дальнейшие действия Next steps

API почты открывает новые способы взаимодействия с пользователями: The mail API can open up new ways for you to engage with users:

Оцените статью