Mediante El Uso de Los Controles MAPI de Visual Basic
-
Upload
antonio-peralta -
Category
Documents
-
view
104 -
download
2
Transcript of 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.
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
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.
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
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
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
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. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''
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
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
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