- Presentación.
          Seguimos con nuestro tutorial básico, en esta ocasión vamos a ver cómo podemos enviar un correo con el protocolo SMTP, explorar los archivos de Windows para elegir uno y mostrar una Caja de Mensaje (MsgBox) 
          - En Basic4Android vimos cómo enviar un correo con SMTP y en otro tutorial vimos cómo explorar archivos(ejemplo 3).
          Nos basamos en esos tutoriales y los vamos a adaptar a B4J. 
              
              Necesitamos una cuenta de Gmail.com, de Yahoo.com,... para que sirva como "intermediario" entre el correo que enviamos y el receptor.
              Vamos a enviar nuestro mensaje al servidor por el protocolo SMTP y el puerto 465 para que el servidor lo reenvíe al destinatario de nuestro correo. 
          Baja para ver su aspecto.(necesita Java 1.7.1) 
          
            
              |  | 
 Librerías necesarias  | 
          
           
          1.- Mediante el Designer...
              
              - Creamos un Layout y lo llamamos: "Layout", que contendrá 4 Label, las tres primeras contendrá estos textos:
              
              Enviar a...
    Asunto
    Mensaje 
          La cuarta Label llevará el texto Label1 y le pondremos en JavaFX CSS Id: Label1
              (a los anteriores Label no es necesario ponerle Identificador de JavaFX porque no se utilizan dentro del código que realizamos.) 
          
          Agregamos dos TextField, en sus JavaFX CSS Id escribimos: tf_enviar_a, tf_asunto
    Agregamos un TextArea, en su JavaFX CSS Id escribimos: ta_mensaje
    Agregamos un Button, en su JavaFX CSS Id escribimos: boton_enviar  
    Agregamos un ListView, en su JavaFX CSS Id escribimos: ListView1
          
          - Ahora vamos a crear otro Layout que llamaremos "CajaMensaje", contendrá:
    Un Label, en su JavaFX CSS Id escribimos: Label_Mensaje 
    Un Button, en su JavaFX CSS Id escribimos: boton_cerrar
          El Layout "CajaMensaje" funcionará como ventana MsgBox que podremos utilizar como confirmación de llegada de correo o para mensajes de errores.
          2.- Copiamos y pegamos el código...
          
            
              | Código Main  | 
            
              | 
#Region  Project Attributes 
    #MainFormWidth: 600
    #MainFormHeight: 731 
#End Region
Sub Process_Globals
    ' Juan Antonio Villalpando
    ' juana1991@yahoo.com
    ' Diciembre 2013
    Private fx As JFX
    Private MainForm As Form
    Private CajaMensaje As CajaMensaje
    Private SMTP As SMTP
    Dim tf_enviar_a, tf_asunto As TextField
    Dim ta_mensaje As TextArea
    
     ' Adjuntar archivo
    Dim ListView1 As ListView
    Dim Label1 As Label
    Dim Listado As List
    Dim ruta, archivo  As String
