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 =
-> MAIL
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 2 2431
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 = -> MAIL 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
Ok, thanks a lot!
"Eric Legault [MVP - Outlook]" <el*********@REMOVEZZZmvps.org> wrote in
message news:26**********************************@microsof t.com... 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 = -> MAIL 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 This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Anushya |
last post by:
Hi All
This is the error i am getting when i try to install my addin in some
other machine and works fine in development machine. I checked the
..net framework version it is 1.1 in developement...
|
by: Anushya |
last post by:
Hi
How to get the id of a name in contact items in outlook. How to do it
thru redemption in .net??
i tried the code below. but it shows the error. pls have a look at the
code
...
|
by: John |
last post by:
Hi
Does anyone have a vb.net example of how to use redemption to send mail
through outlook?
Many Thanks
Regards
|
by: John |
last post by:
Hi
Is it possible to write vb.net code around outlook 2000 dlls and then use
the code on ol2002 machines to send emails and bypass ol 2002 email block?
Thanks
Regards
|
by: John |
last post by:
Hi
I am using the latest redemption. I am using the below code in vb.net to
send mail in html format. The problem is that text does not get sent as html
and html tags appear as they are in the...
|
by: Pieter |
last post by:
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...
|
by: omrivm |
last post by:
Hi,
I have a problem with Outlook Redemption, every time I'm trying to
create a new RDOAddressBook:
Redemption.RDOAddressBook AB = new RDOAddressBook();
I get:
"Retrieving the COM class factory...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
| |