Не удается отправить почту через SMTP из программы VB6

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

Я использую 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!!!");                    
                }

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

Спасибо

//Питер


person Hank Rearden    schedule 24.04.2015    source источник
comment
Вы знаете, использует ли версия VB ssl?   -  person Rob    schedule 24.04.2015
comment
Если это может помочь, ваш код отлично работает для меня при отправке с учетной записью Gmail (smtp.googlemail.com на TCP / 465), так же, как с моим собственным кодом, который использует CDO. Однако мне никогда не удавалось отправить электронное письмо через CDO с учетной записью Live / Hotmail / Outlook.com (на этот раз попытался снова, на всякий случай, безуспешно).   -  person johnwait    schedule 25.04.2015


Ответы (1)


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

oFlds(cdoSMTPUseSSL) = True

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

oFlds(cdoSMTPUseSSL) = 1
person George Mastros    schedule 24.04.2015
comment
Это поле действительно Boolean - person Bob77; 24.04.2015
comment
Спасибо, но результат один и тот же, независимо от того, установил ли я значение True или 1. - person Hank Rearden; 24.04.2015