1
votes

NOTE: edited from original after I discovered the outlook version was 32-bit not 64-bit.

I have a legacy 32-bit VB6 program that uses outlook 2010 32bit (full version, not express) to send email. Works perfect on many machines except one machine with windows 7 (64-bit I assume). Not sure if all windows 7 machines don't work or just this one.

If I use the automation technique or the MAPI technique (as I call them, see code below) outlook sends the email but the mail server kicks it back as undeliverable saying the recipient does not exist.

Now if the automation technique is used outlook displays no UI and the email is sent in the background.

However if the MAPI technique is used outlook opens it's compose email dialog which allows the user to edit the email prior to sending. What is interesting is that the recipient email looks fine but will fail as undeliverable if sent. However if the recipient is deleted and re-typed then the email will succeed. I believe a copy and re-paste works also.

This tells me there must be one or more hidden illegal characters in the recipient email address (nulls perhaps?). The code to do this shown below is very plain and I can't think of any obvious fix. txtTo is a vb6 string with an email address and this is the field that is causing all the problems.

The error message:

  Your message did not reach some or all of the intended recipients.

  Subject:  a test from daryls cpu #2
  Sent: 11/17/2017 8:01 PM

  The following recipient(s) cannot be reached:

  '[email protected]' on 11/17/2017 8:01 PM
        None of your e-mail accounts could send to this recipient.

Automation Technique

        Dim mOutlookApp As Object
        Set mOutlookApp = GetObject("", "Outlook.application")

        Dim olNs As Object
        Set olNs = mOutlookApp.GetNamespace("MAPI")
        olNs.Logon

        Dim OutMail As Object
        Set OutMail = mOutlookApp.CreateItem(0)

        'Set the To and Subject lines.  Send the message.
        With OutMail
            .To = txtTo
            .CC = txtCC
            .Subject = txtSubjext
            .HTMLBody = txtBody & vbCrLf

            Dim myAttachments As Object
            Set myAttachments = .Attachments
            vAttach = Split(mAttachments, ",")
            For i = 0 To UBound(vAttach)
                myAttachments.add vAttach(i)
            Next i


            Dim myFolder As Object
            Set myFolder = olNs.GetDefaultFolder(5) 'olFolderSent
            Set .SaveSentMessageFolder = myFolder

            StatusBar1.Panels(1).Text = "Status: Sending"

            .send
        End With

MAPI Technique

    'Open up a MAPI session:
    With frmMain.MAPISession1
        .DownLoadMail = False
        .Username = ""
        .LogonUI = True
        .SignOn
    End With

    With frmMain.MAPIMessages1
        .SessionID = frmMain.MAPISession1.SessionID
        .Compose
        .MsgIndex = -1

        .RecipIndex = 0
        .RecipAddress = txtTo
        .RecipDisplayName = txtTo
        .RecipType = mapToList

        If txtCC <> "" Then
            .RecipIndex = 1
            .RecipDisplayName = txtCC
            .RecipAddress = txtCC
            .RecipType = mapCcList
        End If

        'spaces are important! need one space for each attachment
        'NOTE .MsgNoteText = " " MUST be there see.. KB173853 in microsoft

        .MsgSubject = txtSubjext

        .MsgNoteText = Space$(UBound(vAttach) + 1) & vbCrLf
        .MsgNoteText = txtBody & vbCrLf

        For i = 0 To UBound(vAttach)
            .AttachmentIndex = i
            .AttachmentPosition = i
            .AttachmentType = mapData
            .AttachmentName = GetFileFromPath(vAttach(i))
            .AttachmentPathName = vAttach(i)
        Next i

        StatusBar1.Panels(1).Text = "Status: Sending"

        .send True

    End With

More Info:

I'm making some progress. The error has to do with email type in outlook not being SMTP. If on the send-to email in the outlook compose dialog you right-click on the email address then select outlook properties and change the email type to SMTP it will work. The type displayed is the email address itself, valid values seem to be 'mailto' and 'smtp'. So if I can set the email type from vb6 it should fix the error.

The 'Answer'? https://kb.intermedia.net/article/2344

I can't believe there is no fix for this...

1
If you could summarize what the actual question is that might help people who run into this in the futureStayOnTarget

1 Answers

0
votes

RESOLVED!

I realize this topic is most likely of no interest to anyone programming in the 20th century but here is the fix:

.RecipAddress = "SMTP:" & txtTo

It just came to me. :)