Contact Program

B

Brent E

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,
 
E

Eric Legault [MVP - Outlook]

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
 
B

Brent E

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
 
E

Eric Legault [MVP - Outlook]

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?

--
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/
 
B

Brent E

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.
 
E

Eric Legault [MVP - Outlook]

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


--
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/
 
F

FLSusanC

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.
 
F

FLSusanC

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?
 
E

Eric Legault [MVP - Outlook]

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.

--
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/
 
B

BrianL

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
 
E

Eric Legault [MVP - Outlook]

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 = '(e-mail address removed)'") 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
 
B

BrianL

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 =].
 
S

Sue Mosher [MVP-Outlook]

Right, if you use those rule condition/exceptions, you won't have to do Step #2 at all.

--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54


BrianL said:
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 =].

Eric Legault said:
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 = '(e-mail address removed)'") 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

--
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/
 
B

BrianL

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 )
 
B

BrianL

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
 
S

Sue Mosher [MVP-Outlook]

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.
 
B

BrianL

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.
 
S

satishsuman

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..
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top