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

VB.NET Discussion :

Envoyer un mail avec objet et pièce-jointe en cliquant sur une adresse mail dans une DataGridView [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut Envoyer un mail avec objet et pièce-jointe en cliquant sur une adresse mail dans une DataGridView
    Bonjour à tous,
    J'ai créé une petite appli en VB 2010 express utilisant une BDD SQL Server 2008 R2.
    J'utilise une DataGridView pour afficher la liste de mes contacts et l'un des champs contient les adresses mail.
    Pour l'instant ce que j'ai réussi à faire c'est d'appeler l'ouverture d'Outlook (configuré par défaut sur mon PC) en cliquant sur une adresse de ma DataGridView, en voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub DataGridViewContacts_CellMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridViewContacts.CellMouseClick
            Try
                If DataGridViewContacts.CurrentCellAddress.X = 16 Then
                    Dim Lien As String
                    Lien = DataGridViewContacts.CurrentCell.Value
                    System.Diagnostics.Process.Start("mailto:" & Lien)
                End If
            Catch ex As Exception
            End Try
        End Sub
    Pour aller plus loin, je souhaiterais :
    Mettre automatiquement un texte dans la ligne Objet de mon mail
    Attacher automatiquement une pièce jointe
    Insérer automatiquement un texte dans le corps du mail

    Question complémentaire : comment mettre automatiquement une adresse mail en CC ou CCI en plus de l'adresse mail en A ?

    Merci pour votre aide

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut Une piste
    Ci-joint, le fichier MailAGogo.pdf. C'est un extrait de code. L'application qui exécute ce code présente des ListBox contenant les noms (email valides) des expéditeurs et des destinataires possibles. Le mail est envoyé par les expéditeurs sélectionnés aux destinataires également sélectionnés.
    Par ailleurs, le nom du serveur de messagerie doit être sélectionné dans la ComboBox CBServeur.
    Enfin, le message est ici le text d'une RichTextBox RTBMessage et le mail, fianlement, est l'objet Mail du type MailMessage.
    L'objet Mail possède bien d'autres membres que ceux utilisés dans cet exemple. En fouillant un peu, tu trouveras de quoi répondre à toutes tes questions
    Attention, Imports System.Net.Mail requis.
    Bon amusement,

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Ci-joint, le fichier MailAGogo.pdf. C'est un extrait de code. L'application qui exécute ce code présente des ListBox contenant les noms (email valides) des expéditeurs et des destinataires possibles. Le mail est envoyé par les expéditeurs sélectionnés aux destinataires également sélectionnés.
    Par ailleurs, le nom du serveur de messagerie doit être sélectionné dans la ComboBox CBServeur.
    Enfin, le message est ici le text d'une RichTextBox RTBMessage et le mail, fianlement, est l'objet Mail du type MailMessage.
    L'objet Mail possède bien d'autres membres que ceux utilisés dans cet exemple. En fouillant un peu, tu trouveras de quoi répondre à toutes tes questions
    Attention, Imports System.Net.Mail requis.
    Bon amusement,
    Bonjour et merci pour ta contribution mais je vois une explication du débogage, ce que je sais faire, mais pas du fichier MailAGogo.pdf dont tu parles ...

  5. #5
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut MailAGogo.pdf annexé.
    Pardon, je me suis trompé d'attachement et j'ai envoyé Extrait.pdf au lieu de MailAGogo.pdf.
    Je joins donc MailAGogo.pdf à ce message et, à toutes fins utiles, j'en copie l'essentiel ci-dessous.
    Si tu ne reçois encore le bon fichier, je te l'enverrai directement sur l'email que tu me communiqueras.
    Bon travail,
    ...

    I
    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
    mports System.Net.Mail	
    Imports System.Text
    ...
      Private Sub BEnvoi_Click(ByVal sender As Object, ByVal e As System.EventArgs)
     Handles BEnvoi.Click
        Dim Mail As MailMessage
        Dim smtp As SmtpClient
        Dim Expediteur As String
        Dim Destinataire As String
        Try
          smtp = New SmtpClient(CBServeur.Text) 					' Le serveur SMTP
          For Exp As Integer = 0 To LBExpediteurs.SelectedIndices.Count - 1
            For Des As Integer = 0 To LBDestinataires.SelectedIndices.Count - 1
              Mail = New MailMessage
              Mail.SubjectEncoding = UTF8Encoding.UTF8 				' L'objet
              Mail.Subject = TObjet.Text 
              Mail.BodyEncoding = UTF8Encoding.UTF8 				' Le message
              Mail.Body = RTBMessage.Text 
              Expediteur = LBExpediteurs.Items(LBExpediteurs.SelectedIndices(Exp))
              Mail.From = New MailAddress(Expediteur)
              Destinataire = LBDestinataires.Items(LBDestinataires.SelectedIndices(Des))
              Mail.To.Add(New MailAddress(Destinataire))
              smtp.Send(Mail) 								' Envoi
              Mail.Dispose()
            Next Des
          Next Exp
        Catch ex As ApplicationException
          MessageBox.Show(ex.Message)
        Finally
          smtp = Nothing
          Try						' Libérer la mémoire dans un Try car si le message
            Mail.Dispose()				' s’est bien passé, c’est déjà chose faite.
          Catch
          End Try
          Mail = Nothing
        End Try
     
      End Sub

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Merci encore Phil Rob je vais essayer ça, cette fois-ci j'ai reçu le bon fichier. Néanmoins je m'interroge déjà sur le résultat car il semble que ta solution envoie automatiquement le mail sans ouvrir le client mail par défaut et donc sans possibilité de contrôle ou d'ajout éventuel (contrairement à la méthode mailto: ), sans conservation aussi du mail dans les éléments envoyés.

    En utilisant la méthode mailto: j'ai résolu tous les autres points à l'exception de la pièce-jointe, voici mon code qui fonctionne :
    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
     
    Try
                    Dim A As String
                    Dim Subject As String
                    Dim Body As String
                    Dim Cci As String
     
                    A = DataGridViewContacts("Email", NumLigneDataGridContacts).Value
                    Subject = "Document"
                    Body = "Bonjour," & vbNewLine & "Je vous prie de trouver en pièce-jointe le document à consulter." & vbNewLine & "Cordialement." & vbNewLine & Trim(NomExpéditeur)
                    Cci = EmailExpéditeur
     
                    'System.Uri.EscapeDataString permet de transformer vbNewLine dans un mail en HTML
     
                    System.Diagnostics.Process.Start("mailto:" & A + "?subject=" + Subject + "&bcc=" + Cci + "&body=" + System.Uri.EscapeDataString(Body))
     
                Catch ex As Exception
                End Try
    Ce code ne fonctionne pas, j'ai bien tout le reste mais pas la pièce-jointe :

    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
     
    Try
                    Dim A As String
                    Dim Subject As String
                    Dim Body As String
                    Dim Cci As String
     
                    A = DataGridViewContacts("Email", NumLigneDataGridContacts).Value
                    Subject = "Document"
                    Body = "Bonjour," & vbNewLine & "Je vous prie de trouver en pièce-jointe le document à consulter." & vbNewLine & "Cordialement." & vbNewLine & Trim(NomExpéditeur)
                    Cci = EmailExpéditeur
     
                    'System.Uri.EscapeDataString permet de transformer vbNewLine dans un mail en HTML
     
                    System.Diagnostics.Process.Start("mailto:" & A + "?subject=" + Subject + "&bcc=" + Cci + "&body=" + System.Uri.EscapeDataString(Body) + "&Attach=" + folderPath + "Document.pdf")
     
                Catch ex As Exception
                End Try

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Très bien si tu résouds ton problème avec mailto : pour cela tu dois faire une liaison à Outlook. L'application ne fonctionnera donc pas là où il n'y pas d'Office installé. Et pour Outlook, je n'ai pas de solution dans mes cartons.
    Pour ma part, ça ne me convient guère et je crois qu'une instance de MailMessage vaut mieux (Mail = New MailMessage). Bien sûr, il faut tout programmer soi-même ...,

    Comme je l'indiquais dans mon premier mail, cet objet Mail possède bien d'autres membres que ceux utilisés dans mon exemple. En fouillant un peu, tu trouveras de quoi répondre à toutes tes questions, mais il faut fouiller. Par exemple, un test vite fait me met sur la piste de l'attachement (Mail.Attachements.Add ... ), vois l'illustration ci-jointe.

    Désolé de ne pouvoir t'aider davantage.

    Pièce jointe 408611

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Ne sois pas désolé Phil ta contribution m'a été précieuse et elle m'a donné des idées pour une autre application.
    Merci pour tout

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par Phil Rob Voir le message

    Désolé de ne pouvoir t'aider davantage.
    Bonjour Phil,
    Finalement je me suis rangé à tes conseils ne trouvant nulle part la solution avec mailto:
    Voilà le mon nouveau 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Dim Mail As MailMessage
                Dim smtp As SmtpClient
                Dim NomExpéditeur as string
                Dim MailExpediteur As String
                Dim MailDestinataire As String
                Dim CBServeur As String
                Dim Compte As String
                Dim PassWord As String
                CBServeur = "ssl0.ovh.net"
                Compte = "expediteur@domaine.com"
                PassWord = "AZERTY"
                NomExpéditeur = "Prénom NOM"
                MailExpediteur = "expediteur@domaine.com"
                MailDestinataire = DataGridViewContacts("Email", NumLigneDataGridViewContacts).Value
                Mail = New MailMessage
                Try
                    smtp = New SmtpClient(CBServeur) ' Le serveur SMTP
                    smtp.Credentials.GetCredential(Compte, 465, PassWord)
                    smtp.EnableSsl = True
     
                    Dim attachedFile As Net.Mail.Attachment = New Net.Mail.Attachment(folderPath + "Document.pdf")
                    Mail.Attachments.Add(attachedFile)
                    Mail.SubjectEncoding = UTF8Encoding.UTF8 ' L'objet
                    Mail.Subject = "Document"
                    Mail.BodyEncoding = UTF8Encoding.UTF8 ' Le message
                    Mail.Body = "Bonjour," & vbNewLine & "Je vous prie de prendre connaissance du document en pièce-jointe." & vbNewLine & "Cordialement." & vbNewLine & Trim(NomExpéditeur)
                    Mail.From = New MailAddress(MailExpediteur)
                    Mail.To.Add(New MailAddress(MailDestinataire))
                    smtp.Send(Mail) ' Envoi
                    Mail.Dispose()
     
                Catch ex As ApplicationException
                    MessageBox.Show(ex.Message)
                Finally
                    smtp = Nothing
                    Try ' Libérer la mémoire dans un Try car si le message
                        Mail.Dispose() ' s’est bien passé, c’est déjà chose faite.
                    Catch
                    End Try
                    Mail = Nothing
                End Try
    Problème j'obtiens un message d'erreur à l'exécution de cette ligne où je voulais renseigner l’authentification du serveur smtp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    smtp.Credentials.GetCredential(Compte, 465, PSW)
    Pourrais-tu m'aider car là je sèche !
    Merci encore

  10. #10
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Je n'aurai pas le temps de faire des tests avant jeudi, mais ce ne sera peut-être pas nécessaire.

    Désignes-tu bien le bon serveur smtp : il doit s'agir du serveur qui te permets ordinairement, sur ton ordi, de gérer tes mails. Il s'agit généralement de ton fournisseur d'accès internet. Je ne crois pas que OVH soit le serveur à désigner là.

    De cette manière, il n'est pas nécessaire de préciser les 3 tris lignes suivantes puisque c'est déjà réglé sur ton PC, sinon ta messagerie ne fonctionnerait pas correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    smtp = New SmtpClient(CBServeur) ' Le serveur SMTP
                    smtp.Credentials.GetCredential(Compte, 465, PassWord)
                    smtp.EnableSsl = True
    Ci-joint, une illustration de ma configuration, telle qu'Outlook me la montre. Chez moi, le serveur smtp pour le programme VB est relay.proximus.be (en Belgique, on trouve du skynet.be, du belgacom.net et du proximus.be : il s'agit toujours de la principale entreprise de téléphonie et internet nommée aujourd'hui Proximus).

    Pièce jointe 409077

  11. #11
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    oui c'est bien le smtp d'OVH que j'utilise mon adresse mail est fournie par OVH, je n'utilise pas mon FAI pour ça.
    J'ai repris exactement les paramètres d'Outlook qui fonctionnenent parfaitement avec ce logiciel.
    Par ailleurs je suis souvent en déplacement à l'étranger, du coup il me faut renseigner l'authentification smtp pour pouvoir envoyer mes mails

    Si je supprime les lignes que tu indiques j'obtiens le message d'erreur : "Service non disponible, fermeture du canal de transmission. La réponse du serveur était : Cannot connect to SMTP server 193.70.18.144 (193.70.18.144:25), connect error 10060"

  12. #12
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Attention, il faut conserver la ligne (sorry, j'aurais pas dû la placer dans le mail précédent):
    smtp = New SmtpClient(CBServeur) ' Le serveur SMTP

    Tu as reçu mon code et il fonctionne avec cette ligne et sans les deux suivantes.
    Ton code doit aussi fonctionner avec cette seule ligne pour instancier le smtp. Ce serait un bon départ. Il sera encore temps de s'intéresser à l'authentification ensuite. De plus, je pense que si on configure la connexion dans le code, il faudra régler aussi ses autres paramètres, notamment le port utilisé.

    Si ce code suivant fonctionne, je testerai les lignes d'authentification chez moi mais cela, ce sera jeudi au meilleur cas.

    Bon travail ...

    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
    '..................
    CBServeur = "ssl0.ovh.net"
                ' **** ' Compte = "expediteur@domaine.com"
                ' **** ' PassWord = "AZERTY"
                ' **** ' NomExpéditeur = "Prénom NOM"
                MailExpediteur = "expediteur@domaine.com"
                MailDestinataire = DataGridViewContacts("Email", NumLigneDataGridViewContacts).Value
                Mail = New MailMessage
                Try
                    smtp = New SmtpClient(CBServeur) ' Le serveur SMTP
                   ' **** ' smtp.Credentials.GetCredential(Compte, 465, PassWord)
                   ' **** ' smtp.EnableSsl = True
     
                    Dim attachedFile As Net.Mail.Attachment = New Net.Mail.Attachment(folderPath + "Document.pdf")
                    Mail.Attachments.Add(attachedFile)
                    Mail.SubjectEncoding = UTF8Encoding.UTF8 ' L'objet
                    Mail.Subject = "Document"
                    Mail.BodyEncoding = UTF8Encoding.UTF8 ' Le message
    '..................

  13. #13
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    oui j'avais bien vu l'erreur sur ton post précédent et j'avais conservé la ligne smtp = New SmtpClient(CBServeur) ' Le serveur SMTP
    Mais justement ça ne fonctionne pas si je supprime les deux lignes suivantes et j'obtiens le message d'erreur "Service non disponible, fermeture du canal de transmission. La réponse du serveur était : Cannot connect to SMTP server 193.70.18.144 (193.70.18.144:25), connect error 10060"
    Mais je suis en Asie là, pas chez moi !
    C'est d'ailleurs la même chose si je supprime l'authentification du serveur smtp dans Outlook, je ne peux plus rien envoyer
    Je pense qu'effectivement si on a une adresse mail chez son FAI ET qu'on se connecte à Internet avec ce FAI l'authentification n'est pas nécessaire mais dans les autres cas ça me semble indispensable

  14. #14
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Bonjour Phil,
    Avec le décalage horaire je suis déjà au travail alors que tu es toujours dans les bras de Morphée
    Pour identifier avec certitude le problème j'ai créé une adresse mail chez mon FAI dans le format expéditeur@free.fr (smtp.free.fr) que j'ai ensuite renseignée dans le code en supprimant les lignes d'authentification. Ensuite je me suis connecté chez moi en VPN pour faire transiter le flux par mon FAI et là ça fonctionne parfaitement.
    Voici le code qui fonctionne en passant par un VPN :
    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
     
    Dim Mail As MailMessage
                Dim smtp As SmtpClient
                Dim Expediteur As String
                Dim Destinataire As String
                Dim CBServeur As String
                CBServeur = "smtp.free.fr"
                Expediteur = "expediteur@free.fr"
                Destinataire = DataGridViewContacts("Email", NumLigneDataGridViewContacts).Value
                Mail = New MailMessage
                Try
                    smtp = New SmtpClient(CBServeur) ' Le serveur SMTP
     
                    Dim attachedFile As Net.Mail.Attachment = New Net.Mail.Attachment(folderPath + "Document.pdf")
                    Mail.Attachments.Add(attachedFile)
                    Mail.SubjectEncoding = UTF8Encoding.UTF8 ' L'objet
                    Mail.Subject = "Document"
                    Mail.BodyEncoding = UTF8Encoding.UTF8 ' Le message
                    Mail.Body = "Bonjour," & vbNewLine & "Je vous prie de prendre connaissance du document en pièce-jointe." & vbNewLine & "Cordialement." & vbNewLine & Trim(NomPropriétaire)
                    Mail.From = New MailAddress(Expediteur)
                    Mail.To.Add(New MailAddress(Destinataire))
                    smtp.Send(Mail) ' Envoi
                    Mail.Dispose()
     
                Catch ex As ApplicationException
                    MessageBox.Show(ex.Message)
                Finally
                    smtp = Nothing
                    Try ' Libérer la mémoire dans un Try car si le message
                        Mail.Dispose() ' s’est bien passé, c’est déjà chose faite.
                    Catch
                    End Try
                    Mail = Nothing
                End Try
    Donc il s'agit bien d'un problème d'authentification lorsqu'on utilise un FAI tiers ou bien une adresse mail non hébergée chez son FAI, pour moi en ce moment c'est les deux à la fois car mon adresse mail officielle est hébergée par OVH et j'utilise une connexion Internet en Asie. Je pourrais bien sûr utiliser tout le temps l'adresse mail que j'ai configurée chez mon FAI et lancer une connexion VPN à chaque fois que je veux envoyer un mail à partir de mon programme VB.NET mais c'est pénible et parfois les FAI étrangers n'acceptent pas le VPN.
    Il me faut donc identifier le problème d'authentification et à mon sens je dois commettre une ou plusieurs erreurs de syntaxe.

    Ce code ne fonctionne pas que je passe par le FAI local ou par VPN sur le réseau free.fr. J'obtiens le message "Le délai d'attente de l'opération a expiré." Je précise que j'ai bien activé l'option smtp authentifié chez mon FAI et que j'ai bien vérifié le compte et le password
    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
     
    Dim Mail As MailMessage
                Dim smtp As SmtpClient
                Dim Expediteur As String
                Dim Destinataire As String
                Dim CBServeur As String
                Dim Compte As String
                Dim PassWord As String
                CBServeur = "smtp.free.fr"
                Compte =  "expediteur@free.fr"
                PassWord = "AZERTY"
                Expediteur = "expediteur@free.fr"
                Destinataire = DataGridViewContacts("Email", NumLigneDataGridViewContacts).Value
                Mail = New MailMessage
                Try
                    smtp = New SmtpClient(CBServeur) ' Le serveur SMTP
                    smtp.Port = 465
                    smtp.Credentials = New Net.NetworkCredential(Compte, PassWord)
                    smtp.UseDefaultCredentials = False
                    smtp.EnableSsl = True
     
                    Dim attachedFile As Net.Mail.Attachment = New Net.Mail.Attachment(folderPath + "Document.pdf")
                    Mail.Attachments.Add(attachedFile)
                    Mail.SubjectEncoding = UTF8Encoding.UTF8 ' L'objet
                    Mail.Subject = "Document"
                    Mail.BodyEncoding = UTF8Encoding.UTF8 ' Le message
                    Mail.Body = "Bonjour," & vbNewLine & "Je vous prie de prendre connaissance du document en pièce-jointe." & vbNewLine & "Cordialement." & vbNewLine & Trim(NomPropriétaire)
                    Mail.From = New MailAddress(Expediteur)
                    Mail.To.Add(New MailAddress(Destinataire))
                    smtp.Send(Mail) ' Envoi
                    Mail.Dispose()
     
                Catch ex As ApplicationException
                    MessageBox.Show(ex.Message)
                Finally
                    smtp = Nothing
                    Try ' Libérer la mémoire dans un Try car si le message
                        Mail.Dispose() ' s’est bien passé, c’est déjà chose faite.
                    Catch
                    End Try
                    Mail = Nothing
                End Try

  15. #15
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77

  16. #16
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Merci pour le feedback.



    La citation :
    Hâtez-vous lentement, et sans perdre courage,
    Vingt fois sur le métier remettez votre ouvrage …
    Nicolas Boileau (1674)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Envoyer depuis Access un mail avec ou sans pièce jointes
    Par ChrisCaz dans le forum VBA Access
    Réponses: 13
    Dernier message: 30/11/2016, 20h39
  2. [Joomla!] Chronoforms : comment envoyer un e-mail avec ou sans pièce jointe ?
    Par NEfanda dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 03/01/2012, 17h58
  3. [AC-2007] Envoi Mail avec Outlook et pièce jointe
    Par fbu78 dans le forum VBA Access
    Réponses: 10
    Dernier message: 14/01/2010, 23h29
  4. [javamail] envoi mail avec message en pièce jointe
    Par k4eve dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/11/2007, 11h17
  5. Envoi d'un mail avec fichier en pièce jointe
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 16h30

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