Mediante El Uso de Los Controles MAPI de Visual Basic

11
Mediante el uso de los controles MAPI de Visual Basic, es relativamente sencillo crear un cliente MAPI. En las instrucciones y código siguientes se demuestra cómo: 1. Inicie Visual Basic y seleccione un proyecto EXE estándar. En el menú Proyecto, haga clic en Componentes y seleccione Microsoft MAPI Controls. Hay dos iconos nuevos en la barra de herramientas. Ambos son sobres, uno con una llave y el otro con un clip. Son los controles MAPI. 2. Agregue estos controles MAPI al formulario: 3. Agregue los siguientes elementos al formulario: 4. Cuatro etiquetas 5. Cuatro botones de comandos (CommandButtons) 6. Cuatro cuadros de texto (TextBoxes) 7. Los títulos de las etiquetas son: Label1.Caption = "Para:" Label2.Caption = "ASUNTO :" Label3.Caption = "DE:" Label4.Caption = "MENSAJE:" 8. Sitúe los cuadros de texto (TextBoxes) en secuencia numérica con estas etiquetas (la 1, 2 y 3 una junto a otra, y la 4 debajo). 9. Nombre los botones de comando (CommandButton) como sigue: 10. 11. Command1.Caption = "<<" 12. Command2.Caption = ">>" 13. Command3.Caption = "Conectar" 14. Command4.Caption = "Enviar" 15. Command5.Caption = "Cerrar sesión" 16. 17. Agregue el código siguiente al formulario: 18. Option Explicit 19. Dim X As Long 20.

Transcript of Mediante El Uso de Los Controles MAPI de Visual Basic

Page 1: Mediante El Uso de Los Controles MAPI de Visual Basic

Mediante el uso de los controles MAPI de Visual Basic, es relativamente sencillo crear un cliente

MAPI. En las instrucciones y código siguientes se demuestra cómo:

1. Inicie Visual Basic y seleccione un proyecto EXE estándar. En el menú Proyecto, haga

clic en Componentes y seleccione Microsoft MAPI Controls. Hay dos iconos nuevos

en la barra de herramientas. Ambos son sobres, uno con una llave y el otro con un

clip. Son los controles MAPI.

2. Agregue estos controles MAPI al formulario:

3. Agregue los siguientes elementos al formulario:

4. Cuatro etiquetas

5. Cuatro botones de comandos (CommandButtons)

6. Cuatro cuadros de texto (TextBoxes)

7.

Los títulos de las etiquetas son:

Label1.Caption = "Para:"

Label2.Caption = "ASUNTO :"

Label3.Caption = "DE:"

Label4.Caption = "MENSAJE:"

8. Sitúe los cuadros de texto (TextBoxes) en secuencia numérica con estas etiquetas (la

1, 2 y 3 una junto a otra, y la 4 debajo).

9. Nombre los botones de comando (CommandButton) como sigue:

10.

11. Command1.Caption = "<<"

12. Command2.Caption = ">>"

13. Command3.Caption = "Conectar"

14. Command4.Caption = "Enviar"

15. Command5.Caption = "Cerrar sesión"

16.

17. Agregue el código siguiente al formulario:

18. Option Explicit

19. Dim X As Long

20.

Page 2: Mediante El Uso de Los Controles MAPI de Visual Basic

21. Private Sub Command1_Click()

22.

23. If X - 1 < 0 Then

24. Else

25. X = X - 1

26. MAPIMessages1.MsgIndex = X

27. Text1.Text = MAPIMessages1.RecipDisplayName

28. Text2.Text = MAPIMessages1.MsgSubject

29. Text3.Text = MAPIMessages1.MsgOrigDisplayName

30. Text4.Text = MAPIMessages1.MsgNoteText

31. End If

32.

33. End Sub

34.

35. Private Sub Command2_Click()

36.

37. If X + 1 > MAPIMessages1.MsgCount Then

38. X = MAPIMessages1.MsgCount

39. Else

40. X = X + 1

41. MAPIMessages1.MsgIndex = X

42. Text1.Text = MAPIMessages1.RecipDisplayName

43. Text2.Text = MAPIMessages1.MsgSubject

