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 :

Envois de mail avec ou sans smtp ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Par défaut Envois de mail avec ou sans smtp ?
    Bonjour à tous,

    j'utilise un petit bout de code pour envoyer mes e-mail en vb.net, il fonctionne très bien des l'instant ou j'ai le serveur smtp correspondant à mon FAI.

    Ce que j'aimerais que vous me disiez c'est comment envoyer un email sans avoir besoin d'utiliser un smtp ou bien comment faire pour trouver le bon smtp correspondant à mon fai par la programmation.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Dim Mail As New Net.Mail.MailMessage("adresse@exemple.com", "adresse@exemple.com", "Sujet", "Body")
            Dim MailSender As New Net.Mail.SmtpClient("smtp.exemple.fr")
            Try
                MailSender.Send(Mail)
            Catch exception As Exception
                MsgBox(exception.Message)
            End Try
    Asser simple comme vous pouvez le voir.

    Merci d'avance, cordialement,

    AliHome

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    seul un serveur smtp peut envoyer des mails, il est par contre possible que tu en installe un, windows server doit le faire par exemple, comme ca il sera disponible de n'importe où

    parce que ceux des FAI n'accepte qu'on leur parle que si on est connecté sur leur réseau

    sinon il est peut etre possible que tu détecte sur quel réseau tu es et que tu ais une liste de smtp selon le FAI
    par exemple en faisant un traceroute vers google sur un réseau orange, on voit le nom des routeurs avec écrit wanadoo ou proxad pour free ...
    m'enfin faudrait trouver une méthode mieux pour déterminer ca
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Par défaut
    Merci à toi c'est ce que je voulais savoir.

    Donc maintenant reste à trouver la méthode pour connaitre le FAI de l'utilisateur du logiciel.


    Sinon j'ai essayé quelque chose d'un peu plos "grossier", en fait j'ai fais une liste avec les principales adresse smtp des FAI comme smtp.free.fr ou smtp.neuf.fr .

    Ensuite j'ai fais une boucle For Each smtp qui essaye d'envoyer l'email pour chaque smtp (j'ai utiliser le block try catch), sauf que si le smtp n'est pas le bon il met le message d'echec d'envois et quitte la boucle !

    Méthode inéfficace donc et lente en plus de ca ...

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    pour trouver le smtp, tu peux tenter par socket une connexion, ca ira peut etre plus vite, mais en effet j'avais pas penser que c'était plus simple de les appeler tous pour voir ceux qui répondent

    je viens de tester par socket via telnet (enfin c'est facile à implémenter en .net)
    j'ai tenté d'établir une connexion sur mon fai et un autre, l'un ma jeté et l'autre m'a accepté et c'est instantanné
    faut voir la rfc smtp (google) pour trouver quoi envoyer au serveur et ce qu'il doit répondre et si t'y arrives pas je pourrais peut etre te trouver le code complete qui va bien)

    tu peux peut etre aussi réduire le timeout d'envoir de mail via le framework

    et sinon au premier démarrage de l'appli tu peux boucler pour trouver le smtp à utiliser et le sauvegarder, comme ca tu le fait qu'une fois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Par défaut
    Oui si ca ne te dérange pas de me passer le code que tu as utilisé car je n'ai que tres peu de connaissance dans ce domaine. Merci à toi !

    tu peux peut etre aussi réduire le timeout d'envoir de mail via le framework
    Oui je peux mais comme je te l'ai dit il sors de la boucle tout seul donc ca ne changerais pas grand chose !

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    s'il sort de la boucle parce qu'il y a une erreur, il suffit de mettre un try catch dans la boucle pour qu'il continue !

    et le code je l'ai pas fait, j'ai juste tester avec telnet (programme fourni avec windows qui permet de dialoguer en tcp/ip en écrivant les commandes)
    m'enfin je vais essayer d'y faire pour demain
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Par défaut
    Bon je me suis penché à nouveau dessus et j'ai résolu le problème de cast.

    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
     Public Function SMTPIsAvailable(ByVal smtp As String, Optional ByVal port As Integer = 25) As Boolean
            Try
                Dim tcp As New System.Net.Sockets.TcpClient
                tcp.Connect(smtp, port)
     
                If tcp.Connected Then
                    Dim b() As Byte
                    b = System.Text.Encoding.ASCII.GetBytes("EHLO test.com" & vbCrLf)
                    tcp.GetStream.Write(b, 0, b.Length)
     
                    Dim reponse As String = Nothing
                    Dim chrono As New System.Diagnostics.Stopwatch
                    chrono.Start()
     
                    While chrono.ElapsedMilliseconds < 800
                        If tcp.Available = 0 Then Continue While
                        Dim r(0) As Byte
                        tcp.GetStream.Read(r, 0, 1)
                        reponse &= Chr(r(0))
                    End While
     
                    If reponse Like ("220*") Then
                        tcp.Close()
                        tcp = Nothing
                        Return True
                    Else
                        Return False
                    End If
                Else
                    tcp.Close()
                    tcp = Nothing
                    Return False
                End If
     
            Catch ex As Exception
                Return False
            End Try
        End Function
    Sauf que... La plupart des smtp me renvois "220..." donc le test est mauvais ! Avant ça ne le faisait pas, si quelqu'un à une idée de pourquoi je suis à l'écoute !

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Sinon en dernier recours, il y a aussi la solution qui consiste à afficher une petite boite de dialogue demandant à l'utilisateur d'introduire l'adresse (et sauvegarder la valeur dans un fichier de config).

    Ne pas oublier que parfois le serveur de mail demande une identification aussi pour l'envoi de mail!

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/02/2014, 11h19
  2. [SHELL] envoi de mail avec smtp et piece jointe
    Par pitiperchistes dans le forum Linux
    Réponses: 4
    Dernier message: 04/04/2009, 17h12
  3. Problème pour l'envoi de mails avec le SMTP de GMail
    Par BigWill dans le forum ASP.NET
    Réponses: 12
    Dernier message: 24/01/2008, 02h16
  4. [C#] Problème d'envoi de mail avec SMTP local
    Par bossun dans le forum ASP.NET
    Réponses: 10
    Dernier message: 27/02/2006, 11h04
  5. Envoi de mail avec pièce attachée par SMTP
    Par yess78 dans le forum IIS
    Réponses: 4
    Dernier message: 09/12/2005, 13h33

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