août
2011
Depuis quelques temps je me pose des questions sur mes données personnelles qui sont stockées dans le CLOUD :
¤ Pendant combien de temps YAHOO ou GMAIL (GOOGLE) vont garder mes emails avant de les supprimer définitivement ? 3 ans ? 6 ans ? 10 ans ?
¤ Le jour où mon compte email YAHOO (ou GMAIL) ne sera plus accessible (ou désactivé/supprimé) pour X ou Y raisons, ai-je une sauvegarde du contenu de ma boîte électronique (carnet d’adresses, emails importants, …) ?
¤ Comment automatiser le stockage de mes emails YAHOO, GMAIL, … dans une base de données pour ensuite les retrouver rapidement via une requête SQL ?
¤ Comment automatiser le stockage de mon carnet d’adresse Yahoo, Gmail, …et planifier la mise à jour régulière dans une base de données ?
Pour répondre à ces questions, j’ai développé une petite application console C# qui me permet automatiser le stockage de tous mes emails professionnels comme privés ainsi que mes carnets d’adresses dans une base de données SQL Server
=> Contexte
–> Visual Studio 2008
–> Microsoft Outlook 2007
–> SQL SERVER 2008 R2
=> Pré-requis
–> L’application fait référence à la .dll Microsoft.Office.Interop.Outlook qu’il faut ajouter comme référence.
Dans mon contexte OUTLOOK 2007 est déjà installé sur mon PC et donc cette .dll est disponible pour toutes les applications .NET
–> Les profiles de chaque compte (YAHOO, GMAIL, …) sont créés dans outlook et les fichiers de données (emails, contacts) sont bien séparés.
Ce qui permet d’avoir l’arborescence suivante dans l’IHM d’outlook :
Pour les emails
et pour les carnets d’adresses.
Après cette préparation, il ne reste qu’à coder l’application C# et écrire deux procédures stockés SQL.
=> Code de l’application console
using System;
using System.Text;
using Microsoft.Office.Interop.Outlook;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Configuration;
namespace Outlook
{
class Program
{
static void Main(string[] args)
{
//--> Definition du NameSpace
ApplicationClass o = new ApplicationClass();
NameSpace outlookNS = o.GetNamespace("MAPI");
//--> Utiliser la methode Logon pour un profile specifique
//try
//{
// outlookNS.Logon("test@serveurEmail.com", "mot de passe", false, true);
//}
//catch (System.Exception ex)
//{
// throw ex;
//}
//Console.WriteLine("CurrentProfileName : {0} ",outlookNS.Session.CurrentProfileName);
//--> Traitement des emails ?
Console.WriteLine("-----------Voulez-vous traiter les emails ? Y/N --------");
string traitementemail = Console.ReadLine().ToUpper();
if (traitementemail == ("Y"))
{
Console.WriteLine("================================================================================");
Console.WriteLine("=== Import des emails et des contacts dans la base de données SQL SERVER === ");
Console.WriteLine("================================================================================");
//--> Emplacement du dossier emails à traiter
// Accès à la Boite de reception par défaut (Emails professionnels)
//MAPIFolder inboxFolder = outlookNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
// Accès à un dossier particulier se trouvant sous la boite de réception par défaut (Emails Professionnels classés dans un sous-dossier)
//MAPIFolder inboxFolder = outlookNS.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox).Folders["A_FAIRE"];
// Accès à un dossier particulier qui n'est pas sous la boite de réception par défaut (exemple ma boite yahoo)
MAPIFolder inboxFolder = outlookNS.Session.Folders["myYahoo"].Folders["Boîte de réception"];
// Accès à un dossier particulier qui n'est pas sous la boite de réception par défaut (exemple ma boite Gmail)
//MAPIFolder inboxFolder = outlookNS.Session.Folders["myGmail"].Folders["Boîte de réception"];
// Afficher le nombre total d'emails
Console.WriteLine("-----------Traitement des emails--------");
Console.WriteLine("Vous avez {0} e-mail(s) dans le dossier " + inboxFolder.Name, inboxFolder.Items.Count);
Console.WriteLine("----------------------------------------");
//--> Traitement des Emails
int i = 0;
foreach (object obj in inboxFolder.Items)
{
MailItem item = obj as MailItem;
//Traitement des emails lus
if (item != null && item.UnRead == false)
{
//->Pour afficher les emails en cours de traitement
//Console.WriteLine("-> EntryID: {0}", item.EntryID.ToString());
//Console.WriteLine("-> ConversationIndex: {0}", item.ConversationIndex);
//Console.WriteLine("-> ConversationTopic: {0}", item.ConversationTopic);
//Console.WriteLine("-> ReceivedByEntryID: {0}", item.ReceivedByEntryID);
//Console.WriteLine("-> ReceivedByName: {0}", item.ReceivedByName);
//Console.WriteLine("-> CreationTime: {0}", item.CreationTime);
//Console.WriteLine("-> ReceivedTime: {0}", item.ReceivedTime);
//Console.WriteLine("-> SenderEmailAddress: {0}", item.SenderEmailAddress);
//Console.WriteLine("-> SenderName: {0}", item.SenderName);
//Console.WriteLine("-> To: {0}", item.To);
//Console.WriteLine("-> BCC: {0}", item.BCC);
//Console.WriteLine("-> CC: {0}", item.CC);
//Console.WriteLine("-> Subject: {0}", item.Subject);
//Console.WriteLine("-> Body: {0}", item.Body);
//Console.WriteLine("-> Importance: {0}", item.Importance);
//Console.WriteLine("-> Categories: {0}", item.Categories);
//Console.WriteLine("-> Companies: {0}", item.Companies);
//Console.WriteLine("-> InternetCodepage: {0}", item.InternetCodepage);
//Console.WriteLine("-> BodyFormat: {0}", item.BodyFormat);
//Console.WriteLine("-> HTMLBody: {0}", item.HTMLBody);
//Console.WriteLine("Nb Attachment: {0}", item.Attachments.Count);
//-> Pour enregistrer les pieces jointes dans le repertoire C:\temp
//if (item.Attachments.Count > 0)
//{
// Console.WriteLine("-> Nb Attachment: {0}", item.Attachments.Count);
// for (int i = 1; i <= item.Attachments.Count; i++)
// {
// item.Attachments[i].SaveAsFile(@"C:\Temp\" + item.Attachments[i].FileName);
// }
//}
// Connexion à la base de données
ConnectionStringSettings settings;
settings = System.Configuration.ConfigurationManager.ConnectionStrings["CnxBD"];
string connectionString = settings.ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
// Appel de la procédure stockée P_INSERT_Emails : Insertion des Emails dans la base
SqlCommand cmd = new SqlCommand("P_INSERT_Emails", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ConversationIndex", SqlDbType.VarChar, 2147483647).Value = item.ConversationIndex;
cmd.Parameters.Add("@ConversationTopic", SqlDbType.VarChar, 1024).Value = item.ConversationTopic;
cmd.Parameters.Add("@ReceivedByName", SqlDbType.VarChar, 1024).Value = item.ReceivedByName;
cmd.Parameters.Add("@CreationTime", SqlDbType.VarChar, 50).Value = item.CreationTime;
cmd.Parameters.Add("@ReceivedTime", SqlDbType.VarChar, 50).Value = item.ReceivedTime;
cmd.Parameters.Add("@SenderEmailAddress", SqlDbType.VarChar, 50).Value = item.SenderEmailAddress;
cmd.Parameters.Add("@SenderName", SqlDbType.VarChar, 50).Value = item.SenderName;
cmd.Parameters.Add("@To", SqlDbType.VarChar, 50).Value = item.To;
cmd.Parameters.Add("@BCC", SqlDbType.VarChar, 50).Value = item.BCC;
cmd.Parameters.Add("@CC", SqlDbType.VarChar, 50).Value = item.CC;
cmd.Parameters.Add("@Subject", SqlDbType.VarChar, 50).Value = item.Subject;
cmd.Parameters.Add("@Body", SqlDbType.VarChar, 50).Value = item.Body;
cmd.Parameters.Add("@Importance", SqlDbType.VarChar, 50).Value = item.Importance;
cmd.Parameters.Add("@Categories", SqlDbType.VarChar, 50).Value = item.Categories;
cmd.Parameters.Add("@Companies", SqlDbType.VarChar, 50).Value = item.Companies;
cmd.Parameters.Add("@InternetCodepage", SqlDbType.VarChar, 50).Value = item.InternetCodepage;
cmd.Parameters.Add("@BodyFormat", SqlDbType.VarChar, 50).Value = item.BodyFormat;
cmd.Parameters.Add("@HTMLBody", SqlDbType.VarChar, 2147483647).Value = item.HTMLBody;
cmd.Parameters.Add("@Nb_Attachment", SqlDbType.VarChar, 50).Value = item.Attachments.Count.ToString();
try
{
conn.Open();
cmd.ExecuteNonQuery();
i += 1;
// Nombre d'emails traité(s)/restants
Console.WriteLine("--> " + i + " e-mail(s) traité(s) ..." + "Il reste {0} e-mail(s) à traiter ...", inboxFolder.Items.Count - i);
}
catch (System.Exception exInsertEmail)
{
throw exInsertEmail;
}
conn.Close();
}
}
// Clean up inboxFolder
inboxFolder = null;
i = 0;
}
//--> Traitement des contacts ?
Console.WriteLine("-----------Voulez-vous traiter les contacts (Carnet d'adresse) ? Y/N --------");
string traitementcontacts = Console.ReadLine().ToUpper();
if(traitementcontacts == "Y")
{
//--> Traitement des Contacts
//Contacts par défaut (Contacts professionnels)
//MAPIFolder Contacts = outlookNS.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
//Contacts dans un autre emplacement (Contact Personnel, Privée)
MAPIFolder Contacts = outlookNS.Session.Folders["myYahoo"].Folders["Contact_Yahoo"];
int j = 0;
foreach (object objcontact in Contacts.Items)
{
ContactItem itemContact = objcontact as ContactItem;
if (itemContact != null)
{
//->Pour afficher les contacts en cours de traitement
//Console.WriteLine("-> ConversationIndex: {0}", itemContact.ConversationIndex);
//Console.WriteLine("-> CustomerID: {0}", itemContact.CustomerID);
//Console.WriteLine("-> FirstName: {0}", itemContact.FirstName);
//Console.WriteLine("-> LastName: {0}", itemContact.LastName);
//Console.WriteLine("-> Gender: {0}", itemContact.Gender);
//Console.WriteLine("-> Profession: {0}", itemContact.Profession);
//Console.WriteLine("-> JobTitle: {0}", itemContact.JobTitle);
//Console.WriteLine("-> MobileTelephoneNumber: {0}", itemContact.MobileTelephoneNumber);
//Console.WriteLine("-> BusinessTelephoneNumber: {0}", itemContact.BusinessTelephoneNumber);
//Console.WriteLine("-> BusinessAddressPostalCode: {0}", itemContact.BusinessAddressPostalCode);
//Console.WriteLine("-> BusinessAddressPostOfficeBox: {0}", itemContact.BusinessAddressPostOfficeBox);
//Console.WriteLine("-> BusinessAddressState: {0}", itemContact.BusinessAddressState);
//Console.WriteLine("-> BusinessAddressStreet: {0}", itemContact.BusinessAddressStreet);
//Console.WriteLine("-> CompanyName: {0}", itemContact.CompanyName);
//Console.WriteLine("-> Email1Address: {0}", itemContact.Email1Address);
//Console.WriteLine("-> Email2Address: {0}", itemContact.Email2Address);
//Console.WriteLine("-> MailingAddress: {0}", itemContact.MailingAddress);
//Console.WriteLine("-> MailingAddressState: {0}", itemContact.MailingAddressState);
//Console.WriteLine("-> MailingAddressCountry: {0}", itemContact.MailingAddressCountry);
//Console.WriteLine("-> MailingAddressCity: {0}", itemContact.MailingAddressCity);
//Console.WriteLine("-> MailingAddressStreet: {0}", itemContact.MailingAddressStreet);
//Console.WriteLine("-> ManagerName: {0}", itemContact.ManagerName);
//Console.WriteLine("-> Birthday: {0}", itemContact.Birthday);
//Console.WriteLine("-> AssistantName: {0}", itemContact.AssistantName);
//Console.WriteLine("-> AssistantTelephoneNumber: {0}", itemContact.AssistantTelephoneNumber);
//Console.WriteLine("-> CreationTime: {0}", itemContact.CreationTime);
//Console.WriteLine("-> Hobby: {0}", itemContact.Hobby);
//Console.WriteLine("-> HomeAddress: {0}", itemContact.HomeAddress);
//Console.WriteLine("-> HomeAddressCity: {0}", itemContact.HomeAddressCity);
//Console.WriteLine("-> HomeAddressPostalCode: {0}", itemContact.HomeAddressPostalCode);
//Console.WriteLine("-> HomeAddressPostOfficeBox: {0}", itemContact.HomeAddressPostOfficeBox);
//Console.WriteLine("-> HomeAddressState: {0}", itemContact.HomeAddressState);
//Console.WriteLine("-> HomeAddressStreet: {0}", itemContact.HomeAddressStreet);
//Console.WriteLine("-> HomeTelephoneNumber: {0}", itemContact.HomeTelephoneNumber);
//Console.WriteLine("-> WebPage: {0}", itemContact.WebPage);
// Insertion du contact dans la base de données
// Connexion à la base de données
ConnectionStringSettings settings;
settings = System.Configuration.ConfigurationManager.ConnectionStrings["CnxBD"];
string connectionString = settings.ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
// Appel de la procedure stockée P_INSERT_Contacts : Insertion des contacts dans la base :
SqlCommand cmd = new SqlCommand("P_INSERT_Contacts", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ConversationIndex", SqlDbType.VarChar, 2147483647).Value = itemContact.ConversationIndex;
cmd.Parameters.Add("@CustomerID", SqlDbType.VarChar, 2147483647).Value = itemContact.CustomerID;
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = itemContact.FirstName;
cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 50).Value = itemContact.LastName;
cmd.Parameters.Add("@MobileTelephoneNumber", SqlDbType.VarChar, 50).Value = itemContact.MobileTelephoneNumber;
cmd.Parameters.Add("@BusinessTelephoneNumber", SqlDbType.VarChar, 50).Value = itemContact.BusinessTelephoneNumber;
cmd.Parameters.Add("@Email1Address", SqlDbType.VarChar, 50).Value = itemContact.Email1Address;
cmd.Parameters.Add("@Email2Address", SqlDbType.VarChar, 50).Value = itemContact.Email2Address;
cmd.Parameters.Add("@MailingAddress ", SqlDbType.VarChar, 1024).Value = itemContact.MailingAddress ;
cmd.Parameters.Add("@MailingAddressCity ", SqlDbType.VarChar, 1024).Value = itemContact.MailingAddressCity ;
cmd.Parameters.Add("@MailingAddressState ", SqlDbType.VarChar, 1024).Value = itemContact.MailingAddressState ;
cmd.Parameters.Add("@ManagerName ", SqlDbType.VarChar, 50).Value = itemContact.ManagerName ;
cmd.Parameters.Add("@Birthday ", SqlDbType.VarChar, 50).Value = itemContact.Birthday ;
cmd.Parameters.Add("@AssistantName ", SqlDbType.VarChar, 50).Value = itemContact.AssistantName ;
cmd.Parameters.Add("@AssistantTelephoneNumber ", SqlDbType.VarChar, 50).Value = itemContact.AssistantTelephoneNumber ;
cmd.Parameters.Add("@BusinessAddressPostalCode ", SqlDbType.VarChar, 50).Value = itemContact.BusinessAddressPostalCode ;
cmd.Parameters.Add("@BusinessAddressPostOfficeBox ", SqlDbType.VarChar, 1024).Value = itemContact.BusinessAddressPostOfficeBox ;
cmd.Parameters.Add("@BusinessAddressStreet ", SqlDbType.VarChar, 1024).Value = itemContact.BusinessAddressStreet ;
cmd.Parameters.Add("@CompanyName ", SqlDbType.VarChar, 50).Value = itemContact.CompanyName ;
cmd.Parameters.Add("@CreationTime ", SqlDbType.VarChar, 50).Value = itemContact.CreationTime ;
cmd.Parameters.Add("@Gender ", SqlDbType.VarChar, 20).Value = itemContact.Gender ;
cmd.Parameters.Add("@Hobby ", SqlDbType.VarChar, 1024).Value = itemContact.Hobby ;
cmd.Parameters.Add("@HomeAddress ", SqlDbType.VarChar, 1024).Value = itemContact.HomeAddress ;
cmd.Parameters.Add("@HomeAddressCity ", SqlDbType.VarChar, 1024).Value = itemContact.HomeAddressCity ;
cmd.Parameters.Add("@HomeAddressPostalCode ", SqlDbType.VarChar, 1024).Value = itemContact.HomeAddressPostalCode ;
cmd.Parameters.Add("@HomeAddressPostOfficeBox ", SqlDbType.VarChar, 1024).Value = itemContact.HomeAddressPostOfficeBox ;
cmd.Parameters.Add("@HomeAddressState ", SqlDbType.VarChar, 1024).Value = itemContact.HomeAddressState ;
cmd.Parameters.Add("@HomeAddressStreet ", SqlDbType.VarChar, 1024).Value = itemContact.HomeAddressStreet ;
cmd.Parameters.Add("@HomeTelephoneNumber ", SqlDbType.VarChar, 50).Value = itemContact.HomeTelephoneNumber ;
cmd.Parameters.Add("@JobTitle ", SqlDbType.VarChar, 50).Value = itemContact.JobTitle ;
cmd.Parameters.Add("@MailingAddressCountry ", SqlDbType.VarChar, 1024).Value = itemContact.MailingAddressCountry ;
cmd.Parameters.Add("@MailingAddressStreet ", SqlDbType.VarChar, 1024).Value = itemContact.MailingAddressStreet ;
cmd.Parameters.Add("@Profession ", SqlDbType.VarChar, 50).Value = itemContact.Profession ;
cmd.Parameters.Add("@WebPage ", SqlDbType.VarChar, 50).Value = itemContact.WebPage ;
try
{
conn.Open();
cmd.ExecuteNonQuery();
j += 1;
// Nombre de contact traité(s)/restants
Console.WriteLine("--> " + j + " Contact(s) traité(s) ..." + "Il reste {0} Contact(s) à traiter ...", Contacts.Items.Count - j);
}
catch (System.Exception exInsertContact)
{
throw exInsertContact;
}
conn.Close();
}
}
// Clean up contacts.
Contacts = null;
}
Console.WriteLine();
Console.WriteLine("======== Appuyer sur la touche Entrée pour quitter le programmme ========");
Console.ReadLine();
}
// Log off si on avait utliser la methode Logon pour un profile specifique.
//outlookNS.Logoff();
}
}
Les informations de connexion à la base de données sont dans le fichier App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="CnxBD" connectionString="Data Source=ZINZINDOHOUE\SQL2008R2;User Id=mylogin;Password=mypassword;Initial Catalog=Emails_Contacts" />
</connectionStrings>
</configuration>
les procédures stockées sont dans la base Emails_Contacts
–> Procédure P_INSERT_Emails
CREATE PROCEDURE [dbo].[P_INSERT_Emails]
@ConversationIndex VARCHAR(max)= ''
,@ConversationTopic VARCHAR(1024)=''
,@ReceivedByName VARCHAR(1024) =''
,@CreationTime VARCHAR(50) = ''
,@ReceivedTime VARCHAR(50) = ''
,@SenderEmailAddress VARCHAR(50) = ''
,@SenderName VARCHAR(50) = ''
,@To VARCHAR(50) =''
,@BCC VARCHAR(50) =''
,@CC VARCHAR(50)= ''
,@Subject VARCHAR(50) =''
,@Body VARCHAR (max) =''
,@Importance VARCHAR(50) =''
,@Categories VARCHAR(50) =''
,@Companies VARCHAR(50) =''
,@InternetCodepage VARCHAR(50) =''
,@BodyFormat VARCHAR(50) =''
,@Nb_Attachment VARCHAR(100) =''
,@HTMLBody VARCHAR (max) =''
AS
SET NOCOUNT ON
BEGIN TRY
IF NOT EXISTS (SELECT ConversationIndex FROM T_Emails_Yahoo WHERE ConversationIndex = @ConversationIndex)
INSERT INTO T_Emails_Yahoo(
ConversationIndex,
ConversationTopic,
ReceivedByName,
CreationTime,
ReceivedTime,
SenderEmailAddress,
SenderName,
[To],
BCC,
CC,
[Subject],
Body,
Importance,
Categories,
Companies,
InternetCodepage,
BodyFormat,
HTMLBody,
[Nb Attachment])
VALUES (
@ConversationIndex,
@ConversationTopic,
@ReceivedByName,
@CreationTime,
@ReceivedTime,
@SenderEmailAddress,
@SenderName,
@To,
@BCC,
@CC,
@Subject,
@Body,
@Importance,
@Categories,
@Companies,
@InternetCodepage,
@BodyFormat,
@HTMLBody,
@Nb_Attachment)
END TRY
BEGIN CATCH
SELECT 'Erreur dans la procédure [P_INSERT_Emails]'
END CATCH
–> Procédure P_INSERT_Contacts
CREATE PROCEDURE [dbo].[P_INSERT_Contacts]
@ConversationIndex VARCHAR(max) =''
,@CustomerID VARCHAR(max)=''
,@FirstName VARCHAR(50)=''
,@LastName VARCHAR(50)=''
,@MobileTelephoneNumber VARCHAR(50)=''
,@BusinessTelephoneNumber VARCHAR(50)=''
,@Email1Address VARCHAR(50) =''
,@Email2Address VARCHAR(50)=''
,@MailingAddress VARCHAR(1024)=''
,@MailingAddressCity VARCHAR(1024)=''
,@MailingAddressState VARCHAR(1024)=''
,@ManagerName VARCHAR(50)=''
,@Birthday VARCHAR(50)=''
,@AssistantName VARCHAR(50)=''
,@AssistantTelephoneNumber VARCHAR(50)=''
,@BusinessAddressPostalCode VARCHAR(50)=''
,@BusinessAddressPostOfficeBox VARCHAR(1024)=''
,@BusinessAddressState VARCHAR(1024)=''
,@BusinessAddressStreet VARCHAR(1024)=''
,@CompanyName VARCHAR(50)=''
,@CreationTime VARCHAR(50)=''
,@Gender VARCHAR(20)=''
,@Hobby VARCHAR(1024)=''
,@HomeAddress VARCHAR(1024)=''
,@HomeAddressCity VARCHAR(1024)=''
,@HomeAddressPostalCode VARCHAR(1024)=''
,@HomeAddressPostOfficeBox VARCHAR(1024)=''
,@HomeAddressState VARCHAR(1024)=''
,@HomeAddressStreet VARCHAR(1024)=''
,@HomeTelephoneNumber VARCHAR(50)=''
,@JobTitle VARCHAR(50)=''
,@MailingAddressCountry VARCHAR(1024)=''
,@MailingAddressStreet VARCHAR(1024)=''
,@Profession VARCHAR(50)=''
,@WebPage VARCHAR(1024)=''
AS
SET NOCOUNT ON
BEGIN TRY
IF NOT EXISTS (SELECT * FROM T_Contacts_Yahoo WHERE FirstName = @FirstName AND LastName = @LastName AND Email1Address = @Email1Address)
INSERT INTO T_Contacts_Yahoo(
ConversationIndex,
CustomerID,
FirstName,
LastName,
MobileTelephoneNumber,
BusinessTelephoneNumber,
Email1Address,
Email2Address,
MailingAddress,
MailingAddressCity,
MailingAddressState,
ManagerName,
Birthday,
AssistantName,
AssistantTelephoneNumber,
BusinessAddressPostalCode,
BusinessAddressPostOfficeBox,
BusinessAddressState,
BusinessAddressStreet,
CompanyName,
CreationTime,
Gender,
Hobby,
HomeAddress,
HomeAddressCity,
HomeAddressPostalCode,
HomeAddressPostOfficeBox,
HomeAddressState,
HomeAddressStreet,
HomeTelephoneNumber,
JobTitle,
MailingAddressCountry,
MailingAddressStreet,
Profession,
WebPage)
VALUES (
@ConversationIndex,
@CustomerID,
@FirstName,
@LastName,
@MobileTelephoneNumber,
@BusinessTelephoneNumber,
@Email1Address,
@Email2Address,
@MailingAddress,
@MailingAddressCity,
@MailingAddressState,
@ManagerName,
@Birthday,
@AssistantName,
@AssistantTelephoneNumber,
@BusinessAddressPostalCode,
@BusinessAddressPostOfficeBox,
@BusinessAddressState,
@BusinessAddressStreet,
@CompanyName,
@CreationTime,
@Gender,
@Hobby,
@HomeAddress,
@HomeAddressCity,
@HomeAddressPostalCode,
@HomeAddressPostOfficeBox,
@HomeAddressState,
@HomeAddressStreet,
@HomeTelephoneNumber,
@JobTitle,
@MailingAddressCountry,
@MailingAddressStreet,
@Profession,
@WebPage)
END TRY
BEGIN CATCH
SELECT 'Erreur dans la procédure [P_INSERT_Contacts]'
END CATCH
Tables de stockage
J’ai taillé large, très large les tables de stockages des emails et des contacts. C’est des tables XXXL [je n’en suis pas fier ;-)]
CREATE TABLE [dbo].[T_Emails_Yahoo](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[ConversationIndex] [varchar](max) NULL,
[ConversationTopic] [varchar](1024) NULL,
[ReceivedByName] [varchar](1024) NULL,
[CreationTime] [varchar](50) NULL,
[ReceivedTime] [varchar](50) NULL,
[SenderEmailAddress] [varchar](1024) NULL,
[SenderName] [varchar](50) NULL,
[To] [varchar](50) NULL,
[BCC] [varchar](50) NULL,
[CC] [varchar](50) NULL,
[Subject] [varchar](50) NULL,
[Body] [varchar](max) NULL,
[Importance] [varchar](50) NULL,
[Categories] [varchar](50) NULL,
[Companies] [varchar](50) NULL,
[InternetCodepage] [varchar](50) NULL,
[BodyFormat] [varchar](50) NULL,
[HTMLBody] [varchar](max) NULL,
[Nb Attachment] [varchar](50) NULL,
[Attachment path] [varchar](100) NULL
)
GO
CREATE TABLE [dbo].[T_Contacts_Yahoo](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[CustomerID] [varchar](max) NULL,
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL,
[MobileTelephoneNumber] [varchar](50) NULL,
[BusinessTelephoneNumber] [varchar](50) NULL,
[Email1Address] [varchar](50) NULL,
[Email2Address] [varchar](50) NULL,
[MailingAddress] [varchar](1024) NULL,
[MailingAddressCity] [varchar](1024) NULL,
[MailingAddressState] [varchar](1024) NULL,
[ManagerName] [varchar](50) NULL,
[Birthday] [varchar](50) NULL,
[AssistantName] [varchar](50) NULL,
[AssistantTelephoneNumber] [varchar](50) NULL,
[BusinessAddressPostalCode] [varchar](50) NULL,
[BusinessAddressPostOfficeBox] [varchar](1024) NULL,
[BusinessAddressState] [varchar](1024) NULL,
[BusinessAddressStreet] [varchar](1024) NULL,
[CompanyName] [varchar](50) NULL,
[CreationTime] [varchar](50) NULL,
[Gender] [char](20) NULL,
[Hobby] [varchar](1024) NULL,
[HomeAddress] [varchar](1024) NULL,
[HomeAddressCity] [varchar](1024) NULL,
[HomeAddressPostalCode] [varchar](1024) NULL,
[HomeAddressPostOfficeBox] [varchar](1024) NULL,
[HomeAddressState] [varchar](1024) NULL,
[HomeAddressStreet] [varchar](1024) NULL,
[HomeTelephoneNumber] [varchar](50) NULL,
[JobTitle] [varchar](50) NULL,
[MailingAddressCountry] [varchar](50) NULL,
[MailingAddressStreet] [varchar](50) NULL,
[Profession] [varchar](50) NULL,
[WebPage] [varchar](1024) NULL,
[ConversationIndex] [varchar](max) NULL
)
Avec ces élément j’ai récupéré tous mes emails et contacts qui sont stockés chez YAHOO.
Et de la même façon j’ai récupéré tous mes emails qui sont stockés chez GOOGLE en indiquant les noms des tables de stockage dans les procédures stockées et en remplaçant la ligne du code C#
// Accès à un dossier particulier qui n’est pas sous la boite de réception par défaut (exemple ma boite yahoo)
MAPIFolder inboxFolder = outlookNS.Session.Folders[« myYahoo »].Folders[« Boîte de réception »];
par
// Accès à un dossier particulier qui n’est pas sous la boite de réception par défaut (exemple ma boite Gmail)
MAPIFolder inboxFolder = outlookNS.Session.Folders[« myGmail »].Folders[« Boîte de réception »];
Et comme ça je peux requêter mes tables SQL …
Contrairement à une idée très répandue actuellement (LE CLOUD), je préfère pour l’instant avoir une sauvegarde de mes données personnelles en local et sur des disques durs amovibles que de les laisser dans le CLOUD On ne jamais
———————————
Etienne ZINZINDOHOUE
———————————