IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#][2.0][OUTLOOK]Ajout d'application et partage de données [FAQ]


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 135
    Points
    135
    Par défaut [C#][2.0][OUTLOOK]Ajout d'application et partage de données
    Bonjour,

    Je developpe en C# winform et webform sur 1.1 et 2.0, pour des futures application je dois développer une suite d'application qui devrait fonctionner sous OUTLOOK 2003 et parter les contacts du certaine catégorie avec ajout de formulaire dans OUTLOOK.

    Je sais pas par ou commencer et surtout quel outil utiliser.

    Si vous avez des article pour l'ajout d'application sous OUTLOOK complet et une aide sur comment parter des contact entre plusieur outlook via internet et INTRANET.

    Merci de votre aide

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 118
    Points
    118
    Par défaut
    voici une classe que j'utilise qui te permet d'interroger les fichiers outlook (PST) des postes clients.
    Cette classe utilise la DLL COM : Interop.Outlook.dll

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
     
    using System;
    using System.Data;
    using System.Diagnostics;
     
    namespace Magi.OutlookConnector
    {
    	/// <summary>
    	/// Delegate declaration for each time an item is processed from an Outlook folder.
    	/// </summary>
    	public delegate void OutlookItemProcessed();
     
    	/// <summary>
    	/// This disposable class acts a translator for information stored in the user's Outlook folders.
    	/// </summary>
    	public class OutlookConnector : IDisposable
    	{
    		private Outlook.Application objOutlook = null;
    		private Outlook.NameSpace objNamespace = null;
    		private Outlook.MAPIFolder objFolder = null;
    		public event OutlookItemProcessed ItemProcessed;
     
    		public OutlookConnector()
    		{
    			objOutlook = new Outlook.ApplicationClass();
    			objNamespace = objOutlook.GetNamespace("MAPI");
    		}
     
    		/// <summary>
    		/// Close the Outlook application when this instance is disposed.
    		/// </summary>
    		public void Dispose()
    		{
    			if (objOutlook != null) objOutlook.Quit();
    		}
     
    		/// <summary>
    		/// Get the number of items within the specified default Outlook folder.
    		/// </summary>
    		/// <param name="folder">outlook folder enumerated value</param>
    		/// <returns>total number of items</returns>
    		public int getFolderCount(Outlook.OlDefaultFolders folder)
    		{
    			objFolder = objNamespace.GetDefaultFolder(folder);
    			return objFolder.Items.Count;
    		}
     
    		/// <summary>
    		/// Retrieve a list of all appointments listed in the Outlook calendar.
    		/// </summary>
    		/// <returns>Calendar Items DataSet</returns>
    		public DataSet getCalendarDataSet()
    		{
    			Outlook.AppointmentItem item;
    			DataSet rv = new DataSet();
    			rv.DataSetName = "Calendar";
    			rv.Tables.Add("Appointment");
    			rv.Tables[0].Columns.Add("Subject");
    			rv.Tables[0].Columns.Add("Location");
    			rv.Tables[0].Columns.Add("Start");
    			rv.Tables[0].Columns.Add("End");
    			rv.Tables[0].Columns.Add("AllDayEvent");
    			rv.Tables[0].Columns.Add("Duration");
    			rv.Tables[0].Columns.Add("Organizer");
    			rv.Tables[0].Columns.Add("Importance");
    			rv.Tables[0].Columns.Add("Sensitivity");
    			rv.Tables[0].Columns.Add("Body");
     
    			try
    			{
    				objFolder = objNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
    				Debug.WriteLine(objFolder.Items.Count + " Appointments found.");
    				for (int i=0; i < objFolder.Items.Count; i++)
    				{
    					item = (Outlook.AppointmentItem) objFolder.Items.GetNext();
    					rv.Tables[0].Rows.Add(new object[] {
    						item.Subject,
    						item.Location,
    						item.Start,
    						item.End,
    						item.AllDayEvent,
    						item.Duration,
    						item.Organizer,
    						item.Importance,
    						item.Sensitivity,
    						item.Body
    					});
    					this.ItemProcessed();
    				}
    				Debug.WriteLine(rv.Tables[0].Rows.Count + " Appointments exported.");
    			}
    			catch (System.Exception e)
    			{
    				Console.WriteLine(e);
    			}
    			return rv;
    		}
     
    		/// <summary>
    		/// Retrieves a list of all the Outlook Contacts.
    		/// </summary>
    		/// <returns>Contact Items DataSet</returns>
    		public DataSet getContactDataSet()
    		{
    			Outlook.ContactItem item;
    			DataSet rv = new DataSet();
    			rv.DataSetName = "Contacts";
    			rv.Tables.Add("Contact");
    			rv.Tables[0].Columns.Add("FirstName");
    			rv.Tables[0].Columns.Add("LastName");
    			rv.Tables[0].Columns.Add("CompanyName");
    			rv.Tables[0].Columns.Add("Email");
    			rv.Tables[0].Columns.Add("HomePhone");
    			rv.Tables[0].Columns.Add("WorkPhone");
     
    			try
    			{
    				objFolder = objNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
    				Debug.WriteLine(objFolder.Items.Count + " Contacts found.");
    				for (int i=0; i < objFolder.Items.Count; i++)
    				{
    					item = (Outlook.ContactItem) objFolder.Items.GetNext();
    					rv.Tables[0].Rows.Add(new object[] {
    						item.FirstName,
    						item.LastName,
    						item.CompanyName,
    						item.Email1Address,
    						item.HomeTelephoneNumber,
    						item.BusinessTelephoneNumber
    					});
    					this.ItemProcessed();
    				}
    				Debug.WriteLine(rv.Tables[0].Rows.Count + " Contacts exported.");
    			}
    			catch (System.Exception e)
    			{
    				Console.WriteLine(e);
    			}
    			return rv;
    		}
     
    		/// <summary>
    		/// Retrieves a list of all emails in the Outlook Inbox.
    		/// </summary>
    		/// <returns>Inbox E-Mail Items DataSet</returns>
    		public DataSet getInboxDataSet()
    		{
    			Outlook.MailItem item;
    			DataSet rv = new DataSet();
    			rv.DataSetName = "InboxEmails";
    			rv.Tables.Add("Email");
    			rv.Tables[0].Columns.Add("From");
    			rv.Tables[0].Columns.Add("To");
    			rv.Tables[0].Columns.Add("Cc");
    			rv.Tables[0].Columns.Add("Subject");
    			rv.Tables[0].Columns.Add("Received");
    			rv.Tables[0].Columns.Add("Message");
     
    			try
    			{
    				objFolder = objNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
    				Debug.WriteLine(objFolder.Items.Count + " E-Mails found.");
    				for (int i=0; i < objFolder.Items.Count; i++)
    				{
    					item = (Outlook.MailItem) objFolder.Items.GetNext();
    					rv.Tables[0].Rows.Add(new object[] {
    						item.SenderName,
    						item.To,
    						item.CC,
    						item.Subject,
    						item.ReceivedTime,
    						item.Body
    					});
    					this.ItemProcessed();
    				}
    				Debug.WriteLine(rv.Tables[0].Rows.Count + " E-Mails exported.");
    			}
    			catch (System.Exception e)
    			{
    				Console.WriteLine(e);
    			}
    			return rv;
    		}
     
    		/// <summary>
    		/// Retrieves a list of all Outlook Notes.
    		/// </summary>
    		/// <returns>Note Items DataSet</returns>
    		public DataSet getNoteDataSet()
    		{
    			Outlook.NoteItem item;
    			DataSet rv = new DataSet();
    			rv.DataSetName = "Notes";
    			rv.Tables.Add("Note");
    			rv.Tables[0].Columns.Add("Subject");
    			rv.Tables[0].Columns.Add("Categories");
    			rv.Tables[0].Columns.Add("CreationTime");
    			rv.Tables[0].Columns.Add("LastModificationTime");
    			rv.Tables[0].Columns.Add("Contents");
     
    			try
    			{
    				objFolder = objNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderNotes);
    				Debug.WriteLine(objFolder.Items.Count + " Notes found.");
    				for (int i=0; i < objFolder.Items.Count; i++)
    				{
    					item = (Outlook.NoteItem) objFolder.Items.GetNext();
    					rv.Tables[0].Rows.Add(new object[] {
    						item.Subject,
    						item.Categories,
    						item.CreationTime,
    						item.LastModificationTime,
    						item.Body
    					});
    					this.ItemProcessed();
    				}
    				Debug.WriteLine(rv.Tables[0].Rows.Count + " Notes exported.");
    			}
    			catch (System.Exception e)
    			{
    				Console.WriteLine(e);
    			}
    			return rv;
    		}
     
    		/// <summary>
    		/// Retrieves a list of all Outlook Tasks.
    		/// </summary>
    		/// <returns>Task Items DataSet</returns>
    		public DataSet getTaskDataSet()
    		{
    			Outlook.TaskItem item;
    			DataSet rv = new DataSet();
    			rv.DataSetName = "Tasks";
    			rv.Tables.Add("Task");
    			rv.Tables[0].Columns.Add("Subject");
    			rv.Tables[0].Columns.Add("StartDate");
    			rv.Tables[0].Columns.Add("DueDate");
    			rv.Tables[0].Columns.Add("Status");
    			rv.Tables[0].Columns.Add("Contents");
     
    			try
    			{
    				objFolder = objNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks);
    				Debug.WriteLine(objFolder.Items.Count + " Tasks found.");
    				for (int i=0; i < objFolder.Items.Count; i++)
    				{
    					item = (Outlook.TaskItem) objFolder.Items.GetNext();
    					rv.Tables[0].Rows.Add(new object[] {
    						item.Subject,
    						item.StartDate,
    						item.DueDate,
    						item.Status,
    						item.Body
    					});
    					this.ItemProcessed();
    				}
    				Debug.WriteLine(rv.Tables[0].Rows.Count + " Tasks exported.");
    			}
    			catch (System.Exception e)
    			{
    				Console.WriteLine(e);
    			}
    			return rv;
    		}
    	}
    }

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    On va mettre ca dans la FAQ, ca pourrait en intéresser plus d'un



  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 135
    Points
    135
    Par défaut
    ok par fait pour ca mais auriez vous un article ou une source pour l'utilisation de cette classe ?

    Merci

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 118
    Points
    118
    Par défaut
    Whaww, ma premiere contribution dans la FAQ

    Malheureusement je n'ai pas d'article sur cette classe.
    Mais on trouve assez vite les info que l'on a besoin grâce aux objets.
    Je mettrai encore aujourd'hui une source qui permet d'ajouter une tâche dans le PST, sans passer par un ics ou autres

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par prophetky
    Je mettrai encore aujourd'hui une source qui permet d'ajouter une tâche dans le PST, sans passer par un ics ou autres



  7. #7
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 118
    Points
    118
    Par défaut
    comme promis, voici la classe que j'utilise dans une des mes appli.
    Elle gère uniquement les tâches dans outlook mais elle est facilement adaptable.

    Le code a été légèrement allégé aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    Imports System.Data
    Imports System
    Imports Outlook
    Imports stdole
    Imports System.Diagnostics
    Public Class outlook
        Dim objOutlook As Global.Outlook.Application = Nothing
        Private objNamespace As Global.Outlook.NameSpace = Nothing
        Private objFolder As Global.Outlook.MAPIFolder = Nothing
        'public event OutlookItemProcessed ItemProcessed
     
        Sub New()
            objOutlook = New Global.Outlook.ApplicationClass()
            objNamespace = objOutlook.GetNamespace("MAPI")
     
        End Sub
     
        Public Sub dispose()
            If Not (objOutlook Is Nothing) Then objOutlook.Quit()
        End Sub
     
        Public ReadOnly Property taskCount() As Integer
            Get
                objFolder = objNamespace.GetDefaultFolder(Global.Outlook.OlDefaultFolders.olFolderTasks)
                Return objFolder.Items.Count
            End Get
     
        End Property
     
        Public Function getTaskDataSet() As DataTable
     
            Dim item As Global.Outlook.TaskItem
            Dim rv As New DataTable("TbTache")
            Dim i As Integer
     
     
            rv.Columns.Add("Subject")
            rv.Columns.Add("StartDate")
            rv.Columns.Add("DueDate")
            rv.Columns.Add("Status")
            rv.Columns.Add("Contents")
     
            Try
     
                objFolder = objNamespace.GetDefaultFolder(Global.Outlook.OlDefaultFolders.olFolderTasks)
     
                For i = 0 To objFolder.Items.Count - 1
     
                    item = CType(objFolder.Items.GetNext(), Global.Outlook.TaskItem)
                    rv.Rows.Add(item.Subject, item.StartDate, item.DueDate, item.Status, item.Body())
                Next i
                Return rv
            Catch ex As System.Exception
                Throw ex
            End Try
        End Function
     
        Public Sub addtask()
            Dim item As Global.Outlook.TaskItem
            objFolder = objNamespace.GetDefaultFolder(Global.Outlook.OlDefaultFolders.olFolderTasks)
     
     
            item = objFolder.Application.CreateItem(OlItemType.olTaskItem)
            item.Subject = "Reunion"
            item.StartDate = Date.Now
            item.Body = "sdsds"
            item.Assign()
            item.Save()
     
     
        End Sub
     
    End Class

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonsoir à vous tous,

    Je rencontre un petit soucis de performances.... En effet j'ai une boite de réception bien garnie... environ 1000 emails (oui je sais il faut faire du tri mais je fais ça volontairement )

    Il se trouve que mon application met un certains temps (7 ou 8 secondes environ) pour charger ces 1000 emails dans mon DataSet... Pourriez vous m'aider un peu ou me donner une piste à suivre afin d'améliorer ces performances?

    Je développe en C# ou en VB.Net, je bosse avec Studio 2005, j'utilise Outlook 2003 et j'utilise la classe proposée plus haut dans ce sujet!

    Merci beaucoup, j'attend avec impatience quelques réponses!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 41
    Dernier message: 11/12/2009, 11h24
  2. Réponses: 2
    Dernier message: 31/07/2009, 00h02
  3. Ajouter une application dans le K-menu
    Par robux dans le forum KDE
    Réponses: 4
    Dernier message: 04/12/2007, 10h50
  4. commande qui ajoute une application au startup
    Par amirym dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 19/05/2007, 20h11
  5. Réponses: 4
    Dernier message: 28/03/2007, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo