![]() |
If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
|
Thread Tools | Search this Thread | Display Modes |
#1
|
|||
|
|||
![]()
Hi,
I'm using a thight integration with Outlook 2003 (with an Exchange server) in my VB.NET (2005) application. Until now I'm using the Outlook Object Model, but it appears to be very slow, and has some problems: - doing a Move changes the ReceivedTime of the MailItem - I can't use RichText in the MailItem.Body (only allows plain text or HTML) - some other stuff like having to use small 'tricks' to show the default signature in an email - ... So I'm looking to other ways to have an interactions with Outlook. What I basicly need to do is: - Move the currently selected mail to a specific folder, and write the data of it to a database (subject, entryid, sender, recipients, attachments, ..) - Create a new mail with a specific text, receiver, subject, attachements, and once it is send move it to a specific folder and write the same data to the database These things actually do work, but especially the first one takes too much time: on some clients more than 10 seconds!! Is their a way to speed things up? using CDO or Redemption or ...? What are the pros and cons of each way? Can they do what I need? Any help our hints would be really aprpeciated! Thanks a lot in advance, Pieter I did it now like this: Public Function AddDocMails(ByVal DocList As Generic.List(Of clsDoc)) As String Dim oApp As Outlook.Application Dim oExp As Outlook.Explorer Dim oSel As Outlook.Selection ' You need a selection object for getting the selection. Dim oFolder As Outlook.MAPIFolder Dim oItem As Outlook.MailItem Dim intGood As Integer = 0 Dim intTotaal As Integer = 0 Try oApp = New Outlook.Application oExp = oApp.ActiveExplorer ' Get the ActiveExplorer. oSel = oExp.Selection ' Get the selection. Dim intX As Integer Dim clsMail As clsDocMail oFolder = oExp.CurrentFolder intTotaal = oSel.Count For intX = 1 To (oSel.Count) Try If oSel.Item(intX).Class = Outlook.OlObjectClass.olMail Then oItem = oSel.Item(intX) clsMail = New clsDocMail(oItem, oFolder) 'save it! clsMail.Save() End If Catch ex As Exception ErrorMessage(ex, "Inner AddDocMails") End Try Next Catch ex As Exception ErrorMessage(ex) End Try oItem = Nothing oFolder = Nothing oSel = Nothing oExp = Nothing oApp = Nothing Return strF End Function Public Sub New(ByVal ItemOutlook As Object, ByVal FolderOutlook As Object) Me.New() Me.oItem = ItemOutlook Me.oFolder = FolderOutlook Me.GetMailInfo() End Sub Public Function GetMailInfo(Optional ByVal blnMove As Boolean = True) As Boolean Dim blnOk As Boolean = True Try If blnMove Then Try If (oFolder.StoreID clsDocShared.GlobalDoc.MyOutlookFolder.StoreID) Or (oFolder.EntryID clsDocShared.GlobalDoc.MyOutlookFolder.EntryID) Then 'Move it to the right folder: StoreID oItem = oItem.Move(clsDocShared.GlobalDoc.MyOutlookFolder) End If Catch ex As Exception blnOk = False Return blnOk Exit Function End Try End If 'FolderID Me.FolderID = clsDocShared.GlobalDoc.MyOutlookFolderID 'FileLink = MailLink = EntryID Me.FileLink = oItem.EntryID 'From and to etc... Me.MailFrom = oItem.SenderName If oItem.To IsNot Nothing Then Me.MailTo = oItem.To End If If oItem.CC IsNot Nothing Then Me.MailCC = oItem.CC End If If oItem.BCC IsNot Nothing Then If Me.MailCC Is Nothing Then Me.MailCC = "" End If If Me.MailCC.Length 0 Then Me.MailCC = Me.MailCC & ", " End If Me.MailCC = Me.MailCC & oItem.BCC End If If oItem.Subject IsNot Nothing Then Me.MailSubject = oItem.Subject End If Me.MailDate = oItem.ReceivedTime Me.AddDate = Me.MailDate Dim intA As Integer 'premier Type identification '?oitem.MessageClass = - FAX '?oitem.MessageClass = Dim strI As String If oItem.MessageClass = "IPM.FAX" Then 'received strI = "FAX" Else strI = "MAIL" End If If (strI = "MAIL") And (oItem.Recipients.Count 0) Then If oItem.Recipients.Item(1).AddressEntry.Type.ToStrin g = "FAX" Then 'send strI = "FAX" ElseIf oItem.SenderName = "FAXINSDX" Then 'een fax wordt soms doorgemaild naar iemand!!! strI = "FAX" End If End If Me.MailType = strI If oItem.Attachments.Count 0 Then Me.MailType = Me.MailType & ".ATTACHMENT" Me.Attachments = "" For intA = 1 To oItem.Attachments.Count If intA 1 Then Me.Attachments = Me.Attachments & ", " End If Me.Attachments = Me.Attachments & oItem.Attachments.Item(intA).FileName.ToString Next End If If oItem.FlagStatus = Outlook.OlFlagStatus.olFlagMarked Then Me.Flag = "1" ElseIf oItem.FlagStatus = Outlook.OlFlagStatus.olFlagComplete Then Me.Flag = "2" End If If oItem.Importance = Outlook.OlImportance.olImportanceHigh Then Me.Flag = "1" End If Catch ex As Exception blnOk = False ErrorMessage(ex, "GetMailInfoDebug: " & strStatus) End Try Return blnOk End Function |
Ads |
#2
|
|||
|
|||
![]()
Use CDO/Redemption if you need to work with large sets of items, especially
looping through collections. Use Redemption for bypassing the Object Model Guard and to use some MAPI stuff, profile management and other functions not handled by CDO. Stick with the OOM if you are primarily working with UI related elements of Outlook items. There's been other discussions lately around ReceivedTime changing; google this group to see some threads. To modify Rich Text, use the Word Object Model if Word is being used as the editor, or the SafeInspector object with Redemption. -- Eric Legault (Outlook MVP, MCDBA, old school WOSA MCSD, B.A.) Try Picture Attachments Wizard for Outlook: http://www.collaborativeinnovations.ca Blog: http://blogs.officezealot.com/legault/ "Pieter" wrote: Hi, I'm using a thight integration with Outlook 2003 (with an Exchange server) in my VB.NET (2005) application. Until now I'm using the Outlook Object Model, but it appears to be very slow, and has some problems: - doing a Move changes the ReceivedTime of the MailItem - I can't use RichText in the MailItem.Body (only allows plain text or HTML) - some other stuff like having to use small 'tricks' to show the default signature in an email - ... So I'm looking to other ways to have an interactions with Outlook. What I basicly need to do is: - Move the currently selected mail to a specific folder, and write the data of it to a database (subject, entryid, sender, recipients, attachments, ..) - Create a new mail with a specific text, receiver, subject, attachements, and once it is send move it to a specific folder and write the same data to the database These things actually do work, but especially the first one takes too much time: on some clients more than 10 seconds!! Is their a way to speed things up? using CDO or Redemption or ...? What are the pros and cons of each way? Can they do what I need? Any help our hints would be really aprpeciated! Thanks a lot in advance, Pieter I did it now like this: Public Function AddDocMails(ByVal DocList As Generic.List(Of clsDoc)) As String Dim oApp As Outlook.Application Dim oExp As Outlook.Explorer Dim oSel As Outlook.Selection ' You need a selection object for getting the selection. Dim oFolder As Outlook.MAPIFolder Dim oItem As Outlook.MailItem Dim intGood As Integer = 0 Dim intTotaal As Integer = 0 Try oApp = New Outlook.Application oExp = oApp.ActiveExplorer ' Get the ActiveExplorer. oSel = oExp.Selection ' Get the selection. Dim intX As Integer Dim clsMail As clsDocMail oFolder = oExp.CurrentFolder intTotaal = oSel.Count For intX = 1 To (oSel.Count) Try If oSel.Item(intX).Class = Outlook.OlObjectClass.olMail Then oItem = oSel.Item(intX) clsMail = New clsDocMail(oItem, oFolder) 'save it! clsMail.Save() End If Catch ex As Exception ErrorMessage(ex, "Inner AddDocMails") End Try Next Catch ex As Exception ErrorMessage(ex) End Try oItem = Nothing oFolder = Nothing oSel = Nothing oExp = Nothing oApp = Nothing Return strF End Function Public Sub New(ByVal ItemOutlook As Object, ByVal FolderOutlook As Object) Me.New() Me.oItem = ItemOutlook Me.oFolder = FolderOutlook Me.GetMailInfo() End Sub Public Function GetMailInfo(Optional ByVal blnMove As Boolean = True) As Boolean Dim blnOk As Boolean = True Try If blnMove Then Try If (oFolder.StoreID clsDocShared.GlobalDoc.MyOutlookFolder.StoreID) Or (oFolder.EntryID clsDocShared.GlobalDoc.MyOutlookFolder.EntryID) Then 'Move it to the right folder: StoreID oItem = oItem.Move(clsDocShared.GlobalDoc.MyOutlookFolder) End If Catch ex As Exception blnOk = False Return blnOk Exit Function End Try End If 'FolderID Me.FolderID = clsDocShared.GlobalDoc.MyOutlookFolderID 'FileLink = MailLink = EntryID Me.FileLink = oItem.EntryID 'From and to etc... Me.MailFrom = oItem.SenderName If oItem.To IsNot Nothing Then Me.MailTo = oItem.To End If If oItem.CC IsNot Nothing Then Me.MailCC = oItem.CC End If If oItem.BCC IsNot Nothing Then If Me.MailCC Is Nothing Then Me.MailCC = "" End If If Me.MailCC.Length 0 Then Me.MailCC = Me.MailCC & ", " End If Me.MailCC = Me.MailCC & oItem.BCC End If If oItem.Subject IsNot Nothing Then Me.MailSubject = oItem.Subject End If Me.MailDate = oItem.ReceivedTime Me.AddDate = Me.MailDate Dim intA As Integer 'premier Type identification '?oitem.MessageClass = - FAX '?oitem.MessageClass = Dim strI As String If oItem.MessageClass = "IPM.FAX" Then 'received strI = "FAX" Else strI = "MAIL" End If If (strI = "MAIL") And (oItem.Recipients.Count 0) Then If oItem.Recipients.Item(1).AddressEntry.Type.ToStrin g = "FAX" Then 'send strI = "FAX" ElseIf oItem.SenderName = "FAXINSDX" Then 'een fax wordt soms doorgemaild naar iemand!!! strI = "FAX" End If End If Me.MailType = strI If oItem.Attachments.Count 0 Then Me.MailType = Me.MailType & ".ATTACHMENT" Me.Attachments = "" For intA = 1 To oItem.Attachments.Count If intA 1 Then Me.Attachments = Me.Attachments & ", " End If Me.Attachments = Me.Attachments & oItem.Attachments.Item(intA).FileName.ToString Next End If If oItem.FlagStatus = Outlook.OlFlagStatus.olFlagMarked Then Me.Flag = "1" ElseIf oItem.FlagStatus = Outlook.OlFlagStatus.olFlagComplete Then Me.Flag = "2" End If If oItem.Importance = Outlook.OlImportance.olImportanceHigh Then Me.Flag = "1" End If Catch ex As Exception blnOk = False ErrorMessage(ex, "GetMailInfoDebug: " & strStatus) End Try Return blnOk End Function |
#3
|
|||
|
|||
![]()
Ok, thanks a lot!
"Eric Legault [MVP - Outlook]" wrote in message ... Use CDO/Redemption if you need to work with large sets of items, especially looping through collections. Use Redemption for bypassing the Object Model Guard and to use some MAPI stuff, profile management and other functions not handled by CDO. Stick with the OOM if you are primarily working with UI related elements of Outlook items. There's been other discussions lately around ReceivedTime changing; google this group to see some threads. To modify Rich Text, use the Word Object Model if Word is being used as the editor, or the SafeInspector object with Redemption. -- Eric Legault (Outlook MVP, MCDBA, old school WOSA MCSD, B.A.) Try Picture Attachments Wizard for Outlook: http://www.collaborativeinnovations.ca Blog: http://blogs.officezealot.com/legault/ "Pieter" wrote: Hi, I'm using a thight integration with Outlook 2003 (with an Exchange server) in my VB.NET (2005) application. Until now I'm using the Outlook Object Model, but it appears to be very slow, and has some problems: - doing a Move changes the ReceivedTime of the MailItem - I can't use RichText in the MailItem.Body (only allows plain text or HTML) - some other stuff like having to use small 'tricks' to show the default signature in an email - ... So I'm looking to other ways to have an interactions with Outlook. What I basicly need to do is: - Move the currently selected mail to a specific folder, and write the data of it to a database (subject, entryid, sender, recipients, attachments, ..) - Create a new mail with a specific text, receiver, subject, attachements, and once it is send move it to a specific folder and write the same data to the database These things actually do work, but especially the first one takes too much time: on some clients more than 10 seconds!! Is their a way to speed things up? using CDO or Redemption or ...? What are the pros and cons of each way? Can they do what I need? Any help our hints would be really aprpeciated! Thanks a lot in advance, Pieter I did it now like this: Public Function AddDocMails(ByVal DocList As Generic.List(Of clsDoc)) As String Dim oApp As Outlook.Application Dim oExp As Outlook.Explorer Dim oSel As Outlook.Selection ' You need a selection object for getting the selection. Dim oFolder As Outlook.MAPIFolder Dim oItem As Outlook.MailItem Dim intGood As Integer = 0 Dim intTotaal As Integer = 0 Try oApp = New Outlook.Application oExp = oApp.ActiveExplorer ' Get the ActiveExplorer. oSel = oExp.Selection ' Get the selection. Dim intX As Integer Dim clsMail As clsDocMail oFolder = oExp.CurrentFolder intTotaal = oSel.Count For intX = 1 To (oSel.Count) Try If oSel.Item(intX).Class = Outlook.OlObjectClass.olMail Then oItem = oSel.Item(intX) clsMail = New clsDocMail(oItem, oFolder) 'save it! clsMail.Save() End If Catch ex As Exception ErrorMessage(ex, "Inner AddDocMails") End Try Next Catch ex As Exception ErrorMessage(ex) End Try oItem = Nothing oFolder = Nothing oSel = Nothing oExp = Nothing oApp = Nothing Return strF End Function Public Sub New(ByVal ItemOutlook As Object, ByVal FolderOutlook As Object) Me.New() Me.oItem = ItemOutlook Me.oFolder = FolderOutlook Me.GetMailInfo() End Sub Public Function GetMailInfo(Optional ByVal blnMove As Boolean = True) As Boolean Dim blnOk As Boolean = True Try If blnMove Then Try If (oFolder.StoreID clsDocShared.GlobalDoc.MyOutlookFolder.StoreID) Or (oFolder.EntryID clsDocShared.GlobalDoc.MyOutlookFolder.EntryID) Then 'Move it to the right folder: StoreID oItem = oItem.Move(clsDocShared.GlobalDoc.MyOutlookFolder) End If Catch ex As Exception blnOk = False Return blnOk Exit Function End Try End If 'FolderID Me.FolderID = clsDocShared.GlobalDoc.MyOutlookFolderID 'FileLink = MailLink = EntryID Me.FileLink = oItem.EntryID 'From and to etc... Me.MailFrom = oItem.SenderName If oItem.To IsNot Nothing Then Me.MailTo = oItem.To End If If oItem.CC IsNot Nothing Then Me.MailCC = oItem.CC End If If oItem.BCC IsNot Nothing Then If Me.MailCC Is Nothing Then Me.MailCC = "" End If If Me.MailCC.Length 0 Then Me.MailCC = Me.MailCC & ", " End If Me.MailCC = Me.MailCC & oItem.BCC End If If oItem.Subject IsNot Nothing Then Me.MailSubject = oItem.Subject End If Me.MailDate = oItem.ReceivedTime Me.AddDate = Me.MailDate Dim intA As Integer 'premier Type identification '?oitem.MessageClass = - FAX '?oitem.MessageClass = Dim strI As String If oItem.MessageClass = "IPM.FAX" Then 'received strI = "FAX" Else strI = "MAIL" End If If (strI = "MAIL") And (oItem.Recipients.Count 0) Then If oItem.Recipients.Item(1).AddressEntry.Type.ToStrin g = "FAX" Then 'send strI = "FAX" ElseIf oItem.SenderName = "FAXINSDX" Then 'een fax wordt soms doorgemaild naar iemand!!! strI = "FAX" End If End If Me.MailType = strI If oItem.Attachments.Count 0 Then Me.MailType = Me.MailType & ".ATTACHMENT" Me.Attachments = "" For intA = 1 To oItem.Attachments.Count If intA 1 Then Me.Attachments = Me.Attachments & ", " End If Me.Attachments = Me.Attachments & oItem.Attachments.Item(intA).FileName.ToString Next End If If oItem.FlagStatus = Outlook.OlFlagStatus.olFlagMarked Then Me.Flag = "1" ElseIf oItem.FlagStatus = Outlook.OlFlagStatus.olFlagComplete Then Me.Flag = "2" End If If oItem.Importance = Outlook.OlImportance.olImportanceHigh Then Me.Flag = "1" End If Catch ex As Exception blnOk = False ErrorMessage(ex, "GetMailInfoDebug: " & strStatus) End Try Return blnOk End Function |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Redemption | Christoph | Add-ins for Outlook | 5 | March 6th 06 03:26 PM |
mapi cdo service | [email protected] | Outlook - General Queries | 8 | February 20th 06 02:33 PM |
Undefined Object: testing for Nothing (Redemption) | Martin | Outlook and VBA | 3 | January 25th 06 09:21 AM |
Repeated Outlook CDO Update Prompts | Neal | Outlook - General Queries | 1 | January 17th 06 10:32 PM |
CDO Active Directory and Mail Enabling | [email protected] | Outlook - General Queries | 1 | January 10th 06 02:57 PM |