MS Office Forum / Outlook / Programming VBA / March 2008
Contact Program
|
|
Thread rating:  |
Brent E - 26 Jul 2005 19:57 GMT Good morning,
I am really new to VBA for Outlook. I am trying to create a macro/module that will: Automatically select the contacts folder, Select Inbox titled "Realtor.com" Create a contact from each email that comes into this Inbox. I am not sure what commands or syntax to use. Would this be a simple program? Suggestions would be really appreciated. Thanks.
Cordially,
Eric Legault [MVP - Outlook] - 26 Jul 2005 21:07 GMT You don't need to select the folders at all. If all you want is to create a new Contact from all incoming messages and save it in the default Contacts folder, you can do so by pasting this code into your ThisOutlookSession module in the Outlook VBA Editor:
Option Explicit Dim WithEvents NewMailItems As Outlook.Items
Private Sub Application_Startup() Set NewMailItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items End Sub
Private Sub NewMailItems_ItemAdd(ByVal Item As Object) 'THIS WILL FIRE FOR EVERY NEW E-MAIL; YOU CAN USE THE 'Item OBJECT TO WORK WITH THE PROPERTIES OF THE E-MAIL MESSAGE Dim objContact As Outlook.ContactItem Dim objMsg As Outlook.MailItem If Item.Class <> olMail Then Exit Sub Set objContact = Application.CreateItem(olContactItem) Set objMsg = Item objContact.FullName = objMsg.SenderName objContact.Email1Address = objMsg.SenderEmailAddress objContact.Save Set objContact = Nothing Set objMsg = Nothing End Sub
Note that the ItemAdd event is not guaranteed to fire if a large number of messages are delivered at once. Also, if you do not have Outlook 2003 a security warning will pop up when the code tries to access the SenderEmailAddress property. For ways to bypass this, see:
Microsoft Outlook "Object Model Guard" Security Issues for Developers: http://www.outlookcode.com/d/sec.htm
And for some great starting resources on Outlook programming, see:
Visual Basic and VBA Coding in Microsoft Outlook: http://www.outlookcode.com/d/vb.htm
 Signature Eric Legault - B.A, MCP, MCSD, Outlook MVP Try Picture Attachments Wizard for Outlook! http://tinyurl.com/ckytm Job: http://www.imaginets.com Blog: http://blogs.officezealot.com/legault/
> Good morning, > [quoted text clipped - 7 lines] > > Cordially, Brent E - 27 Jul 2005 02:04 GMT Sounds Magnificent. I really appreciate your assitance, Eric. I am also running 2003 and am curious. I've pasted these procedures into my ThisOutlookSession module and restarted Outlook, but this won't seem to run automatcially, what command should I use to launch this? I tried lookin in my macros window but was blank. I also thought of running these procedures name from the Immediate window in the VBE, but I get an error saying "Macros not enabled in this project".
Also, this is basically what I am trying to get to: a module that will do the following: I've got 3 Inboxes setup which get email from 3 different sources. These Inboxes are named "ERealty", "Realtor.com" and "Website" I need to create contacts from all emails in each Inbox and save these contacts in corresponding Outlook contact folders, named similarly (e.g. "ERealty", "Realtor.com" and "Website") So we have Inboxes and Contact Folders w/ these names. These Inboxes and Contact folders are already created and in place. So I need to create a module that will automatically generate contacts from each Inbox and save them in their proper Contact folder. ? I really appreciate your assistance
> You don't need to select the folders at all. If all you want is to create a > new Contact from all incoming messages and save it in the default Contacts [quoted text clipped - 53 lines] > > > > Cordially, Eric Legault [MVP - Outlook] - 27 Jul 2005 18:56 GMT You need to change your macro security settings to Medium or lower to run macros.
Do you want these Contacts created only when e-mails are received in your Inbox, or moved to those sub-folders? Or do you need to create them in one shot as a batch, running the batch once for every folder containing the e-mails?
 Signature Eric Legault - B.A, MCP, MCSD, Outlook MVP Try Picture Attachments Wizard for Outlook! http://tinyurl.com/ckytm Job: http://www.imaginets.com Blog: http://blogs.officezealot.com/legault/
