Отправка электронного письма через VB6 - PullRequest
6 голосов
/ 01 апреля 2011

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

Ответы [ 5 ]

10 голосов
/ 01 апреля 2011

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

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
3 голосов
/ 01 апреля 2011

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

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
3 голосов
/ 01 апреля 2011

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

Обмен сообщениями CDO - MSDN
Создание и отправка сообщения - MSDN
Отправка электронной почты с использованием CDOSYS (НАСТОЯЩЕЕ ПРЕДЛОЖЕНИЕ)
ASP Отправка электронной почты с помощью CDOSYS

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

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

0 голосов
/ 09 апреля 2011

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

0 голосов
/ 02 апреля 2011

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

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

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

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