Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Outlook / Programming VBA / March 2008

Tip: Looking for answers? Try searching our database.

Contact Program

Thread view: 
Enable EMail Alerts  Start New Thread
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..
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.