> Sounds Magnificent. I really appreciate your assitance, Eric. I am also > running 2003 and am curious. I've pasted these procedures into my [quoted text clipped - 74 lines] > > > > > > Cordially, Brent E - 27 Jul 2005 23:29 GMT Sorry for the delay in getting back to you, meeting this morning and working on this response for a while. LOL.
OK cool, I will change my macro security setting to Medium or lower; hopefully I will be able To answer your question. Currently the emails are setup by a rule. Emails come into 3 seperate Inboxes depending on their source: "ERealty" Inbox, "Realtor.com" Inbox and "Website" Inbox. This seems to be working, but we need a module that will take each email (can do all Inboxes at once or seperately) and generate a contact in their corresponding Contact folders (e.g. Emails from "ERealty" Inbox create a contact in "ERealty" contact folder; "Realtor.com Inbox emails create a contact in "Realtor.com" Contact folder, etc.) But I think your question's more in regards to when contacts should be made, correct? I think would probably be better if we could set these up to generate contacts in a batch (that I can run once or twice a day) Could be one Inbox at a time (or all Inboxes at same time, whichever is easier). I know this may be a round-about way to do this but what I am trying to do is this:
Goal: Get a csv file (from each source/Inbox) w/ full names and email address from all emails that come into the Inbox.
To do this what I am thinking is to basically take all emails from each source (e.g each Inbox), pull out their full name and email address from the email, and create a contact from this, then I can export all contacts from a specific contact folder to a csv file containing the full names and email address of all emails that came into the Inbox. Then I can import this csv list to another program. I also notice that the program I am importing to will not overwrite a contact so if the list of contacts contains the same contact the second time, there will be duplicates . So I need to maybe once or twice a day, pull all the names and email addresses from a specfiic Inbox, generate a csv file w/ these names and email address (via creating a Outlook contact first as intermediate step), then move these contacts to a Archive folder (by source name, e.g. ERealty, etc. to keep them sorted by source) Then the next time I run the program, the contacts list only includes contacts that came in since the last time I ran the program. Then there will be no duplicates of old data when I Import to another program. Now I've probably thoroughly confused you. LOL. Let me know if this didn't make sense.
Basically I just need a module to take emails from each Inbox and create contacts from all emails currently in the Inbox. (I can manually archive these and export them to a csv file if easier to do manually then in a module;). What do you think? Thanks again for your assistance.
> You need to change your macro security settings to Medium or lower to run > macros. [quoted text clipped - 82 lines] > > > > > > > > Cordially, Eric Legault [MVP - Outlook] - 29 Jul 2005 22:22 GMT Brent, try the code below. I'm in a hurry to go somewhere right now, so ping me again later if you need clarification:
Sub BatchContactImport() Dim objNS As Outlook.NameSpace Dim objMailFolder As Outlook.MAPIFolder, objContactsFolder As Outlook.MAPIFolder Set objNS = Application.GetNamespace("MAPI") MsgBox "With the next dialog, choose the mail folder that contains the messages you want to " _ & "extract Contact data from...", vbOKOnly + vbInformation, "Choose Mail Folder" Set objMailFolder = objNS.PickFolder If objMailFolder Is Nothing Then Exit Sub
MsgBox "With the next dialog, choose the Contact folder where you want to import the Contacts into..." _ , vbOKOnly + vbInformation, "Choose Contacts Folder" Set objContactsFolder = objNS.PickFolder If objContactsFolder Is Nothing Then Exit Sub
ImportContacts objMailFolder, objContactsFolder End Sub
Sub ImportContacts(MailFolder As Outlook.MAPIFolder, ContactsFolder As Outlook.MAPIFolder) On Error Resume Next
Dim objContact As Outlook.ContactItem Dim objItems As Outlook.Items, objItem As Object Dim objItemsSearch As Outlook.Items Set objItems = MailFolder.Items For Each objItem In objItems If objItem.Class = olMail Then Set objContact = ContactsFolder.Items.Add(olContactItem) objContact.FullName = objItem.SenderName objContact.Email1Address = objItem.SenderEmailAddress Set objItemsSearch = ContactsFolder.Items.Restrict("[FullName] = '" & objContact.FullName & "'") If objItemsSearch.Count = 0 Then 'Contact doesn't exist objContact.Save End If Set objContact = Nothing End If Next Set objItem = Nothing Set objItems = Nothing End Sub
 Signature Eric Legault - B.A, MCP, MCSD, Outlook MVP Try Picture Attachments Wizard for Outlook! http://tinyurl.com/ckytm Job: http://www.imaginets.com Blog: http://blogs.officezealot.com/legault/
> Sorry for the delay in getting back to you, meeting this morning and working > on this response for a while. LOL. [quoted text clipped - 127 lines] > > > > > > > > > > Cordially, FLSusanC - 01 Feb 2006 18:31 GMT I wonder if this would accomplish the same for my needs: for every person that wants to be added to our mailing list and completes the "join our mailing list" form on the website, the infomation will automatically be added as a new contact in Outlook. Would it be smarter to use a separate contact folder or use a category to filter them later? Thank you for your advise.
> You need to change your macro security settings to Medium or lower to run > macros. [quoted text clipped - 82 lines] > > > > > > > > Cordially, Eric Legault [MVP - Outlook] - 01 Feb 2006 19:54 GMT Wow, an old thread resurrected! :-)
It depends on how this form is processed on your web site. Do the results get sent to someone internally via e-mail?
 Signature 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/
