2011-04-01 50 views
6

Me pregunto si hay una forma de enviar un correo electrónico (SMTP) a través de VB6. Tengo una aplicación que solo necesita enviar un correo electrónico simple cuando el usuario finaliza para que un grupo sepa que la aplicación se ha procesado. ¿Hay una manera de hacer eso?Enviando un correo electrónico a través de VB6

+0

Véase también http://stackoverflow.com/questions/3539242/sending-e-mail-via-smtp-using-vb6 http://stackoverflow.com/questions/5155611/send-emails-through-vb6- if-no-email-client – MarkJ

Respuesta

10

Sí - depende de la versión de Windows que esté utilizando. Asumiendo una de las versiones posteriores - CDO.Message funciona muy bien.

Sub SendMessage(MailFrom,MailTo,Subject,Message) 
    Dim ObjSendMail 
    Set ObjSendMail = CreateObject("CDO.Message") 

    'This section provides the configuration information for the remote SMTP server. 

    With ObjSendMail.Configuration.Fields 
    .Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'Send the message using the network (SMTP over the network). 
    .Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smpt server Address" 
    .Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    .Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False 'Use SSL for the connection (True or False) 
    .Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 

    ' If your server requires outgoing authentication uncomment the lines below and use a valid email address and password. 
' .Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'basic (clear-text) authentication 
' .Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = MailFrom 
' .Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = yourpassword 

    .Update 
    End With 

    'End remote SMTP server configuration section== 

    ObjSendMail.To = MailTo 
    ObjSendMail.Subject = Subject 
    ObjSendMail.From = MailFrom 

    ' we are sending a html email.. simply switch the comments around to send a text email instead 
    ObjSendMail.HTMLBody = Message 
    'ObjSendMail.TextBody = Message 

    ObjSendMail.Send 

    Set ObjSendMail = Nothing 
End Sub 
+2

Al establecer una referencia a la biblioteca también recibe constantes con nombre para esos nombres de campo y números mágicos. – Bob77

3

yo encontramos este here:

Dim UserName$, UserMail$, MailRecipiant$, MailBody$, SockData$ 

Private Sub Command1_Click() 
UserName = "YourUserName_or_Addr" 
UserMail = "Your Name <[email protected]>" 
MailRecipiant = UserMail 
MailBody = "The message goes here" 
Winsock1.LocalPort = 0 
Winsock1.RemoteHost = "smtp-server" 
Winsock1.RemotePort = 25 
Winsock1.Connect 
End Sub 

Private Sub Winsock1_Connect() 
Label1 = "Sending message..." 
Winsock1.SendData "EHLO " & UserName & vbCrLf 
If Not WaitFor("250") Then GoTo 100 
Winsock1.SendData "MAIL FROM: " & UserMail & vbCrLf 
If Not WaitFor("250") Then GoTo 100 
Winsock1.SendData "RCPT TO: " & MailRecipiant & vbCrLf 
If Not WaitFor("250") Then GoTo 100 
Winsock1.SendData "DATA" & vbCrLf 
If Not WaitFor("354") Then GoTo 100 
Winsock1.SendData MailBody & vbCrLf & "." & vbCrLf 
If Not WaitFor("250") Then GoTo 100 
Winsock1.SendData "QUIT" & vbCrLf 
If Not WaitFor("221") Then GoTo 100 
Label1 = "Message sent" 
GoTo 200 
100 
Label1 = SockData 
200 
Winsock1.Close 
End Sub 

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
Winsock1.GetData SockData 
End Sub 

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) 
Label1 = "Error: " & Description 
SockData = "Error" 
Winsock1.Close 
End Sub 

Private Function WaitFor(SockResponse As String) As Boolean 
Do While Left(SockData, 3) <> SockResponse And Left(SockData, 3) <> "220" And Left(SockData, 3) <> "250" 
    DoEvents 
    If Left(SockData, 3) > "400" Then Exit Function 
Loop 
WaitFor = 1 
SockData = "" 
End Function 
+0

¿por qué derribaron la votación? – SQLMason

+0

Lo probé y funciona en VB 6.0 ... – SQLMason

+0

¿Quizás porque este enfoque falla si necesita autenticación cifrada o transmisión SSL/TLS? Esos son requisitos bastante comunes más. Los archivos adjuntos y el correo HTML también agregan más clunkiness a este acercamiento de rollo propio. Sin embargo, es genial en casos limitados. – Bob77

0

Dave tiene una buena solución si realmente se necesita para enviar correo electrónico desde el PC del cliente. Sin embargo, a veces te metes en problemas con los firewalls y tal. En el caso de que se conecte a un servidor SQL, he encontrado que es más simple y fácil de administrar si realiza un proxy de su correo a través de SQL Server (ya sea haciendo cola en una tabla de correo saliente o llamando al xp_sendmail proc almacenado).

Aquí hay un tutorial sobre cómo obtener la configuración de SQL Mail y trabajar en el servidor, y al final se muestra cómo usar un procedimiento almacenado para enviar un correo electrónico.

He encontrado esta solución que es ventajoso porque:

  • de Windows 7 ordenadores estaban bloqueando todo SMTP saliente
  • La implementación de todos los reintentos y como hacer saliente de correo electrónico "derecho" era bastante complicada
  • Uso el método de cola con SQL Server, pero no configurando realmente SQL Mail en mis bases de datos de desarrollo o prueba, los correos electrónicos permanecían en la cola a menos que me estuviera ejecutando contra el servidor de producción
0

Hemos usado el control OstroSoft SMTP anteriormente con muy buenos resultados.

Cuestiones relacionadas