44. Text3.Text = MAPIMessages1.MsgOrigDisplayName

45. Text4.Text = MAPIMessages1.MsgNoteText

46. End If

47.

48. End Sub

49.

50. Private Sub Command3_Click()

51. MAPISession1.SignOn

52. MAPIMessages1.SessionID =

MAPISession1.SessionID

53. MAPIMessages1.Fetch

54. If MAPIMessages1.MsgCount > 0 Then

55. Text1.Text = MAPIMessages1.RecipDisplayName

56. Text2.Text = MAPIMessages1.MsgSubject

Page 3: Mediante El Uso de Los Controles MAPI de Visual Basic

57. Text3.Text =

MAPIMessages1.MsgOrigDisplayName

58. Text4.Text = MAPIMessages1.MsgNoteText

59. Command4.Enabled = True

60. Else

61. MsgBox "No messages to fetch"

62. MAPISession1.SignOff

63. Command4.Enabled = False

64. End If

65.

66. End Sub

67.

68. Private Sub Command4_Click()

69.

70. MAPIMessages1.Compose

71. MAPIMessages1.RecipDisplayName = Text1.Text

72. MAPIMessages1.MsgSubject = Text2.Text

73. MAPIMessages1.MsgNoteText = Text4.Text

74. MAPIMessages1.ResolveName

75. MAPIMessages1.Send

76.

77. End Sub

78.

79. Private Sub Command5_Click()

80.

81. MAPISession1.SignOff

82. Unload Me

83.

84. End Sub

85.

Page 4: Mediante El Uso de Los Controles MAPI de Visual Basic

340 - Enviar email con el control Winsock

<Volver> - Anterior - Siguiente

 

Formulario para poder enviar un correo mediante el control Winsock de vb

 

Este ejemplo muestra como enviar un mensaje de correo , utilizando un servidor SMTP sin autentificación con el control Microsoft Winsock

El formulario

Page 5: Mediante El Uso de Los Controles MAPI de Visual Basic

 

Nota: Al final de la página , hay otros ejemplos para poder leer y enviar correo con diferentes componentes

 

Controles para el formulario

 

1. txt_Server_Smtp : indica la ip o nombre del Host de correo a utilizar para el envío

2. txt_nameFrom : Nombre del que envia el mail, en este caso nuestro nombre. este parámetro es opcional

3. txt_emailFrom : Nuestra dirección de mail 4. txt_NameTo : Nombre del destinatario . Parámetro opcional 5. txt_MailTo : Obviamente parámetro obligatorio 6. txt_Asunto : parámetro opcional . Asunto del mensaje 7. txt_Mensaje : Para el texto del mensaje . Coloarle la propiedad

Multiline en true 8. ProgressBar : para mostrar l progreso 9. Dos CommandButton . Para conectar y desconectar 10. Un control Microsoft Winsock

 

Código fuente en el formulario

Texto plano Copiar código fuente Imprimir

1. Option Explicit  2.   3.   4. Private m_Sleep   As Boolean  5. Private Estado As String  6.   7.   8. ' Rutina que envía el correo mediante el Winsock   9. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 10.   11.   12. Private Sub Winsock_mail(Smtp_Server As String, _   13.                          Name_From As String, _   14.                          Mail_From As String, _   15.                          Name_To As String, _   16.                          Mail_to As String, _   17.                          Asunto_Mensaje As String, _   18.                          Mensaje As String)   19.       20.    On Error GoTo Err_Sub   21.       22.       Estado = vbNullString   23.       ProgressBar1.Max = 4   24.       ProgressBar1.Value = 0   25.          26.       27.    With Winsock1   28.            29.       ' cierra el winsock   

Page 6: Mediante El Uso de Los Controles MAPI de Visual Basic

30.       .Close   31.       ' conecta al servidor en el puerto 25   32.       .Connect Smtp_Server, "25"  33.          34.       ' Bucle mientras conecta al Smtp   35.       Do While .State <> sckConnected   36.          DoEvents   37.          If .State = sckClosed Or .State = sckError Then  38.                MsgBox "Error ", vbCritical   39.                Desconectar   40.                Exit Sub  41.          End If  42.       Loop  43.          44.       ' almcena el texto del estado del envio   45.       Estado = Estado & "Conectado a " & Smtp_Server & "." & vb

