For email coming in and out, I use MS outlook, which makes interfacing with VB very easy. But if you have configured the outlook client not using exchange, you know that you must specify the time in minutes it will poll to check for email. Lets say you want to force it to check for new-email at your will. Well this is how its done, but for this to work you must have the outlook client open.
If you havent please jump this article which shows how to setup your references and other goodies prior to this.
Back here so soon, great!
What are are doing is calling the Microsoft core command bar of the application itself and ‘press’ the button we want to execute, in this case
Were creating instances of the Controls, Tools – > Send/Receive and the account we want to poll. And I don’t have to wait for the application to hit its internal timer.
Sure you can let the timer run but in my case I have my MX records pointing home and host my own pop3 server, so once I get email I notify my server program (In another article soon) to force a scan of my email and act accordingly. This makes the response to my emails lighting fast.!
So here’s the code,
Function ForceEmailcheck() as boolean '------------ Set up the Variables / Objects Dim oCtl As Microsoft.Office.Core.CommandBarControl Dim oPop As Microsoft.Office.Core.CommandBarPopup Dim oCB As Microsoft.Office.Core.CommandBar 'Use the Send/Receive on All Accounts action in the Tools 'menu to send the items from the Outbox, and receive new items for my specific account oCB = objOutlook.ActiveExplorer.CommandBars("Menu Bar") oPop = oCB.Controls("Tools") oPop = oPop.Controls("Send/Receive") oCtl = oPop.Controls.Item(6) '----- Please see below why this is a #6 (*) oCtl.Execute() '------ return something but not needed to work ForceEmailCheck = True End Function
* Since your this calls the name of the account itself for example (1.mail.xxxxxx.com) you will need to use that name for this to work, so I ended up using the item # and its easier.
The way to find this out is after you have set up your outlook, copy the above code in your VB and
set a break point at "oPop = oPop.Controls("Send/Receive")"
Then from your ‘Immediate window’ in VB do a query of the item of that control to see where your ‘send/receive’ for your specific account is, (Most likely #6 also)
?oPop.Controls.Item(1), ?oPop.Controls.Item(2) ?oPop.Controls.Item(3) ?oPop.Controls.Item(4)... etc...
Until you find the item you wish to ‘press’ and then insert the # above. That is how I found the item I was looking for was #6.
And your Set!!