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 :

Envoi d'un Email


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Envoi d'un Email
    Bonjour bonjour,

    Aujourd'hui je suis (encore...) en stage, et le problème d'aujourd'hui c'est de pouvoir envoyer un mail via un programme C#, je sens que je vais me faire hacher par 36 000 messages "recherche" (remarque sa attire du monde ) donc je rajoute tout de suite: j'ai trouvé un code qui defini une class que l'on peut utiliser pour envoyer des mails le problème etant que les mails envoyé sur mon post de travail arrive bien mais lorsque j'essai d'en envoyer sur mon hotmail ou sur ma messagerie privé ca ne FONCTIONNE PAS, j'ai une liste d'erreur grosse comme tout le code ci-dessous qui s'affiche dans la variable "Retour":
    Et hop voila pour les curieux :

    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
    using System;
    using System.Text;
    using System.Web.Mail;
    ...
     
    public class email
    	{
    		public email()
    		{
    		}
    		/// <summary>
    		/// Send Mail for User by SMTP
    		/// </summary>
    		/// <param name="Contenu">Mail Boby</param>
    		/// <param name="Subject">Mail subject</param>
    		/// <param name="MailTo">Mail to adress</param>
    		/// <param name="MailFrom">Mail from adress</param>
    		/// <param name="SMTPServer">SMTP Server to use</param>
    		/// <returns>Send Mail sent OK ou Error</returns>
    		public string SendMail(StringBuilder Contenu, string Subject, string MailTo, string MailFrom, string SMTPServer)
    		{
    			string Retour = string.Empty;
    			MailMessage msg = null;
    			Encoding MyEncoding = Encoding.GetEncoding("iso-8859-1");
    			try
    			{
    				msg = new MailMessage(); 
    				msg.Body = Contenu.ToString();
    				msg.BodyEncoding = MyEncoding;
    				msg.BodyFormat = MailFormat.Text;
    				msg.Subject = Subject; 
    				msg.From =MailFrom; 
    				msg.To = MailTo; 
    				SmtpMail.SmtpServer = SMTPServer; 
    				SmtpMail.Send(msg); 
    				Retour = "Mail sent to "+ MailTo;
    			}
    			catch(Exception ex)
    			{
    				Retour = "Error in Sendmail function - Details : "+ ex.ToString();
    			}
    			finally
    			{
    				msg = null;
    				MyEncoding = null;
    			}
    			return Retour;
    		}
     
    	}
    }
    L'encoding pourrai me poser problème car je ne connai pas les normes actuel d'encoding des mails mais je pense que quelque chose m'a echappé...

    hop: les grande lignes du message d'erreur:

    Could not access 'CDO.Message' object. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x8004020F): The server rejected one or more recipient addresses. The server response was: 550 5.7.1Unable to relay for MonTruc@SaTeRegardePas.fr
    Merci,

  2. #2
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Est tu sûr d'être sur le bon smpt ?
    As-tu un nom d'utilisateur et mot de passe pour le smtp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Smtp.Credentials = new NetworkCredential(User, Pwd);
    etc....

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Euuuu, le bon SMTP oui c'est le microsoft exchange de l'entreprise, après pour le User et Passwd il ne m'en demande jamais quand j'arrive sur Outlook, maintenant j'ai jamais utilisé de Microsoft Exchange donc peut être que le login SMTP se fait par le login Windows ? ENfin je vais essayer comme sa je serait fixé merci

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Bon sa fonction, j'ai utilisé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smtp.UseDefaultCredentials = true;
    Mais maintenant le problème c'est que ces info sont envoyé en claire et j'ai bien esssayé de faire
    mais j'ai un beau message du server "MOI PAS SUPPORTER SSL"

    Zut alors...

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Vraiment personne ne saurait comment faire pour que l'envoi soit sécurisé ?

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Je crois me souvenir qu'il vaut mieux utiliser l'espace de nom System.Net.mail (http://msdn.microsoft.com/fr-fr/libr....net.mail.aspx) plutôt que System.Web.mail.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Oui je sais lorsque j'ai écri le premier poste je travaillais encore sous VS .NET 2002 et Net.Mail n'existai pas dessus...
    Depuis je suis sous 2008 Express j'ai donc mise à jour le code:
    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
    public string SendMail(StringBuilder Contenu, string Subject, string MailTo, string MailFrom, string SMTPServer, int PortServer)
    {
             string Retour = string.Empty;
    			MailMessage msg = null;
    			Encoding MyEncoding = Encoding.GetEncoding("iso-8859-1");
                try
                {
                    msg = new MailMessage(MailFrom, MailTo);
                    msg.Body = Contenu.ToString();
                    msg.BodyEncoding = MyEncoding;
                    msg.IsBodyHtml = false;
                    msg.Subject = Subject;
                    SmtpClient smtp = new SmtpClient(SMTPServer, PortServer);
                    smtp.UseDefaultCredentials = true;
                    smtp.Send(msg);
                    Retour = "Mail sent to " + MailTo;
                }
                catch (Exception ex)
                {
                    Retour = "Error in Sendmail function - Details : " + ex.ToString();
                }
                finally
                {
                    msg = null;
                    MyEncoding = null;
                }
                return Retour;
            }

  8. #8
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Si tu veux t'authentifier réellement, et non par défaut, met la propriété UseDefaultCredentials à false et renseigne la propriété Credentials à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("login", "password");
    emailClient.UseDefaultCredentials = false;
    emailClient.Credentials = SMTPUserInfo;
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    En partique qu'est ce que cela change de s'authentifier réellement, et non par défaut ?

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    A, zut nouveau problème:
    je vien de remarquer que le programme n'envoi pas les messages directements mais un peut n'importe quand ou alors quand on ferme l'application, j'en conclu que les msg ne sont envoyé que lorsque le ramasse miette passe et détruit les objets non utilisé... Mais pourquoi...

    Je tourne en rond j'ai déjà essayé de mettre mon objet "smtp" à la valeur null ou encore de mettre:

    ou encore d'enlever/remettre les try/catch/finally dans tout les sens mais rien ne change ! Aidez moi SVP je ne vois pas d'ou sa vien...

  11. #11
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    je vien de remarquer que le programme n'envoi pas les messages directements mais un peut n'importe quand ou alors quand on ferme l'application, j'en conclu que les msg ne sont envoyé que lorsque le ramasse miette passe et détruit les objets non utilisé... Mais pourquoi...
    Je suis un peu étonné...
    Le code suivant fonctionne parfaitement... Bien sûr, les paramètres client smtp peuvent être différents suivant les serveurs...
    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
     
    using System.Net.Mail;
    using System.Net;
     
    private void button2_Click(object sender, EventArgs e)
        {
          MailMessage Mail;
          SmtpClient Smtp;
     
          Smtp = new SmtpClient("monserveursmtp.com", 25);
          Smtp.Credentials = new NetworkCredential("patate@parmentier.com", "abcd12345");
          Mail = new MailMessage("patate@parmentier.com", "patate@parmentier.com", "coucou", "coucou");
          Smtp.Send(Mail);
          Mail.Dispose();
        }
    Mais avec ou sans le Mail.Dispose() ça ne change rien...

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Bonjour ppphil,
    Je suis egalement étonné, en tout cas on ne peut pas vraiment dire que le problème vienne du programme car même ton bout de code envoi les mail en retard sur ma machine, peut être est-ce en effet un problème de client/server SMTP ou encore un problème venant de Symantec EMail Scanner, je vais chercher dans ces directions...

Discussions similaires

  1. Envoi d'un email sans passer par outlook
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/12/2005, 19h23
  2. envoi automatique d'email
    Par zorba49 dans le forum ASP
    Réponses: 3
    Dernier message: 20/12/2005, 13h43
  3. Envoi Formulaire par Email, la soupe...!
    Par ni31x dans le forum Langage
    Réponses: 14
    Dernier message: 19/12/2005, 22h04
  4. envoi automatique d'email
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/12/2005, 15h39
  5. Envoie de l'email par le composant TIdSMTP
    Par C-H-A-P-L-A-S-T dans le forum Composants VCL
    Réponses: 23
    Dernier message: 01/12/2005, 08h38

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