|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

B4J en español
B4J - Juan Antonio Villalpando

-- Tutorial de iniciación a B4J en español --

 

- Aquí puedes encontrar la instalación y configuración del programa B4J para realizar archivos jar de Java.

Volver al índice del tutorial

_________________________________________

6.- Enviar correo. Explorar archivos. Caja de Mensaje.

- 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"))

__________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información