Professional Documents
Culture Documents
1.
Inicie Visual Basic y seleccione un proyecto EXE estndar. 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. 3.
Agregue estos controles MAPI al formulario: Agregue los siguientes elementos al formulario:
4. 5. 6. 7.
Cuatro etiquetas Cuatro botones de comandos (CommandButtons) Cuatro cuadros de texto (TextBoxes)
8.
Site los cuadros de texto (TextBoxes) en secuencia numrica con estas etiquetas (la 1, 2 y 3 una junto a otra, y la 4 debajo).
9.
10. 11. 12. 13. 14. 15. 16. Command1.Caption = "<<" Command2.Caption = ">>" Command3.Caption = "Conectar" Command4.Caption = "Enviar" Command5.Caption = "Cerrar sesin"
21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
Private Sub Command1_Click() If X - 1 < 0 Then Else X = X - 1 MAPIMessages1.MsgIndex = X Text1.Text = MAPIMessages1.RecipDisplayName Text2.Text = MAPIMessages1.MsgSubject Text3.Text = MAPIMessages1.MsgOrigDisplayName Text4.Text = MAPIMessages1.MsgNoteText End If End Sub Private Sub Command2_Click() If X + 1 > MAPIMessages1.MsgCount Then X = MAPIMessages1.MsgCount Else X = X + 1 MAPIMessages1.MsgIndex = X Text1.Text = MAPIMessages1.RecipDisplayName Text2.Text = MAPIMessages1.MsgSubject Text3.Text = MAPIMessages1.MsgOrigDisplayName Text4.Text = MAPIMessages1.MsgNoteText End If End Sub Private Sub Command3_Click() MAPISession1.SignOn MAPIMessages1.SessionID = MAPISession1.SessionID MAPIMessages1.Fetch If MAPIMessages1.MsgCount > 0 Then Text1.Text = MAPIMessages1.RecipDisplayName Text2.Text = MAPIMessages1.MsgSubject Text3.Text = MAPIMessages1.MsgOrigDisplayName Text4.Text = MAPIMessages1.MsgNoteText
Command4.Enabled = True Else MsgBox "No messages to fetch" MAPISession1.SignOff Command4.Enabled = False End If End Sub Private Sub Command4_Click() MAPIMessages1.Compose MAPIMessages1.RecipDisplayName = Text1.Text MAPIMessages1.MsgSubject = Text2.Text MAPIMessages1.MsgNoteText = Text4.Text MAPIMessages1.ResolveName MAPIMessages1.Send End Sub Private Sub Command5_Click() MAPISession1.SignOff Unload Me End Sub
62.
63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.
Nota: Al final de la pgina , hay otros ejemplos para poder leer y enviar correo con diferentes componentes
3. txt_emailFrom : Nuestra direccin de mail 4. txt_NameTo : Nombre del destinatario . Parmetro opcional 5. txt_MailTo : Obviamente parmetro obligatorio 6. txt_Asunto : parmetro 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
Cdigo fuente en el formulario Texto planoCopiar cdigo fuenteImprimir
1. Option Explicit
2. 3.
4. Private m_Sleep
6. 7.
As Boolean
12. Private Sub Winsock_mail(Smtp_Server As String, _ 13. 14. 15. 16. 17. 18.
19. Name_From As String, _ Mail_From As String, _ Name_To As String, _ Mail_to As String, _ Asunto_Mensaje As String, _ Mensaje As String)
20.
21. 22. 23. 24. 25. 26.
27.
With Winsock1
28.
29.
30.
' cierra el winsock .Close ' conecta al servidor en el puerto 25 .Connect Smtp_Server, "25"
31. 32.
33.
34. 35.
36.
' Bucle mientras conecta al Smtp Do While .State <> sckConnected DoEvents If .State = sckClosed Or .State = sckError Then MsgBox "Error ", vbCritical Desconectar Exit Sub End If Loop
37. 38.
39.
44. 45.
CrLf 46. 47.
' almcena el texto del estado del envio Estado = Estado & "Conectado a " & Smtp_Server & "." & vb
48.
49.
50.
51.
52. 53.
54.
' Envia los datos del remitente .SendData "MAIL FROM: " & Mail_From & vbCrLf
55. 56.
57.
' texto de estado Estado = Estado & "MAIL FROM: " & Mail_From & vbCrLf
58.
59.
60.
61.
62. 63.
64.
' Envia los datos del destinatario .SendData "RCPT TO: " & Mail_to & vbCrLf
65. 66.
67.
' texto de estado Estado = Estado & "RCPT TO: " & Mail_to & vbCrLf
68. 69.
70.
71.
72.
' ac se enva el mail .SendData "DATA" & vbCrLf Estado = Estado & "DATA" & vbCrLf
77.
78. 79.
80.
81. 82.
Loop
83. 84.
.SendData "FROM: " & Name_From & " <" & Mail_From & ">" & vbCrLf .SendData "TO: " & Name_To & " <" & Mail_to & ">" & vbCrL f .SendData "SUBJECT: " & Asunto_Mensaje & vbCrLf .SendData vbCrLf .SendData Mensaje & vbCrLf Estado = Estado & Mensaje & vbCrLf
85.
86. 87. 88. 89. 90.
91.
92.
93.
94.
95.
96.
97.
98.
99. 100.
101.
102.
103. 104.
105.
106.
' muestra el mensaje de estado ( se puede _ mostrar en un textbox multilinea ) MsgBox Estado, vbInformation
107.
108. 109.
ProgressBar1.Value = 0
110.
111.
End With
112.
113.
Exit Sub
114.Err_Sub:
115.
116. 117.
118.
119.
120.End Sub
121. 122. 123.
128.End Sub
129.
135.
136. 137. 138. 139. 140.
141.End Sub
142.
143.' Botn que Finaliza el socket abierto 144.''''''''''''''''''''''''''''''''''''''''''''''''''''' 145.Private Sub Command2_Click() 146.
148. 149. Call Desconectar
147.End Sub
150.' este evento recibe los datos de respuesta del servidor Smtp
_ 151. para poder almacenar el texto del estado de la operacion de e nvo _ 152. y mostrar el progreso en el progressbar
153. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''
156.
157.
158. 159.
160.
161.
162.
' recupera los datos Winsock1.GetData Data ' formatea ret = Mid(Data, 1, 3) Estado = Estado & Data & vbCrLf
163.
164. 165. 166. 167.
168. 169.
170.
Select Case ret Case 250 ProgressBar1.Value = ProgressBar1.Value + 1 Case 354 ProgressBar1.Value = ProgressBar1.Value + 1 Case 220 m_Sleep = True End Select
171.
172.
177.End Sub
178.
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 parmetro el nombre del servidor pop3, la cuenta, el password y el puerto
Texto planoCopiar cdigo fuenteImprimir
6. Private Sub Command1_Click() 7. ' por ejemplo : 8. ' Call Leer("pop3.dominio.com", 110, "cuenta@dominio.com", "pas
sword")
9. End Sub
10.
11. ' se reciben los datos 12. '''''''''''''''''''''''''''' 13. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
14.
15.
16.
Winsock1.GetData Mensaje
Select Case Winsock1.Tag Case "RETR" ' escribe en disco el archivo eml Put #1, , Mensaje
30.
32.
End Select
46.
47.
48.
49.
If sckError Then MsgBox "Error al conectar con el servidor Pop3", vbCritical Exit Sub End If
55. 56.
57.
If sckError Then MsgBox "Error con el nombre de usuario ", vbCritical Exit Sub End If
63. 64.
65.
70.
71. ' Get Number of Messages and total size in bytes 72. 73. 74. 75.
76. SendCommand "STAT" x = InStr(Mensaje, " ") b = InStrRev(Mensaje, " ") Messages = Val(Mid$(Mensaje, x + 1, b - x))
Winsock1.Tag = "RETR" 'crea un archivo Open App.Path & "\eMail-" & i & ".eml" For Binary Access Write As #1
88.
90.
Winsock1.Tag = ""
94. 95.
96.
97.