End Sub
Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.Title = "Correo SMTP © Juan Antonio Villalpando"
    MainForm.RootPane.LoadLayout("Layout")
    MainForm.Show
    MainForm.BackColor = fx.Colors.White
    SMTP.Initialize("smtp.gmail.com", 465, "micorreo@gmail.com","micontraseñadegmail","SMTP")
    ' SMTP.Initialize("smtp.mail.yahoo.com", 465, "micorreo@yahoo.es","miclave","SMTP")
    SMTP.UseSSL = True
    tf_enviar_a.Text = "iesteleco@gmail.com"
    tf_asunto.Text = "Prueba"
    ta_mensaje.Text = "Correo enviado por Juan Antonio Villalpando, prueba de SMTP"
    CajaMensaje.Initialize
    
    Cargar_ListView("C:\")
     
End Sub
Sub boton_enviar_Action
    SMTP.To.Add(tf_enviar_a.Text)
    SMTP.subject = tf_asunto.Text
    SMTP.body = ta_mensaje.Text
    SMTP.AddAttachment(ruta, archivo)
    SMTP.Send
    
End Sub
Sub SMTP_MessageSent(Success As Boolean)
    If Success Then
Aviso("Correcto.","Mensaje enviado el " &  DateUtils.TicksToString(DateTime.Now))
    Else
Aviso("Error.","Error en el envío del mensaje: " & LastException)
    End If
End Sub
Sub Cargar_ListView(folder As String)
    ruta = folder
    Listado.Initialize
    Listado = File.ListFiles(ruta)
    Listado.Sort(True)
  
    ListView1.Items.Clear
    ListView1.Items.Add("..") ' Directorio superior
    For n = 0 To Listado.Size-1
    archivo = Listado.Get(n)
    If File.IsDirectory(ruta, archivo)=True Then
      ' Añade (DIR) si es directorio
      ListView1.Items.Add(archivo & "  (DIR)")
    Else
      ListView1.Items.Add(archivo)
    End If
    Next
 
End Sub
Sub ListView1_SelectedIndexChanged(Index As Int)
If Index = -1 Then Return
archivo = ListView1.SelectedItem
' Elimina (DIR)
archivo = archivo.Replace("  (DIR)", "") 
    Try
       
            Label1.Text = File.Combine(ruta & "\", archivo)
        If archivo = ".." Then
            ' Elimina el último directorio de la ruta
            ' C:\Android\B4J\Correo\Files --->>> C:\Android\B4J\Correo
             ruta = ruta.SubString2(0, ruta.LastIndexOf("\"))
             If ruta = "C:" Then ruta = "C:\"
             Cargar_ListView(ruta)
             Label1.Text = ruta
        Else
            If File.IsDirectory (ruta, archivo) Then
            Cargar_ListView(File.Combine(ruta & "\",archivo))
            End If
        
        End If
Catch
        Aviso("Error.","Error al entrar en el directorio")
        Cargar_ListView(File.DirApp)
        
End Try
End Sub
Public Sub Aviso(titulo As String, mensaje As String)
     CajaMensaje.Escribe(titulo, mensaje)
End Sub | 
          
          3.- Ahora creamos un Módulo de Clase y lo llamamos CajaMensaje
              Project / Add New Module / Class Module 
          Copiamos y pegamos el código... 
          
            
              | Código CajaMensaje  | 
            
              | 
' Class CajaMensaje
Sub Class_Globals
    ' Juan Antonio Villalpando
    ' juana1991@yahoo.com
    ' Diciembre 2013
    Private SubForm As Form
    Private Label_Mensaje As Label
End Sub
 
Public Sub Initialize
    SubForm.Initialize("SubForm", -1, -1)
    SubForm.RootPane.LoadLayout("CajaMensaje")
End Sub
Public Sub Escribe(titulo As String, mensaje As String)
    SubForm.Title=titulo
    Label_Mensaje.Text=mensaje
    SubForm.ShowAndWait
End Sub
 
Private Sub boton_cerrar_Action
    SubForm.Close
End Sub | 
          
          ___________________________
            - Comentarios.
          Creo que el código es sencillo de entender, los puntos más complicados pueden ser...
           - ListView1.Items.Add("..") ' Directorio superior
  Agrega al principio del ListView dos puntos para indicar que queremos "ir al directorio superior".
           - ListView1.Items.Add(archivo & " (DIR)")
          Agrega a la línea del ListView " (DIR)" en el caso que sea un directorio, para indicarlo al usuario. 
          - archivo = archivo.Replace(" (DIR)", "") 
    Cuando pulsamos sobre un Directorio, por ejemplo:
    Correo   (DIR)
    elimina la cadena (DIR) para poder trabajar con su nombre correcto, en este caso Correo. 
           ' Elimina el último directorio de la ruta 
  ' C:\Android\B4J\Correo\Files --->>> C:\Android\B4J\Correo 
    ruta = ruta.SubString2(0, ruta.LastIndexOf("\")) 
          - Si pulsamos los dos puntos .., que significa "ir al directorio superior", eliminamos la última parte de la ruta
          C:\Android\B4J\Correo\Files --->>> C:\Android\B4J\Correo 
          Para ello mediante SubString2, eliminamos todo a partir del último(Last) ("\")
          - CajaMensaje es otro Formulario que utilizamos para mostrar los Avisos. 
          en vez de poner: Aviso("Error.","Error al entrar en el directorio")
              
              Podríamos haber puesto directamente: CajaMensaje.Escribe("Error.","Error al entrar en el directorio")
          - Mejoras
          Podemos introducir una orden para que cuando no se halla seleccionado archivo, no se envíe adjunto. 
          If archivo <> "" Then SMTP.AddAttachment(ruta, archivo)
              ________________________ 
          - Explorar archivos.
          Otra manera de localizar el archivo que queremos enviar es modificando el código de esta manera... 
          
            
              | Código  | 
            
              | 
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Diciembre 2013
Private fx As JFX
Private MainForm As Form
Private fc As FileChooser ' Declaramos un Elector de Archivos
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("Layout")
MainForm.Show
fc.Initialize ' Lo iniciamos
End Sub
Sub boton_enviar_Action
Dim f As String = fc.ShowOpen(MainForm) ' Abrimos la ventana de elección
End Sub
 | 
          
          
          __________________________________
                    
          NOTA:
          Como he comentado en una ocasión anterior, no es buena idea utilizar esta aplicación para realizar programas de escritorio, la verdadera utilidad de B4J considero que es hacer librerías .jar o crear aplicación multiplataforma, es decir crear una aplicación en Windows para ejecutarla en Linux, por ejemplo.
          Para realizar programas de Escritorio recomiendo el gratuito Visual Basic 2010 o el también gratuito AutoIt. 
          Para mostrar un documento 
          ' fx.ShowExternalDocument(File.GetUri("C:\Android\Correo", "Archvo.txt"))