
La función ShellExecute es una de las más flexibles del API de windows. Usando ShellExecute, podemos pasar cualquier nombre de fichero y si su extensión está asociada a un programa registrado en nuestra máquina se abre la aplicación y se muestra nuestro fichero.
Si le pasamos una URL se abrirá el navegador por defecto y se conectará con dicha URL. Si le pasamos una dirección de correo precedida por "mailto:" se abrirá el cliente de correo y nos mostrará un mensaje nuevo con la dirección ya cubierta. Pero podemos hacer más cosas con el correo. Podemos incluir una lista de direcciones para enviar copia, copia invisible, el asunto, el texto e incluso ficheros anexados. Para ello debemos crear una variable string, añadir la lista de direcciones (separadas por punto y coma), luego un signo de interrogación y los demás elementos como sigue :
Para CCs (con copia): &CC= (seguido de la lista)
Para copia invisble: &BCC= (seguido de la lista)
Para el asunto: &Subject= (seguido del texto)
Para el cuerpo del mensaje: &Body= (seguido del texto)
Para fichero anexados: &Attach= (seguido de un nombre de fichero válido entre comillas chr(34))
Para probarlo crea un nuevo proyecto, añade seis textbox a un formulario y un botón (cmdSendIt). Pega este código en la sección de declaraciones del formulario:
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (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
Pega este código en el evento click del botón:
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
End If
If Len(txtBCC) Then
sAddedText = sAddedText & "&BCC=" & txtBCC
End If
If Len(txtSubject) Then
sAddedText = sAddedText & "&Subject=" & txtSubject
End If
If Len(txtBody) Then
sAddedText = sAddedText & "&Body=" & txtBody
End If
If Len(txtAttachmentFileLocation) Then
sAddedText = sAddedText & "&Attach=" & _
Chr(34) & txtAttachmentFileLocation & Chr(34)
End If
sText = "mailto:" & sText
' clean the added elements
If Len(sAddedText) <> 0 Then
' there are added elements, replace the first
' ampersand with the question character
Mid$(sAddedText, 1, 1) = "?"
End If
sText = sText & sAddedText
If Len(sText) Then
Call ShellExecute(Me.hWnd, "open", sText, _
vbNullString, vbNullString, SW_SHOWNORMAL)
End If
End Sub
No puede haber espacios entre los ampersands y los tags, ni entre los tags y los signos igual. No tienes opciones de formateo y el cuerpo del mensaje será un sólo párrafo pero a cambio es una forma muy sencilla de enviar mensajes.
Esta técnica puede emplearse también en HTML :
smith@smithvoice.com?subject=
Feedback From VisualBasic ett
smithvoice.com/vbfun.htm&CC=smith@smithhome.org&BC
C=fred@fred.net;bill@home.com&body=hello how are
you">feedback@smithvoice
Nota : no todos los clientes de correo soportarán todos los campos.
-Robert Smith, Kirkland, Washington