> I wonder if this would accomplish the same for my needs: for every person > that wants to be added to our mailing list and completes the "join our [quoted text clipped - 89 lines] > > > > > > > > > > Cordially, FLSusanC - 01 Feb 2006 20:12 GMT Currently contact information is entered when people donate monies thru the link on our site using PayPal. I will have to check with the Web designer to be sure.
What will need to happen? Have you heard of the Constant Contact program?
> Wow, an old thread resurrected! :-) > [quoted text clipped - 94 lines] > > > > > > > > > > > > Cordially, Eric Legault [MVP - Outlook] - 01 Feb 2006 22:38 GMT Ultimately you need that web form to send an e-mail to someone internally. This e-mail would contain the e-mail address of the user who submitted the form somewhere - in the subject or message body. The macro I wrote earlier in this thread would be perfect to auto-create Contacts based on these incoming e-mails, however it would have to be tweaked to parse the subject line or message body to read the user e-mail, and it would not be coming from the user (the e-mail would be coming from whatever e-mail account was used on the web server to send that internal e-mail). The macro would also need to run on the computer that is running the Outlook profile connected to the e-mail account that receives the results of the web forms.
 Signature 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/
> Currently contact information is entered when people donate monies thru the > link on our site using PayPal. I will have to check with the Web designer to [quoted text clipped - 101 lines] > > > > > > > > > > > > > > Cordially, BrianL - 14 Jun 2007 14:11 GMT I have found this post to be very helpful to me as I try to write a script for an employee. I havn't done any VB coding since I was 12 however and I'm a bit rusty (I'm fixing that by reading VBA in a Nutshell)
A couple days ago an employee asked if there was a way to get Outlook to prompt you when you recieve an e-mail from someone who is not in your contact list.
We downloaded an add-on that adds contacts from all messages sent and recieved, but it hasn't worked out to well.
My Goal for this script: 1. retrieve addresses from emails 2. Check for the address in the contacts list 3. run a form that will prompt "would you like to add as contact" 4. when you click yes, opens the standard "add contact" form with the email already filled out (this one is optional)
I already have the Prompt form created and have named it addprompt. The only script I have right now is the script for the "no" button.
any advice on how to achieve my goal would be greatly apreciated
Eric Legault [MVP - Outlook] - 14 Jun 2007 20:58 GMT 1. retrieve addresses from emails
From an individual e-mail, use Item.SenderEmailAddress. To retrieve from all e-mails, loop through the MAPIFolder.Items collection for the folder you want to inspect
2. Check for the address in the contacts list
Use a loop through the Items collection from the Contacts folder. Use Items.Restrict("[Email1Address = 'joe@domain.com'") to filter the collection. Repeat with Email2Address and Email3Address. OR - use Redemption (www.dimastr.com) - which has a handy RDOAddressEntry.GetContact method.
3. run a form that will prompt "would you like to add as contact"
You don't need to design a form for this, unless you really need to customize the dialog. Use the MsgBox method.
4. when you click yes, opens the standard "add contact" form with the email already filled out (this one is optional)
Use something like: Set objContact = olApp.CreateItem(olContactItem) objContact.Email1Address = strEmail objContact.Display
 Signature Eric Legault - Outlook MVP, MCDBA, MCTS (SharePoint programming, etc.) Try Picture Attachments Wizard for Outlook: http://www.collaborativeinnovations.ca Blog: http://blogs.officezealot.com/legault/
> I have found this post to be very helpful to me as I try to write a script > for an employee. I havn't done any VB coding since I was 12 however and I'm a [quoted text clipped - 18 lines] > > any advice on how to achieve my goal would be greatly apreciated BrianL - 14 Jun 2007 21:15 GMT I did not realize it, but I have this question twice in the newsgroup haha. Sue M. gave me the idea to make the first steps more simple: just have a rule that applies to every message, and make an exception for emails sent by a contact. If it isn't in the contact list, then I will run the msgbox / script to actually add the contact.
We havn't completely finished discusing it, but the code you provided will give me good ground to build on. I really appreciate your input here =].
> 1. retrieve addresses from emails > [quoted text clipped - 21 lines] > objContact.Email1Address = strEmail > objContact.Display Sue Mosher [MVP-Outlook] - 14 Jun 2007 21:33 GMT Right, if you use those rule condition/exceptions, you won't have to do Step #2 at all.
 Signature Sue Mosher, Outlook MVP Author of Microsoft Outlook 2007 Programming: Jumpstart for Power Users and Administrators http://www.outlookcode.com/article.aspx?id=54
>I did not realize it, but I have this question twice in the newsgroup haha. > Sue M. gave me the idea to make the first steps more simple: just have a [quoted text clipped - 30 lines] >> objContact.Email1Address = strEmail >> objContact.Display BrianL - 15 Jun 2007 13:54 GMT Thanks for all of your help here guys. The code that Eric gave me and the new approach Sue contributed will help me greatly.
I would sit here and ask you to hold my hand through writing this code, but where's the accomplishment in that? haha
Thanks again,
Brian L (the 16 year old programmer :-P )
> Right, if you use those rule condition/exceptions, you won't have to do Step #2 at all. Sue Mosher [MVP-Outlook] - 15 Jun 2007 14:05 GMT We'll be here if you get stumped, Brian. Have fun.
 Signature Sue Mosher, Outlook MVP Author of Microsoft Outlook 2007 Programming: Jumpstart for Power Users and Administrators http://www.outlookcode.com/article.aspx?id=54
> Thanks for all of your help here guys. The code that Eric gave me and the new > approach Sue contributed will help me greatly. [quoted text clipped - 7 lines] > >> Right, if you use those rule condition/exceptions, you won't have to do Step #2 at all. BrianL - 15 Jun 2007 15:16 GMT actually, I just posted a problem I found.
I have successfully written the code for my form. However, I do not know how to write a script or custom action that will open the form. I think the bigger problem is that I do not know how to save the script or action for use in a rule.
> We'll be here if you get stumped, Brian. Have fun. BrianL - 15 Jun 2007 14:42 GMT actually, lets not close this one just yet.
I have written the code for the form I created. However, I do not know how to run the from using a rule. and I don't know how to save a script that would open the form. Advice?
Please and thankyou,
Brian
Sue Mosher [MVP-Outlook] - 15 Jun 2007 15:06 GMT The "run a script" rule action in the Rules Wizard will give you an underlined link to click to choose the "script," which is actually the procedure you wrote in VBA, not a separate file.
 Signature Sue Mosher, Outlook MVP Author of Microsoft Outlook 2007 Programming: Jumpstart for Power Users and Administrators http://www.outlookcode.com/article.aspx?id=54
> actually, lets not close this one just yet. > [quoted text clipped - 5 lines] > > Brian satishsuman - 03 Mar 2008 06:39 GMT Hi, I need to fetch my outlook contacts in a csv file using c#.
I am able to do it by writing all the fields one by one in my data.csv. e.g.
for (int i = 1; i < = contactFld.Items.Count ; i++) { Outlook.ContactItem contact = (Outlook.ContactItem)contactFld.ItemsIdea;
if (contact.Email1Address != null || contact.Email2Address != null || contact.Email3Address != null) { try { sw.Write(contact.FirstName); sw.Write("',"); sw.Write(contact.LastName); sw.Write("',"); sw.WriteLine(contact.Email1Address); } catch (Exception e1) { MessageBox.Show("Error"); } } }
Now, instead of creating this .csv file, I want to fetch the .csv file diretly.
Is there any method to fetch it directly from MAPIFolder element? Or any other way..
> Thanks for all of your help here guys. The code that Eric gave me and the new > approach Sue contributed will help me greatly. [quoted text clipped - 7 lines] > > > Right, if you use those rule condition/exceptions, you won't have to do Step #2 at all. Ken Slovak - [MVP - Outlook] - 03 Mar 2008 13:48 GMT No, there aren't any built-in methods for importing (or exporting) to a CSV file, you have to write your own code for that.
 Signature Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007 Reminder Manager, Extended Reminders, Attachment Options http://www.slovaktech.com/products.htm
> Hi, > I need to fetch my outlook contacts in a csv file using c#. [quoted text clipped - 31 lines] > Is there any method to fetch it directly from MAPIFolder element? > Or any other way..
|
|
|