'Option Explicit
'Private oApp As Outlook.Application
'Private oNS As Outlook.NameSpace
'Private oInbox As Outlook.MAPIFolder
'Private oTasks As Outlook.MAPIFolder
'Private CnnA As ADODB.Connection
Private Sub cmdExportEmails_Click()
Call Outlook_Emails_2_Access
End Sub
'Private Sub Form_Load()
'
' Set oApp = New Outlook.Application
' Set oNS = oApp.GetNamespace("MAPI")
' Set oInbox = oNS.GetDefaultFolder(olFolderInbox)
'Set oTasks = oNS.GetDefaultFolder(olFolderTasks)
'MUST BE A FOLDER WITH A DEFAULT MESSAGE TYPE OF POST!!!
'RIGHT CLICK ON THE DESIRED NEW FOLDER AND CLICK PROPERTIES.
'THEN LOOK AT THE BOTTON AND IT SHOULD SAY -
'"WHEN POSTING TO THIS FOLDER, USE: POST"
' Set oInbox = oNS.Folders("Your Custom Folder Name Here!")
'Set CnnA = New ADODB.Connection
'CnnA.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtDBPath & ";Persist Security Info=False"
'CnnA.Open
'End Sub
Private Function Outlook_Emails_2_Access()
' <GORS = ACCESS>
On Error GoTo No_Bugs
Dim goRs As ADODB.Recordset
Dim oEmail As Outlook.MailItem
Dim oMeetingType As Outlook.MeetingItem
Dim oDistributionList As Outlook.DistListItem
Dim vType As Variant
Dim i As Integer
Dim ii As Integer
Dim sAttachment As String
Dim sSQL As String
Set goRs = New ADODB.Recordset
sSQL = "SELECT * FROM [Inbox] WHERE 1=2;"
goRs.Open sSQL, CnnA, adOpenKeyset, adLockOptimistic, adCmdText
prbProgress.Max = oInbox.Items.Count
i = 1
Do While i <= oInbox.Items.Count
DoEvents
Select Case oInbox.Items(i).Class
Case olMail
vType = "Email"
Case olMeetingRequest
vType = "MeetingItem"
Case olMeetingResponseNegative
vType = "MeetingItem"
Case olMeetingResponsePositive
vType = "MeetingItem"
Case olMeetingResponseTentative
vType = "MeetingItem"
Case olDistributionList
vType = "DistListItem"
End Select
If vType = "Email" Then 'ONLY EMAIL TYPES
Set oEmail = oInbox.Items(i)
If FindOutlookEmail(oEmail.EntryID) = False Then
'ADDED FOR TESTING ONLY SO YOU CAN SEE HOW TO PASS THE ITEMS.
'TAKE OUT AND PLACE WHERE YOU ARE CALLING IT FROM
'OTHERWISE IT WILL OPEN ALL EXPORTED EMAILS
Call OpenOutlookEmail(oEmail.EntryID, CStr(oInbox.Items(i).Class))
goRs.AddNew
goRs!To = oEmail.To
goRs!CC = oEmail.CC
goRs!BCC = oEmail.BCC
goRs!Subject = oEmail.Subject
goRs!Body = oEmail.Body 'PLAIN TEXT BODY NOTES
goRs!HTMLBody = oEmail.HTMLBody 'HTML BODY NOTES
goRs!Importance = oEmail.Importance
goRs!Received = oEmail.ReceivedTime
goRs!Class = oEmail.Class 'EMAIL, MEETING RESPONSE, MEETING REQUEST, DIST. LIST, ETC.
goRs!ReceivedByName = oEmail.ReceivedByName
goRs!EntryID = oEmail.EntryID
If oEmail.Attachments.Count > 1 Then
'LOOP THROUGH ALL ATTACHMENTS SAVING TO DIRECTORY AND ENTERING FILENAME INTO FIELD
For ii = 1 To oEmail.Attachments.Count
'DETERMINE ATTACHMENT CLASS TYPE ATTACHED, LINKED, EMBEDDED, OR OLE
If oEmail.Attachments.Item(ii).Type = olByValue Or oEmail.Attachments.Item(ii).Type = olEmbeddeditem Then
oEmail.Attachments.Item(ii).SaveAsFile "C:\MyOutlookEmailExport\Attachments\" & oEmail.Attachments.Item(ii).FileName
sAttachment = sAttachment & "C:\MyOutlookEmailExport\Attachments\" & oEmail.Attachments.Item(ii).FileName & vbNewLine
End If
Next
goRs!Attachment = sAttachment
Else
goRs!Attachment = "None"
End If
'CONTINUE ON WITH OTHER FIELD YOU WANT
'...
goRs.Update
End If
Set oEmail = Nothing
ElseIf vType = "MeetingItem" Then
Set oMeetingType = oInbox.Items(i)
If FindOutlookEmail(oMeetingType.EntryID) = False Then
goRs.AddNew
goRs!To = oMeetingType.Recipients.Item(1).Name
goRs!CC = IIf(oMeetingType.Recipients.Count > 1, oMeetingType.Recipients.Item(2).Name, "")
goRs!BCC = ""
goRs!Subject = oMeetingType.Subject
goRs!Body = oMeetingType.Body 'PLAIN TEXT BODY NOTES
goRs!HTMLBody = ""
goRs!Importance = oMeetingType.Importance
goRs!Received = oMeetingType.ReceivedTime
goRs!Class = oMeetingType.Class 'EMAIL, MEETING RESPONSE, MEETING REQUEST, DIST. LIST, ETC.
goRs!ReceivedByName = ""
goRs!EntryID = oMeetingType.EntryID
If oMeetingType.Attachments.Count > 1 Then
'LOOP THROUGH ALL ATTACHMENTS SAVING TO DIRECTORY AND ENTERING FILENAME INTO FIELD
For ii = 1 To oMeetingType.Attachments.Count
'DETERMINE ATTACHMENT CLASS TYPE ATTACHED, LINKED, EMBEDDED, OR OLE
If oMeetingType.Attachments.Item(ii).Type = olByValue Or oMeetingType.Attachments.Item(ii).Type = olEmbeddeditem Then
oMeetingType.Attachments.Item(ii).SaveAsFile "C:\MyOutlookEmailExport\Attachments\" & oMeetingType.Attachments.Item(ii).FileName
sAttachment = sAttachment & "C:\MyOutlookEmailExport\Attachments\" & oMeetingType.Attachments.Item(ii).FileName & vbNewLine
End If
Next
goRs!Attachment = sAttachment
Else
goRs!Attachment = "None"
End If
'CONTINUE ON WITH OTHER FIELD YOU WANT
'...
goRs.Update
End If
Set oMeetingType = Nothing
ElseIf vType = "DistListItem" Then
Set oDistributionList = oInbox.Items(i)
If FindOutlookEmail(oDistributionList.EntryID) = False Then
goRs.AddNew
goRs!To = oDistributionList.DLName
goRs!CC = oDistributionList.MemberCount & "-Members"
goRs!BCC = ""
goRs!Subject = oDistributionList.Subject
goRs!Body = oDistributionList.Body 'PLAIN TEXT BODY NOTES
goRs!HTMLBody = ""
goRs!Importance = oDistributionList.Importance
goRs!Received = ""
goRs!Class = oDistributionList.Class 'EMAIL, MEETING RESPONSE, MEETING REQUEST, DIST. LIST, ETC.
goRs!ReceivedByName = ""
goRs!EntryID = oDistributionList.EntryID
If oDistributionList.Attachments.Count > 1 Then
'LOOP THROUGH ALL ATTACHMENTS SAVING TO DIRECTORY AND ENTERING FILENAME INTO FIELD
For ii = 1 To oDistributionList.Attachments.Count
'DETERMINE ATTACHMENT CLASS TYPE ATTACHED, LINKED, EMBEDDED, OR OLE
If oDistributionList.Attachments.Item(ii).Type = olByValue Or oDistributionList.Attachments.Item(ii).Type = olEmbeddeditem Then
oDistributionList.Attachments.Item(ii).SaveAsFile "C:\MyOutlookEmailExport\Attachments\" & oDistributionList.Attachments.Item(ii).FileName
sAttachment = sAttachment & "C:\MyOutlookEmailExport\Attachments\" & oDistributionList.Attachments.Item(ii).FileName & vbNewLine
End If
Next
goRs!Attachment = sAttachment
Else
goRs!Attachment = "None"
End If
'CONTINUE ON WITH OTHER FIELD YOU WANT
'...
goRs.Update
End If
Set oDistributionList = Nothing
Else
MsgBox "Unsupported message type!", vbOKOnly + vbExclamation
End If
Set oEmail = Nothing
prbProgress.Value = i
i = i + 1
Loop
Set oInbox = Nothing
Set oNS = Nothing
goRs.Close
Set CnnA = Nothing
Set goRs = Nothing
Exit Function
No_Bugs:
MsgBox Err.Number & "-" & Err.Description, vbCritical, "Outlook Email Export"
Resume
End Function
''''''''''2nd 3rd
Private Function FindOutlookEmail(ByVal oEmailEntryID As String) As Boolean
Dim oRsAccessEmail As ADODB.Recordset 'EMAIL IN ACCESS TO CHECK AGAINST
Dim i As Integer
Set oRsAccessEmail = New ADODB.Recordset
oRsAccessEmail.Open "SELECT EntryID FROM Inbox WHERE EntryID = '" & oEmailEntryID & "';", CnnA, adOpenKeyset, adLockReadOnly, adCmdText
If oRsAccessEmail.BOF = True And oRsAccessEmail.EOF = True Then
FindOutlookEmail = False
Else
FindOutlookEmail = True
End If
Set oRsAccessEmail = Nothing
End Function