Trucos Llamar al programa de correo con datos ya anotados

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



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com