CrLf   46.          47.          48.       Do While m_Sleep = False  49.          DoEvents   50.       Loop  51.          52.       ' Envia los datos del remitente   53.       .SendData "MAIL FROM: " & Mail_From & vbCrLf   54.          55.       ' texto de estado   56.       Estado = Estado & "MAIL FROM: " & Mail_From & vbCrLf   57.          58.       Do While ProgressBar1.Value <> 1   59.          DoEvents   60.       Loop  61.          62.       ' Envia los datos del destinatario   63.       .SendData "RCPT TO: " & Mail_to & vbCrLf   64.          65.       ' texto de estado   66.       Estado = Estado & "RCPT TO: " & Mail_to & vbCrLf   67.          68.       ' espera   69.       Do While ProgressBar1.Value <> 2   70.          DoEvents   71.       Loop  72.          73.       ' acá se envía el mail   74.       .SendData "DATA" & vbCrLf   75.       Estado = Estado & "DATA" & vbCrLf   76.          77.       Do While ProgressBar1.Value <> 3   78.          DoEvents   79.   80.       Loop  81.          82.          83.       .SendData "FROM: " & Name_From & " <" & Mail_From & ">" & 

vbCrLf   84.       .SendData "TO: " & Name_To & " <" & Mail_to & ">" & vbCrL

f   85.       .SendData "SUBJECT: " & Asunto_Mensaje & vbCrLf   86.       .SendData vbCrLf   87.       .SendData Mensaje & vbCrLf   88.          89.       Estado = Estado & Mensaje & vbCrLf   90.          91.       .SendData vbCrLf & "." & vbCrLf   

Page 7: Mediante El Uso de Los Controles MAPI de Visual Basic

92.          93.       Estado = Estado & vbCrLf & "." & vbCrLf   94.          95.       Do While ProgressBar1.Value <> 4   96.          DoEvents   97.       Loop  98.          99.       ' Envía el comando de cierre   100.       .SendData "QUIT" & vbCrLf   101.          102.       ' cierra la conexión del winsock   103.       .Close   104.               105.       ' muestra el mensaje de estado ( se puede _   106.        mostrar en un textbox multilinea )   107.       MsgBox Estado, vbInformation   108.       ProgressBar1.Value = 0   109.       110.    End With  111.       112.    Exit Sub  113.       114. Err_Sub:   115.    ' Si hay error muestra el mensaje y cierra el socket   116.    Winsock1.Close   117.       118.    MsgBox Err.Description, vbCritical   119.       120. End Sub  121.   122.   123.   124. Private Sub Desconectar()   125.    'Cierra el Winsock   126.    Winsock1.Close   127.       128. End Sub  129.   130. ' Botón que envía el e-mail   131. '''''''''''''''''''''''''''''''''''''''''''''''''''''   132.   133. Private Sub Command1_Click()   134.     Winsock_mail txt_Server_Smtp, _   135.                  txt_nameFrom, _   136.                  txt_emailFrom, _   137.                  txt_NameTo, _   138.                  txt_MailTo, _   139.                  txt_Asunto, _   140.                  txt_Mensaje   141. End Sub  142.   143. ' Botón que Finaliza el socket abierto   144. '''''''''''''''''''''''''''''''''''''''''''''''''''''   145. Private Sub Command2_Click()   146.     Call Desconectar   147. End Sub  148.   149.   150. ' este evento recibe los datos de respuesta del servidor Sm

tp _   151.   para poder almacenar el texto del estado de la operacion 

de envío _   152.   y mostrar el progreso en el progressbar   153.   '''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'''''''''   

Page 8: Mediante El Uso de Los Controles MAPI de Visual Basic

154. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 155.       156.    Dim Data As String 'Datos   157.       158.    ' Retorno del Winsock   159.    Dim ret   As String  160.       161.    ' recupera los datos   162.    Winsock1.GetData Data   163.    ' formatea   164.    ret = Mid(Data, 1, 3)   165.       166.    Estado = Estado & Data & vbCrLf   167.       168.    Select Case ret   169.         Case 250   170.             ProgressBar1.Value = ProgressBar1.Value + 1   171.         Case 354   172.             ProgressBar1.Value = ProgressBar1.Value + 1   173.         Case 220   174.           m_Sleep = True  175.    End Select  176.          177. End Sub  178.   179. Private Sub Form_Load()   180.     Command1.Caption = " Enviar "  181.     Command2.Caption = " Desconectar "  182.     Me.Caption = "Envío de email con el control Winsock "  183. End Sub  

 

Leer los correos de un Pop3 con el winsock y guardar los mensajes en disco como archivos EML

Este ejemplo se conecta a un Pop3, y obtiene todos los mail y los lista en un ListBox. Luego escribe el contenido del mail y lo guarda como archivo .Eml en el App.path

En el formulario agregar un control Winsock llamado Winsock1. Un control Listbox y un CommandButon

A al procedimiento LeerMail, pasarle como parámetro el nombre del servidor pop3, la cuenta, el password y el puerto

Texto plano Copiar código fuente Imprimir

1. Dim Recibido As Boolean  2. Dim Mensaje As String  3. Dim sckError   

Page 9: Mediante El Uso de Los Controles MAPI de Visual Basic

4.   5.   6. Private Sub Command1_Click()   7. ' por ejemplo :   8. ' Call Leer("pop3.dominio.com", 110, "[email protected]", "pas

sword")   9. End Sub  10.   11. ' se reciben los datos   12. ''''''''''''''''''''''''''''   13. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)   14.      15.   Winsock1.GetData Mensaje   16.        17.   Select Case Winsock1.Tag   18.   Case "RETR"  19.       ' escribe en disco el archivo eml   20.       Put #1, , Mensaje   21.                    22.       If InStr(Mensaje, vbLf + "." + vbCrLf) Then  23.           Close 1   24.           Recibido = True  25.       End If  26.        27.   Case Else  28.       sckError = (Left$(Mensaje, 3) = "-ER")   29.       Recibido = True  30.   End Select  31. End Sub  32.   33. Private Sub Winsock1_Close()   34.   Winsock1.Close   35. End Sub  36.   37. Private Sub Leer(Pop3 As String, _   38.                  Puerto As Integer, _   39.                  Cuenta As String, _   40.                  Password As String)   41.   42.   43. ' Conecta con el Pop3   44.   Winsock1.Connect Pop3, Puerto   45.        46.   Do Until Recibido   47.     DoEvents   48.   Loop  49.   50.   If sckError Then  51.     MsgBox "Error al conectar con el servidor Pop3", vbCritical 52.     Exit Sub  53.   End If  54.      55.   ' usuario   56.   SendCommand "USER " & Cuenta   57.      58.   If sckError Then  59.     MsgBox "Error con el nombre de usuario ", vbCritical   60.     Exit Sub  61.   End If  62.      63.   ' Envía el passowrd   64.   SendCommand "PASS " & Password   65.      66.   If sckError Then  67.     MsgBox "Password incorrecto", vbCritical   

Page 10: Mediante El Uso de Los Controles MAPI de Visual Basic

68.     Exit Sub  69.   End If  70.   71. ' Get Number of Messages and total size in bytes   72.   SendCommand "STAT"  73.   x = InStr(Mensaje, " ")   74.   b = InStrRev(Mensaje, " ")   75.   Messages = Val(Mid$(Mensaje, x + 1, b - x))   76.      77. ' Recorre la cantidad de mensajes   78.   For i = 1 To Messages   79.        80.       Winsock1.Tag = "RETR"  81.       'crea un archivo   82.       Open App.Path & "\eMail-" & i & ".eml" For Binary Access 

Write As #1   83.            84.       Call SendCommand("RETR " & i)   85.       List1.AddItem "eMail " & i   86.   Next  87.   88.   Winsock1.Tag = ""  89. End Sub  90.   91. Sub SendCommand(Comando As String)   92.   Winsock1.SendData Comando + vbCrLf   93.        94.   Recibido = False  95.   Do Until Recibido   96.       DoEvents   97.   Loop  98. End Sub