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 :

Envoye mail de facon asysnchrone


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut Envoye mail de facon asysnchrone
    Bonjour,

    j'essaye d'envoyer mes mails de facon asynchrone. Pour cela j'ai ecrit le code suivant.

    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
    /// <summary>
            /// Envoye le mail
            /// </summary>
            /// <param name="corps"></param>
            /// <returns></returns>
            public bool Envoye(string corps)
            {
     
     
                MailMessage message = new MailMessage();
                message.From = new MailAddress(Expediteur);
                message.Subject = Sujet;
                message.Body = corps;
                message.Priority = MailPriority.High;
     
                foreach (string dest in Destinaires)
                {
                    message.CC.Add(dest);
     
                }
     
                SmtpClient client = new SmtpClient(Urlsmtp, Port);
     
                client.Credentials = CredentialCache.DefaultNetworkCredentials;
     
                client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
     
                client.SendAsync(message, string.Empty );
     
                try
                {
                   // client.Send(message);
     
                    //client.SendAsync(message, null);
                }
                catch (Exception ex)
                {
                    EnregistreEvenement monevent = new EnregistreEvenement();
                    monevent.EEecrire("Erreur envoye mail" + ex.ToString());
                    return false;
                }
     
                return true;
            }
     
            /// <summary>
            /// Gestion envoye mail de facon asynchrone
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
            {
                if (e.Error != null)
                {
                    EnregistreEvenement monevent = new EnregistreEvenement();
                    monevent.EEecrire("Erreur envoye mail" + e.Error.ToString());
                }
                else
                {
                    EnregistreEvenement monevent = new EnregistreEvenement();
                    monevent.EEecrire("envoye mail" + e.Error.ToString());
                }
            }
    Quand j'utilse client.Send(message); les messages sont transmis sans probleme.

    Par contre des que j'essaye client.SendAsync(message, string.Empty ); ca ne marche plus et je leve l'exception suivante:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Description*:
    Cree le 10/12/2008 17:25:47 10/12/2008 17:25:47 Erreur envoye mailSystem.Net.Mail.SmtpException: Échec d'envoi du courrier. ---> System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
       à System.Net.Mail.Message.BeginSend(BaseWriter writer, Boolean sendEnvelope, AsyncCallback callback, Object state)
       à System.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)
       --- Fin de la trace de la pile d'exception interne ---
     
    Pour plus d'informations, consultez le centre Aide et support à l'adresse http://go.microsoft.com/fwlink/events.asp.
    Et la franchement je bloque je vois pas de quel objet il parle... :s

    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    En declarant ma methode sendcompletedcallback static je souleve l'exception suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Description*:
    Cree le 10/12/2008 17:29:34 10/12/2008 17:29:34 Erreur envoye mailSystem.Net.Mail.SmtpException: Échec d'envoi du courrier. ---> System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
       à System.Net.Mail.Message.BeginSend(BaseWriter writer, Boolean sendEnvelope, AsyncCallback callback, Object state)
       à System.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)
       --- Fin de la trace de la pile d'exception interne ---
     
    Pour plus d'informations, consultez le centre Aide et support à l'adresse http://go.microsoft.com/fwlink/events.asp.

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    tu as essayé en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      string userState = "test message1";
      client.SendAsync(message, userState);
    (cf : http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx )

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu n'as pas mis de destinataire principal (To), seulement des CC... ce serait pas pour ça ?

    Sinon, autre problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                if (e.Error != null)
                {
                    EnregistreEvenement monevent = new EnregistreEvenement();
                    monevent.EEecrire("Erreur envoye mail" + e.Error.ToString());
                }
                else
                {
                    EnregistreEvenement monevent = new EnregistreEvenement();
                    monevent.EEecrire("envoye mail" + e.Error.ToString());
                }
    Dans le else, e.Error est null, donc e.Error.ToString() plantera...


    EDIT: tu es sûr que Urlsmtp est bien défini ?

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Sinon il y a toujours la possibilité d'utiliser client.Send(message) mais dans un autre thread crée pour l'occasion ...

  6. #6
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut
    Merci pou votre aide.
    J'ai corrige les deux trois points donnees.
    Donc en fait apres test

    C'est mes copies (message.CC) qui font planter l'envoye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (string dest in Destinaires)
                {
                    message.CC.Add(dest);
     
                }

    J'ai essaye de faire ca
    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
        int position = 0;
                foreach (string dest in Destinaires)
                {
                    try
                    {
                        MailAddress monadress = new MailAddress(dest);
                        message.Bcc.Insert(position, monadress);
                        position++;
                        //message.CC.Add(monadress);
                        moneven2t.EEecrire(dest);
                    }
                    catch
                    {
                        moneven2t.EEecrire("Probleme avec l'adresse " +dest);
                    }
                }

    Mais ca ne marche pas mieux
    Des que je l'envele mon foreach par contre le mail est envoye...

Discussions similaires

  1. envoyer mail avec delphi
    Par Seb4657 dans le forum Composants VCL
    Réponses: 18
    Dernier message: 02/01/2006, 14h28
  2. Envoyer mail aux résultats d'une requête
    Par martonpylon12 dans le forum Access
    Réponses: 3
    Dernier message: 12/12/2005, 13h23
  3. Envoyer mail avec runtime access 2000
    Par Tierisa dans le forum Runtime
    Réponses: 7
    Dernier message: 07/11/2005, 18h10
  4. [VB6]envoyer mail en VBA
    Par ZeFarFaDeT dans le forum VBA Outlook
    Réponses: 9
    Dernier message: 26/02/2004, 13h36

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