• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 351
  • Last Modified:

Using MAPI in VB5

Hi,

I would really appreciate some help on this one.
I am using MAPIMESSAGE and MAPISESSION controls shipped with VB5 to send emails with attachments at runtime.

The problem I have is to allow multiple files to be attached in the same email. I am not quite sure what to do with regards to the message body being large enough to allow for these attachments. I got he program working by sending each file individually, but because of the speed the emails were going, it is not really a solution.

This is sample of my code (for just one attachment):]

MAPIMess.SessionID = MAPISess.SessionID
MAPIMess.MsgIndex = -1
MAPIMess.Compose
MAPIMess.RecipDisplayName = somename
MAPIMess.AddressResolveUI = True
MAPIMess.ResolveName
MAPIMess.MsgReceiptRequested = True

MAPIMess.AttachmentIndex = MAPIMess.AttachmentCount
MAPIMess.AttachmentName = "file.txt"
MAPIMess.AttachmentPathName = "c:\file.txt"
MAPIMess.AttachmentPosition = MAPIMess.AttachmentIndex
MAPIMess.AttachmentType = vbAttachTypeData

MAPIMess.MsgSubject = "Testing email"
txtNoteText = String$(MAPIMess.AttachmentCount, " ") + txtNoteText
MAPIMess.MsgNoteText = txtNoteText
MAPIMess.Send False

Can you please amend this code for more than one atachment file.

Thanks a million!
Baltaz13
0
mmahdi
Asked:
mmahdi
  • 2
1 Solution
 
mdouganCommented:
I'm doing this from memory only, but try repeating the block that begins with the line
MAPIMess.AttachmentIndex = MAPIMess.AttachmentCount

Once you've done the first block, the AttachmentCount should increment automatically, so when you do the second block (except you'll want to attach a different file in the second block), the AttachmentIndex will be one more.  This is easy to step through and verify.  I have some code to verify that this is the solution, but I'll have to post it at a later date.

MD
0
 
mdouganCommented:
Here is the procedure that I use to attach multiple files to a single e-mail then send it out.  I haven't included all of the code for the setting of the Send To list etc. but I think this is what you'd asked for.


Public Sub SendMail()
Dim sErrors As String
Dim lError As Variant

Dim strMessage As String
Dim Match As String
Dim i As Integer
    On Error GoTo SendMailErr

' Either format the text you want to e-mail and put it into the strMessage or
' write a log file out to the hard drive and then do the attachment below
' put Mapi Message into Compose Mode
    MapiMess.MsgIndex = -1
   
    i = 1
   
    Match = Dir$(gDirectory & gFileSpec, vbNormal)
    Do While Match <> ""
       
        MapiMess.MsgNoteText = MapiMess.MsgNoteText & i & ". "
        i = i + 1
        Match = Dir()
    Loop
   
    MapiMess.MsgNoteText = MapiMess.MsgNoteText & vbCrLf & vbCrLf & " Here are the Status Log Files"
           
    Match = Dir$(gDirectory & gFileSpec, vbNormal)
    Do While Match <> ""

' increment Attachment Index
        MapiMess.AttachmentIndex = MapiMess.AttachmentCount
   
' give the name of the file attachment
        MapiMess.AttachmentName = Match
   
' give the full file path of the file attachment
        MapiMess.AttachmentPathName = gDirectory & Match

' tell it what position of the attachment array to attach the file into
        MapiMess.AttachmentPosition = (MapiMess.AttachmentCount * 2) + MapiMess.AttachmentIndex
   
' attachment is a data file (vs ole object)
        MapiMess.AttachmentType = 0
        Match = Dir()
    Loop
                       
' E-Mail Subject line
    MapiMess.MsgSubject = gFileSpec & " System Status Report"
   
' Move recipients to the proper fields of the Message
    Call CopyNamestoMsgBuffer(False)
                 
' Use the session ID of the MapiSess session object
    MapiMess.SessionID = MapiSess.SessionID
   
' Send the mail, but don't resolve the addresses (use the actual directory listing)
    MapiMess.Send False
   
SendMailExit:
    Exit Sub
SendMailErr:
    sErrors = "SendMail " & Err.Description
    If Not IsEmpty(Errors) Then
        For Each lError In Errors
            sErrors = sErrors & vbCrLf & lError.Description
        Next
    End If
    PrintError sErrors
    Resume SendMailExit
End Sub

0
 
mmahdiAuthor Commented:
Mdougan,

Thanks for the answer! Because it has been a while before I got any reply from somebody, I had to try looking for the answer myself, and used the OLE messaging Object Library functions, which works really well and is also a lot faster than using MAPI32.OCX.

I have to give you the points since you went through the trouble of finding the answer.

Cheers
MMAHDI
0
 
MirkwoodCommented:
Bought This Question.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now