2015-04-24 3 views
0

У меня есть устаревшая кодовая база VB6, которую я хотел бы расширить, чтобы включить поддержку отправки сообщений через внешний SMTP-сервер (smtp.live.com).Не удается отправить почту через SMTP из программы VB6

Я использую CDO для отправки почты. Моя машина работает под управлением Windows 7. К сожалению, при попытке отправить отправку почты я получил сообщение об ошибке «Транспорт не подключился к серверу». Ниже приведен код.

VB6

Dim oNewMessage As CDO.Message 
Dim iConf As New CDO.Configuration 
Dim oFlds As ADODB.Fields 
Dim strbody As String 


On Error GoTo errSMPT 
    iConf.Load cdoDefaults 
    Set oFlds = iConf.Fields 
    oFlds(cdoSendUsingMethod) = cdoSendUsingPort 
    oFlds(cdoSMTPServer) = "smtp.live.com" 
    oFlds(cdoSMTPServerPort) = 587 
    oFlds(cdoSMTPConnectionTimeout) = 30 
    oFlds(cdoSMTPUseSSL) = True 
    oFlds(cdoSMTPAuthenticate) = cdoBasic 
    oFlds(cdoSendUserName) = "[email protected]" 
    oFlds(cdoSendPassword) = "mypassword" 
    oFlds.Update 

    strbody = "Sample message " & Time 

    Set oNewMessage = New CDO.Message 
    Set oNewMessage.Configuration = iConf 

    With oNewMessage 
     .To = txtTo.Text 
     .From = txtFrom.Text 
     .Subject = "subject" 
     .TextBody = strbody 
     .Send 
    End With 
    Exit Sub 

errSMPT: 
    MsgBox Err.Description 

Я не думаю, что проблема связана с межсетевым экраном или вопросы безопасности учетной записи, так как # код C ниже работает без каких-либо проблем.

C#

using (MailMessage message = new MailMessage(txtFrom.Text, txtTo.Text, txtSubject.Text, txtText.Text)) 
       { 
        SmtpClient mailClient = new SmtpClient("smtp.live.com", 587); 

        mailClient.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassword"); 
        mailClient.EnableSsl = true; 
        mailClient.Send(message); 
        MessageBox.Show("Message successfully sent!!!");      
       } 

Любая помощь приветствуется!

Благодаря

// Питер

+0

Знаете ли вы, что версия VB использует ssl? – Rob

+0

Если это может быть полезно, ваш код отлично подходит для меня при отправке с учетной записью Gmail (smtp.googlemail.com на TCP/465), так же как с моим собственным кодом, который использует CDO. Тем не менее, я никогда не мог отправлять электронную почту через CDO с помощью учетной записи Live/Hotmail/Outlook.com (на этот раз попробовал еще раз, на всякий случай, без успеха). – johnwait

ответ

0

Я думаю, ваша проблема здесь:

oFlds(cdoSMTPUseSSL) = True 

Это должно быть целым числом, а не логическое значение. Когда VB6 преобразует true и int, значение равно -1. Я предлагаю вам изменить эту строку на:

oFlds(cdoSMTPUseSSL) = 1 
+0

Это поле действительно 'Boolean' – Bob77

+0

Спасибо, но результат тот же, независимо от того, установлен ли его True или 1. –

Смежные вопросы