Microsoft Developer Network > Программирование в Microsoft Visual Basic > Windows API и DLL > Разное

Совет 290. Как заполнить поля электронного сообщения

ShellExecute является одной из наиболее гибких функций в Win32 API. С ее помощью можно передавать любое имя файла, а если расширение файла связано с какой-либо из программ, зарегистрированных на машине пользователя, то запускается соответствующее приложение, которое выводит или проигрывает указанный файл.

Здесь мы покажем, как использовать функцию ShellExecute для отправки электронных сообщений. Вы сможете задавать не только адрес получателя, но и списки получателей (CC и BCC), тему и текст сообщения, а также вставлять файл или его часть в отправляемое сообщение. Для этого необходимо создать строковую переменную, добавить список основных адресов (отделенных друг от друга точкой с запятой) и знак вопроса:

Листинг 1.

для копий CC (Копия): &CC= (список получателей)
для невидимых (слепых) копий: &BCC= (список получателей)
для темы сообщения: &Subject= (тема сообщения)
для текста сообщения: &Body= (текст сообщения)
для присоединения файла: &Attach= (путь к файлу, заключенный в кавычки)

Продемонстрируем это на примере. Создайте новый VB-проект, добавьте форму и разместите на ней Изображение GIF Рис. 1. шесть текстовых полей и одну командную кнопку cmdSendIt.

Напишите такой код в разделе Declarations:

Листинг 2.

Private Declare Function ShellExecute Lib _
  "shell32.dll" Alias "ShellExecute" _
     (ByVal hWnd As Long, ByVal lpOperation As _
     String, ByVal lpFile As String, ByVal _
     lpParameters As String, ByVal lpDirectory _
     As String, ByVal nShowCmd As Long) As Long
Private Const SW_SHOWNORMAL = 1

Затем введите следующий код для события Click командной кнопки:

Листинг 3.

Private Sub cmdSendIt_Click()
  Dim sText As String
  Dim sAddedText As String
  If Len(txtMainAddresses) Then
       sText = txtMainAddresses
  End If
  If Len(txtCC) Then sAddedText = sAddedText & "&CC=" & txtCC
  If Len(txtBCC) Then sAddedText = sAddedText & "&BCC=" & txtBCC
  If Len(txtSubject) Then _
       sAddedText = sAddedText & "&Subject=" & txtSubject
  If Len(txtBody) Then _
       sAddedText = sAddedText & "&Body=" & txtBody
  If Len(txtAttachementFileLocation) Then _
       sAddedText = sAddedText & "&Attach=" & Chr(34) & _
            txtAttachementFileLocation & Chr(34)
  sText = "mailto:" & sText
  If Len(sAddedText) <> 0 Then Mid$(sAddedText, 1, 1) = "?"
  sText = sText & sAddedText
  If Len(sText) Then _
    Call ShellExecute(Me.hWnd, "open", sText, _
     vbNullString, vbNullString, SW_SHOWNORMAL)
End Sub

Здесь следует обратить внимание на два момента:

  1. Между знаками «амперсанд» (&) и «тэг» или знаками «тэг» и «равно» не нужно ставить пробелы.
  2. Из-за отсутствия возможностей форматирования текст сообщения будет состоять из одного параграфа.

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

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