Поделиться через


Настраиваемое действие SendMail

В примере SendMail показано, как создать настраиваемое действие, которое является производным от AsyncCodeActivity отправки почты с помощью SMTP для использования в приложении рабочего процесса. Настраиваемое действие использует возможности асинхронной отправки электронной почты SmtpClient и отправки почты с проверкой подлинности. Он также предоставляет некоторые функции конечного пользователя, такие как режим тестирования, замена маркеров, шаблоны файлов и путь сброса тестов.

В следующей таблице приведены аргументы для SendMail действия.

Имя Тип Описание
Хозяин Струна Адрес узла SMTP-сервера.
Порт Струна Порт службы SMTP на узле.
EnableSsl булевая переменная (bool) Указывает, используется ли SmtpClient протокол SSL для шифрования подключения.
Имя пользователя Струна Имя пользователя для настройки учетных данных для проверки подлинности свойства отправителя Credentials .
Пароль Струна Пароль для настройки учетных данных для проверки подлинности свойства отправителя Credentials .
Тема InArgument<T> <струна> Тема сообщения.
Тело InArgument<T> <струна> Текст сообщения.
Вложения InArgument<T> <струна> Коллекция вложений, используемая для хранения данных, присоединенных к этому сообщению электронной почты.
От MailAddress Адрес отправителя для этого сообщения электронной почты.
Кому InArgument<T><MailAddressCollection> Коллекция адресов, содержащая получателей этого сообщения электронной почты.
КУБОВЫЙ InArgument<T><MailAddressCollection> Коллекция адресов, содержащая получателей углеродной копии (CC) для этого сообщения электронной почты.
BCC InArgument<T><MailAddressCollection> Коллекция адресов, содержащая получателей слепой углеродной копии (BCC) для этого сообщения электронной почты.
Токены InArgument<T> <Строка IDictionary<, строка>> Маркеры для замены в тексте. Эта функция позволяет пользователям указывать некоторые значения в теле, которые можно будет заменить позже маркерами, предоставленными с помощью этого свойства.
BodyTemplateFilePath Струна Путь к шаблону для основного текста. Действие SendMail копирует содержимое этого файла в свойство 'body'.

Шаблон может содержать токены, которые заменяются содержимым свойства токенов.
TestMailTo MailAddress Если это свойство задано, все сообщения электронной почты отправляются на адрес, указанный в нем.

Это свойство предназначено для использования при тестировании рабочих процессов. Например, если вы хотите убедиться, что все сообщения электронной почты отправляются без отправки их фактическим получателям.
TestDropPath Струна Если это свойство задано, все сообщения электронной почты также сохраняются в указанном файле.

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

Содержимое решения

Решение содержит два проекта.

Проект Описание Важные файлы
ОтправитьПочту Действие SendMail 1. SendMail.cs: реализация для основного действия
2. SendMailDesigner.xaml и SendMailDesigner.xaml.cs: конструктор для действия SendMail
3. MailTemplateBody.htm: шаблон для отправки сообщения электронной почты.
Клиент для тестирования отправки почты Клиент для тестирования действия SendMail. Этот проект демонстрирует два способа вызова действия SendMail: декларативно и программно. 1. Sequence1.xaml: рабочий процесс, вызывающий действие SendMail.
2. Program.cs: вызывает Sequence1, а также создает рабочий процесс программным способом, использующим SendMail.

Дальнейшая настройка действия SendMail

Хотя в примере не показано, пользователи могут выполнять дополнительную настройку активности SendMail. В следующих трех разделах показано, как это сделать.

Отправка сообщения электронной почты с помощью маркеров, указанных в теле письма

В этом фрагменте кода показано, как отправлять сообщения электронной почты с маркерами в тексте. Обратите внимание, как токены предоставляются в свойстве 'body'. Значения этих токенов предоставляются свойству 'токены'.

IDictionary<string, string> tokens = new Dictionary<string, string>();
tokens.Add("@name", "John Doe");
tokens.Add("@date", DateTime.Now.ToString());
tokens.Add("@server", "localhost");

new SendMail
{
    From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
    To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
    Subject = "Test email",
    Body = "Hello @name. This is a test email sent from @server. Current date is @date",
    Host = "localhost",
    Port = 25,
    Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens)
};

Отправка сообщения электронной почты с помощью шаблона

В этом фрагменте показано, как отправить сообщение электронной почты с использованием токенов шаблона в теле сообщения. Обратите внимание, что при настройке свойства BodyTemplateFilePath нам не нужно указывать значение свойства Body (содержимое файла шаблона будет скопировано в тело).

new SendMail
{
    From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
    To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
    Subject = "Test email",
    Host = "localhost",
    Port = 25,
    Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens),
    BodyTemplateFilePath = @"..\..\..\SendMail\Templates\MailTemplateBody.htm",
};

Отправка сообщений в режиме тестирования

В этом фрагменте кода показано, как задать два свойства тестирования: установив TestMailTo, все сообщения будут отправлены на john.doe@contoso.con (без учета значений To, Cc, Bcc). При установке TestDropPath все исходящие электронные письма будут также записываться в указанный путь. Эти свойства можно задать независимо (они не связаны).

new SendMail
{
   From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
   To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
   Subject = "Test email",
   Host = "localhost",
   Port = 25,
   Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens),
   BodyTemplateFilePath = @"..\..\..\SendMail\Templates\MailTemplateBody.htm",
   TestMailTo= new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
   TestDropPath = @"c:\Samples\SendMail\TestDropPath\",
};

инструкции для Set-Up

Для этого примера требуется доступ к SMTP-серверу.

Дополнительные сведения о настройке SMTP-сервера см. по следующим ссылкам.

Эмуляторы SMTP, предоставляемые сторонними сторонами, доступны для скачивания.

Чтобы запустить этот пример

  1. Откройте файл решения SendMail.sln с помощью Visual Studio.

  2. Убедитесь, что у вас есть доступ к допустимому SMTP-серверу. См. инструкции по настройке.

  3. Настройте программу с адресом сервера и адресами электронной почты отправителя и получателя.

    Чтобы правильно выполнить этот пример, может потребоваться настроить значения адресов электронной почты from and To и SMTP-сервера в Program.cs и в Sequence.xaml. Вам потребуется изменить адрес в обоих расположениях, так как программа отправляет почту двумя разными способами.

  4. Для построения решения нажмите CTRL+SHIFT+B.

  5. Чтобы запустить решение, нажмите клавиши CTRL+F5.