Gaëtan Bouveret
Création d'un événement sur réception d'email
Développement d'un event receiver de type « EmailReceived » pour SharePoint
Par Gaëtan Bouveret publié le 09/09/2007 à 23:01, lu 4011 fois, 9 pages
 4 | Ecriture de l'événement
Nous allons maintenant écrire le code permettant d'ajouter notre élément de liste selon le contenu du message reçu :

 public override void EmailReceived(

    SPList list,

    SPEmailMessage emailMessage,

    string receiverData)

{

    // Vérification que la liste est de type liste de liens

    if (list.BaseTemplate == SPListTemplateType.Links)

    {

        // Récupération du sujet du mail pour en extraire le titre et l'url

        string subject = emailMessage.Headers["Subject"];

        if (!string.IsNullOrEmpty(subject) && subject.StartsWith("http"))

        {

            string title = null;

            string url = null;

            int indexSpace = subject.IndexOf(" ");

            // Découpage du sujet

            //  - soit 1 seul "mot" => URL

            //  - sinon URL suivi du titre du lien

            if (indexSpace >= 0)

            {

                title = subject.Substring(indexSpace + 1).Trim();

                url = subject.Substring(0, indexSpace);

            }

            else

            {

                title = subject;

                url = subject;

            }

            // Récupération du corps du message en tant que commentaires

            string body = emailMessage.PlainTextBody;

            // Si nous avons l'url et le titre, nous ajoutons l'élément

            if (title != null && url != null)

            {

                // Création de l'élément dans la liste

                SPListItem link = list.Items.Add();

                link["URL"] = string.Format("{0}, {1}", url, title);

                link["Comments"] = body;

                // Ajout des pièces attachées si la liste le gère

                if (list.EnableAttachments)

                {

                    foreach (SPEmailAttachment attachment in emailMessage.Attachments)

                    {

                        // Récupération du stream sous forme de tableau de byte

                        byte[] emailContent = new byte[attachment.ContentStream.Length];

                        int offset = 0;

                        int remaining = emailContent.Length;

                        while (remaining > 0)

                        {

                            int read = attachment.ContentStream.Read(emailContent, offset, remaining);

                            remaining -= read;

                            offset += read;

                        }

                        // Ajout de la pièce attaché à l'élément de liste

                        link.Attachments.Add(attachment.FileName, emailContent);

                    }

                }

                // Sauvegarde du nouvel élément

                link.Update();

            }

        }

    }

}

Vous noterez que nous utilisons les noms internes des colonnes (« URL » et « Comments ») afin d'être certain de retrouver nos colonnes quelque soit la langue du site.
Concernant les pièces attachées, nous vérifions que la liste les accepte et dans ce cas nous les listons, récupérons le contenu de chacun des fichiers pour les ajouter à notre élément de liste.
 
» Démarrer une discussion
 
Discussion démarée par avikumar le 26/12/2008 à 15:42, 1 commentaire(s).