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

C# Discussion :

sauvegarde d'un object MailMessage dans un DB


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut sauvegarde d'un object MailMessage dans un DB
    Bonjour,

    Pour des questions de fiabilité, j'aimerais sauvegarder mon object System.Web.Mail.MailMessage dans une base de donnée pour faire un envois différé.

    C'est possible ?

    à l'époque j'avais fait un truc comme ça en java simplement en serializant l'object, mais j'ai pas trouvé comment faire avec Dotnet C# ... une idée ?

    merci pour vos réponses
    Rdemont

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    le principe est toujours le meme et utilisable là.

    Soit tu sauvegarde toi meme les données du mail car a priori tu les connais, soit tu "sérialize" l'objet et le sauvegarde.

    Maintenant le probleme reste à savoir comment tu souhaite sauvegardé dans la base de données et surtout la structure des mails, et la quantité d'informations qu'ils représentent (par mails... pas au total)

    Tu as deux voies s'ouvrant à toi...
    La sérialisation XML de l'objet et stockage du flux XML dans la base.
    ou la sérialisation binaire et sauvegarde du flux binaire dans la base.

    La sérialisation binaire est plus rapide mais moins pratique à manipuler que la sérialisation XML. Elle prend également beaucoup moins de place surtout si les mails sont supposés être "gros" et dans ce cas très adapté surtout si les mails ont des images embarqués.

    Si en revanche tes mails sont simples, ou format html sans image "embarqués" mais sous forme d'url vers un lien externe, tu peux exploiter la sérialisation/déserialisation XML.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Salut cinemania,
    Merci pour ta réponse.

    J'ai pas les codes sources de ce truc sous les yeux actuellement je suis dans un autre boulot pour le journée.

    Mais de mémoire je fais de la sérialisation binaire pour le mettre dans une DB. Simplement j'ai une erreur car la classe MailMessage n'est pas [Serializable].

    sinon bien sur que je peut mettre séparément toutes les données du mail mais c'est quand même bien plus simple de sauver l'objet direct dans la db et pas chaque propriété

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Pour une sérialization Xml il n'est pas indispensable que l'objet soit sérialisable. La sérialisation Xml fonctionne en introspectant l'ensemble des propriétés publiques disposant d'accesseurs get ET set, et sauve les valeurs associées à ces propriétés.

    A la désérialisation, on procède de maniére inverse, en appelant les setters avec les valeurs sauvegardées.

    Il est aussi possible d'écrire son propre sérialiseur.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Voilà ce que j'ai fait et qui ne fonctionne pas, vraisemblablement, parce que MailMessage n'est pas [Serializable]. Si quelqu'un à une idée comment rendre MailMessage [Serializable] ce serait volontiers

    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
     
        public Byte[] SerializeMail(MailMessage mail)
        {
            Stream stream = new MemoryStream();
            BinaryReader binaryReader = new BinaryReader(stream);
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            binaryFormatter.Serialize(stream, mail);
            Byte[] result = new Byte[stream.Length];
            stream.Seek(0, 0);
     
            return binaryReader.ReadBytes(int.Parse(binaryReader.BaseStream.Length.ToString()));
        }
        public MailMessage DeserializeMail(Byte[] mailObj)
        {
            MailMessage mail = new MailMessage();
     
            Stream stream = new MemoryStream(mailObj);
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            mail = (MailMessage)binaryFormatter.Deserialize(stream);
            return mail;
        }
    Merci et bonne soirée
    Rdemont

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    soit tu hérite de MailMessage et rend l'héritière Serializable en définissant toi meme les modeles de serialisation....

    Soit tu utilise une serialisation XML qui ne nécessite pas que l'objet soit serialisable.
    puisque tu serialise les propriétés get/set de l'objet et reconstruit l'objet de la meme facon en sens inverse en utilisant les set...
    soit tu le fait manuellement soit le systeme peut le faire.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci pour t'as réponse,

    Donc en gros
    1. je me fais le truc à la pogne en faisant une class Serializable qui hérite de MailMessage
    2. je fais de la serialisation XML et stock le toute dans un gros string .... j'ai pas mal d'attachement dans mes mail c'est pas un problème avec le xml ?

    Merci Rdemont

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    tout dépend des attachements.

    Ce que tu peux faire c'est stocker les attachements séparément dans d'autres tables au format BINAIRE.
    Ensuite dans ta serialisation tu conserve un identifiant qui à la deserialisation te permet de recouvrir la ressource manquante et d'aller la chercher et la deserialiser à son tour.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse ... effectivement le plus simple c'est peut-être de stocké tous les champs dans une table et ne pas faire de serialisation....

    Je vais bientôt regretter java ;-) ... en fait c'est déjà fait ....

    Il n'existe pas des gens qui on déjà résolu ce problème et éventuellement fait une librairie ?

    Bonne journée
    Roland

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    pourquoi regretter java ?
    le probleme serait le meme...

    serialize or not serialize ... that's the question ...
    de plus faire une lib pose un problème... la structure de la base dans laquelle tu va déposer la copie des mails... et ensuite autre problème le type de connexion SQL.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Salut cinemania,

    pourquoi regretter java ?
    C'est pas vraiment le sujet mais avec un javax.mail.internet.MimeMessage je peux faire un writeTo dans un stream pour sauver le message (et les attachements) dans la db et par la suite je re-créer un MimeMessage depuis le binaire de la db

    la type de bd c'est pas le problème du moment qu'il y a des champs binaire ...

    J'ai juste un petit projet à faire en C# j'ai pas trop envie de me lancer dans le dev de libraire de persistance d'objet mail .....

    Je suis quand-même surpris que personne ne fasse ça en C#

    Merci et bonne soirée
    Rdemont

Discussions similaires

  1. object file dans un vecteur
    Par chti_juanito dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 09/05/2006, 09h42
  2. [MySQL] Sauvegarde de base de données dans un fichier
    Par navis84 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/04/2006, 11h41
  3. Sauvegarder une mise en forme dans une RichTextBox
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2005, 12h19
  4. [JDBC]sauvegarde de session servlet/jsp dans une bd
    Par sheura dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/09/2005, 09h37
  5. [Stratégie]Sauvegarde d'une liste chainée dans un fichier
    Par BernardT dans le forum Général Java
    Réponses: 17
    Dernier message: 25/07/2005, 17h04

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