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 :

[1.1] : connexion à Exchange


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [1.1] : connexion à Exchange
    Bonjour,

    Je souhaite me connecter à un serveur Exchange et lire les mails d'une boite mail en C#. Pour cela j'essaye (désespéremment) d'utiliser MAPI.

    Sous Visual Studio, j'ai ajouter une référence vers CDO 1.21, dans le code j'ai fait un "using MAPI;" puis j'essaye de créer une MAPI.Session et de me logguer masession.logon(...). Le pb, c'est que je n'ai pas trouvé de doc sur les arguments de cette méthode...

    Est ce que quelqu'un aurait une source d'info à partager ? bien sûr, je suis preneur d'un exemple de code qui marche !

    Merci et bonne journée,
    A+
    LeSha

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    J'ai réussi à envoyer des messages via Exchange sous dotnet en C#, je joint le code ci-dessous.
    Par contre j'ai un soucis pour changer l'expéditeur du message, j'ai utilisé le code fourni par microsoft en vb dans un des articles support, que j'ai traduit en C# mais la propriété Sender du message bien qu'elle soit positionné ne semble pas être prise en compte.

    Classe pour l'envoi des message :
    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
     
    using System;
    using System.Configuration;
    using System.Reflection;
    using System.Threading;
     
    namespace GenDossierPdf
    {
    	/// <summary>
    	/// La classe ThreadMail facilite l'envoi de message via Exchange.
    	/// L'envoi de message doit être réalisé dans une thread
    	/// utilisant le mode de cloisonnement STA.			
    	/// </summary>
    	public class ThreadMail 
    	{
    		public string[] destinataires;
    		public string sujet;
    		public string texte;
    		public string nomFichier;
    		public MAPI.Session sessionExchange;
    		public Exception exceptionLevee = null;
     
    		public ThreadMail(MAPI.Session sessionExch,string dest,string suj, string corps, string fichierJoint)
    		{
    			destinataires = dest.Split(';');
    			sujet = suj;
    			texte = corps;
    			nomFichier = fichierJoint;
    			sessionExchange = sessionExch;
    		}
     
    		public void sendMail()
    		{
    			string Server;
    			string Mailbox;
    			object ProfileInfo;			
     
    			// Use vEmpty for Empty parameter.
    			Object vEmpty = Missing.Value;
     
    			Server = ConfigurationSettings.AppSettings["serveurExchange"];
    			Mailbox = ConfigurationSettings.AppSettings["utilisateurExchange"];
    			ProfileInfo = Server + (char)10 + Mailbox;			
     
    			try 
    			{
    				if (sessionExchange==null) 
    				{
    					Thread.CurrentThread.ApartmentState = ApartmentState.STA;
     
    					// Create MAPI session.
    					sessionExchange = (MAPI.Session)Activator.CreateInstance(Type.GetTypeFromProgID("MAPI.Session"));
     
    					// Log on to MAPI.
    					sessionExchange.Logon(System.Environment.UserName, vEmpty, false, true, 0, true, ProfileInfo);				
    				}
    				// Get Outbox.
    				MAPI.Folder oFolder = (MAPI.Folder)sessionExchange.Outbox;
     
    				// Get Messages collection.
    				MAPI.Messages oMsgs = (MAPI.Messages)oFolder.Messages;
     
    				// Create a new message and populate some common properties.
    				MAPI.Message oMsg = (MAPI.Message)oMsgs.Add(vEmpty, vEmpty, vEmpty, vEmpty);
    				oMsg.Subject = sujet;
    				oMsg.Text = texte;
     
    				// Add Attachment
    				if (nomFichier != "") 
    				{
    					MAPI.Attachments oAtts = (MAPI.Attachments)oMsg.Attachments;
    					MAPI.Attachment oAtt = (MAPI.Attachment)oAtts.Add(vEmpty,vEmpty,vEmpty,vEmpty);
    					oAtt.Source = nomFichier;
    					oAtt.Name = System.IO.Path.GetFileName(nomFichier);
    					oAtt.Type = MAPI.CdoAttachmentType.CdoFileData;
    					oAtt.ReadFromFile(nomFichier);
    				}
     
     
    				if (ConfigurationSettings.AppSettings["debug"] == "1")
    				{
    					destinataires = ConfigurationSettings.AppSettings["adminEmail"].Split(';');
    				}
     
     
    				MAPI.Recipients oRecips = (MAPI.Recipients)oMsg.Recipients;
    				MAPI.Recipient oRecip;
    				for (int i=0;i<destinataires.Length;i++)
    				{
    					// Add a new recipient.					
    					oRecip = (MAPI.Recipient)oRecips.Add(vEmpty, vEmpty, vEmpty, vEmpty);
    					oRecip.Name = destinataires[i];
    					oRecip.Resolve(false);
    				}
     
    				oMsg.Importance = 2; // Importance Haute
     
    				// Envoi en tant qu'un autre utilisateur Exchange (délégué)
    				MAPI.AddressLists oAddrLists;
    				MAPI.AddressList oAddrList;
    				MAPI.AddressEntries oAddrEntries;
    				MAPI.AddressEntryFilter oAddrEntryFilter;				
    				if (ConfigurationSettings.AppSettings["expedierEnTantQue"] != "") 
    				{
    					oAddrLists = (MAPI.AddressLists)sessionExchange.AddressLists;
    					oAddrList = (MAPI.AddressList)oAddrLists.get_Item(1);
    					oAddrEntries = (MAPI.AddressEntries)oAddrList.AddressEntries;
    					// oAddrEntries.Filter = null;
    					oAddrEntryFilter = (MAPI.AddressEntryFilter)oAddrEntries.Filter;
    					oAddrEntryFilter.Name = ConfigurationSettings.AppSettings["expedierEnTantQue"]; 
    					oMsg.Sender = (MAPI.AddressEntry)oAddrEntries.GetFirst();
     
    				}
     
    				oMsg.Update(true,true);
    				oMsg.Send(false, false, 0); 
     
    				// Clean up.
    				oRecip = null;
    				oRecips = null;
    				oMsgs = null;
    				oMsg = null;
    				oFolder = null;
    				oAddrLists = null;
    				oAddrList = null;
    				oAddrEntries =null;
    				oAddrEntryFilter = null;							
    			}
    			catch (Exception e)
    			{
    				exceptionLevee = e;
    			}
    		}
    	} // Fin classe ThreadMail
    }
    Appel à cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ThreadMail tm = new ThreadMail(oSession, destinataire,"sujet", "corps", "fichier_cheminComplet");
    					ThreadStart start = new ThreadStart(tm.sendMail);
    					Thread t = new Thread(start);
    					t.Start();
    					t.Join(timeout_enMillisecondes);
    Si vous avez une idée pour mon problème, je suis preneur ...

    Merci
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 96
    Points : 60
    Points
    60
    Par défaut une adresse qui peut aider
    j'ai trouvé une adresse pour l'utilisation de CDO qui permet les connections à exchange mais de même, je ne sais pas répondre plus car inexpérimenté avec exchange et donc moi aussi je cherche un peu de doc dessus en c#

    http://kbalertz.com/sresults.aspx?sw...&st=1&stec=213

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 96
    Points : 60
    Points
    60
    Par défaut
    si tu as visual studio 2005 ou 2008,
    ajoute une WebReference en utilisant l'addresse de ton server exchange:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    https://<Addresse du Server Exchange>/EWS/Service.wsdl
    si tu as le mot de passe et le loggin, ceci devrai ajouter une référence web au service exchange de ton server.

    pour le reste, je suis entrain de chercher aussi de la doc

    je sais que dans ton code, pour acceder au service(méthodes ...) propre à exchange, tu devras commencer ton code comme ceci:
    tout d'abord le namespace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using ["nom de la dll où tu as créer la webreference"].["nom de la web reference"];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ExchangeServiceBinding ewsServiceBinding = new ExchangeServiceBinding();
    ewsServiceBinding.Credentials = 
            new NetworkCredential("Loggin", "password", "domain name");
    ewsServiceBinding.Url = @"https://<Addresse du Server Exchange>/EWS/exchange.asmx";
    voilà... pour le reste, voir le lien suivant:ici
    ou bien

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 96
    Points : 60
    Points
    60
    Par défaut
    j'oubliais... normalement, avec la solution donnée, il n'y a pas besoin de cdo où d'autres truc

Discussions similaires

  1. Connexion exchange oledb
    Par matrix_ceg dans le forum C#
    Réponses: 1
    Dernier message: 04/02/2009, 13h19
  2. Connexion Exchange - Certificat
    Par Bomba dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 23/01/2009, 10h40
  3. Réponses: 14
    Dernier message: 04/08/2008, 02h33
  4. [Connexion à Exchange][Récupération des agendas]
    Par Théolude dans le forum VBScript
    Réponses: 1
    Dernier message: 22/07/2008, 12h13
  5. [LDAP] connexion à exchange
    Par Halukard dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/03/2007, 10h21

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