Отправка электронной почты через VB6


Мне интересно, есть ли способ отправить электронное письмо (SMTP) через VB6. У меня есть приложение, которому просто нужно отправить простое электронное письмо, когда пользователь закончит, чтобы группа знала, что приложение обработано. Есть ли способ сделать это?

5 6

5 ответов:

Да-зависит от того, какую версию windows вы используете. Предполагая одну из более поздних версий-CDO.Сообщение работает отлично.

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

Я нашел это здесь :

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

Private Sub Command1_Click()
UserName = "YourUserName_or_Addr"
UserMail = "Your Name <You@provider.com>"
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

Мы надеемся, что на вашем компьютере будут установлены библиотеки CDOSYS:

CDO Messaging-MSDN
создание и отправка сообщения-MSDN
отправка электронной почты с помощью CDOSYS ( реальная сделка )
ASP отправка электронной почты с CDOSYS

Если у вас нет этой библиотеки (и вы не можете ее установить), то всегда есть CDONTS, чтобы вернуться, но он устарел:

Использование компонента CDONTS для отправки электронная почта со страниц ASP.

У Дейва есть хорошее решение, если вам действительно нужно отправить электронную почту с компьютера клиента. Однако иногда вы попадаете в неприятности с брандмауэрами и тому подобным. В том случае, когда вы подключаетесь к SQL-серверу, я обнаружил, что это проще и легче управлять, если вы прокси-сервер свою почту через SQL-сервер (либо путем постановки ее в очередь в таблицу исходящей почты, либо вызовом самого xp_sendmail сохраненного proc).

Вот учебник о том, как получить SQL Mail setup и работать на сервере, а также на в ней показано, как использовать хранимую процедуру для отправки сообщения электронной почты.

Я нашел это решение выгодным, потому что:

  • компьютеры Windows 7 блокировали все исходящие SMTP
  • реализация всех повторных попыток и тому подобное, чтобы сделать исходящую электронную почту "правильной", была довольно сложной
  • используя метод очереди с SQL Server, но фактически не устанавливая SQL Mail в моих базах данных разработки или тестирования, электронные письма оставались в очереди, если я не работал против производства сервер

Ранее мы использовали управлениеOstroSoft SMTP с очень хорошими результатами.