none
Envoyer un message avec une pièce jointe à partir d'une page aspx avec code sur la page aspx.vb

    Discussion générale

  •  Bonjour,

    Comment faire pour attacher une pièce jointe à un formulaire de renseignements en asp.net, en code vb, et avec un contrôle FileUpload .

    J'ai établi un formulaire de recueil des informations telles que le nom, prénom , adresse, numéro de téléphone, email et une textBox multiligne , pour recueillir les informations.

    Jusqu'ici avec la variable MailMessage et SendMail , tout va bien.

    Le message est envoyé sans erreur et est stocké sur le WebMail de mon Hébergeur.

    Du coup j'ai ajouté à mon formulaire un contrôle FileUpLoad, muni de son bouton Parcourir, afin de permettre aux visiteurs d'envoyer, s'ils le souhaitent, une pièce jointe.

    Dans tous les forum où j'ai posé la question, les réponses étaient pratiquement que celle-ci:

    il faut ajouter " MessageAttachment " , et c'est tout !...

    D'accord cela je le sais, mais comment faire, justement pour que la pièce jointe parte avec le message ?

    Pouvez-vous avoir l'amabilité de me fournir la procédure exacte qui me permettra d'attacher une pièce jointe à mon message

    Merci d'avance pour vos réponses, pour ce sujet qui est récurrent dans tous les forums, mais pour lequel, on ne trouve à ce jour, sauf erreur de ma part, aucune conduite à tenir fiable et complète


    mercredi 30 janvier 2013 16:19

Toutes les réponses

  • bref si j'ai bien compris , tu fait bien les instruction suivante :

    Dim oAttch As MailAttachment = New MailAttachment("C:\monfichier.zip") 
    oMsg.Attachments.Add(oAttch) 
    SmtpMail.Send(oMsg)

    En revanche sur ton serveur tu ne trouve pas les pièces jointe.

    la première chose a vérifier si les service SMTP des deux coté accepte l'envoi et la réception des pièces jointes. 

    mercredi 30 janvier 2013 16:37
  • bref si j'ai bien compris , tu fait bien les instruction suivante :

    Dim oAttch As MailAttachment = New MailAttachment("C:\monfichier.zip") 
    oMsg.Attachments.Add(oAttch) 
    SmtpMail.Send(oMsg)

    En revanche sur ton serveur tu ne trouve pas les pièces jointe.

    la première chose a vérifier si les service SMTP des deux coté accepte l'envoi et la réception des pièces jointes. 

    Oui, d'accord. Sauf qu'il y a un contrôle aspx sur la page, et ce contrôle ( FileUpLoad) est chargé non seulement de récupérer le chemin du fichier ( Comme un OpenFileDialog dans un WinForm), puis de le sauvegarder (comme dans un SaveFileDialog dans un Winform), avant de le transmettre.

    Donc, je pense qu'il faut explicitement déclarer une variable avec un .FileName , puis sauvegarder avec une autre ligne du style SaveAs

    En plus il faut indiquer la racine du serveur de départ, c'est-à dire mon disque dur par l'intermédiaire du contrôle FileUpload, puis d'indiquer Indiquer le serveur de reception du style peut-être Server.MapPath("~\")

    Ce n'est pas aussi simple qu'on ne le pense, l'attachement d'une pièce jointe.

    Bien sûr c'est plus facile si c'était un Winform.

    Ici C'est une Page .aspx ( System.Web.UI.Page)

    Merci d'avoir essayé.

    Oui , mon serveur (WebMail) accepte l’enregistrement des pièces jointes attachées au message.

    mercredi 30 janvier 2013 19:37
  • il faut aussi donner l'autorisation a IIS en lecture/ecriture sur le dossier de l'upload 
    mercredi 30 janvier 2013 21:16
  •  > Donc, je pense qu'il faut explicitement déclarer une variable avec un
     > .FileName , puis sauvegarder avec une autre ligne du style SaveAs
     
    Probablement pas nécessaire.
    Le constructeur d'Attachment ainsi que le contrôle FileUpload disposent
    de propriétés de type Stream.
     

    Fred
    jeudi 31 janvier 2013 12:20
  • Bonjour,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 31 janvier 2013 13:11
    Propriétaire
  • J'ai inclus ce code dans mon formulaire d'envoi comme  ci -dessous

    Le ccors du mesage avec ou sans pièce jointe , n'arrive pas sur le serveur.

    Par contre dès que j'enlève le code la pièce jointe, le message arrrive sur le serveur.

    Voci le code complet, le mien et celui de DaliMahirbi

     Imports System.Net.Mail
    Imports System.Web.Mail
    Protected Sub btnEnvoyer_Click(sender As Object, e As System.EventArgs) Handles btnEnvoyer.Click
            Me.Validate()
            If Me.IsValid Then
                Try
                    Dim message As New MailMessage("mondomaine@free.fr", "contact@mondomaine.fr")
                   message.Subject = "[Mon domaine.fr ] Contact"
                    message.Body = "[Contact Transmis Mon domaine.Fr]" _
                       &  txtObjet.Text _
                       & vbCr  &  txtNom.Text.ToUpper _
                     &  txtPrenom.Text _
                      & dplAge.Text _
                       & vbCr &  dplCivilite.Text _
                        & vbCr & txtMail.Text _
                         & vbCr  & txtTel.Text _
                         & vbCr & lblCP.Text & txtCP.Text _
                           & vbCr &  txtVille.Text _
                           & vbCr  & txtAdresse _
                             & vbCr & txtCommentaire.Text
                 
    		 ' le code de la pièce jointe, et vous tous m'aviez gracieusement offert et je vous en remercie
    	         Dim oAttch As MailAttachment = New MailAttachment("C:\monfichier.zip") 
    	         oMsg.Attachments.Add(oAttch) 
    	
                 
                    'Envoi du message et envoi simultané de la pièce jointe (bien sûr j'ai placé un fichier nommémonficheier.zip à la racine du disque C
                    Dim smtp As New SmtpClient
                    Me.PnlConfirmation.Controls.Add(New LiteralControl(smtp.Host))
                    smtp.Host = "localhost"
                    smtp.Send(message)
                    smtpMail.Send(oMsg)
                Catch ex As Exception
                    lblMessageErreur.Text = "La page a rencontré une erreur.Vos données n'ont pas été envoyées !"
                End Try
            End If
            Me.pnlMessage.Visible = False
            Me.PnlConfirmation.Visible = True
        End Sub

    Alors ce code non seulement il n'envoie pas la pièce jointe, mais n'envoie pas le corps du message non plus

    Débarrassé du code de la pièce jointe pour lequel Windows ne cesse de m'adresser des messages pour m'informer qu'il est obsolète, le mesage arrive sur sur le serveur du Webmail, mais bien sûr sans la pièce jointe.

    Je vous l'avais bien spécifié : il y a sûrment quelque chose à faire avec le contrôle web FileUpload ( muni de son bouton Parcourir)

     Et , à mon sens c'est là que se trouve la solution !...

    Je compte sur votre expertise

    Merci de votre patience

    dimanche 3 février 2013 16:27
  • Bonjour

    Très bien , avez-vous un exemple de code complet à me proposer ?

    Merci

    dimanche 3 février 2013 16:29
  • Bonjour

    Ici vous avez un exemple en C#:

    http://msdn.microsoft.com/fr-fr/library/system.net.mail.attachment.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

    et pour le transformer en VB.NET vous pouvez utiliser :

    http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    Bonjour,

    Merci d'avoir pris la peine d'examiner mon code.

    Je vais  aller traduire ce code  C#  en VB, l'appliquer  dans mon formulaire .aspx, et vous tenir bien entendu informé de l'évolution de "mon parcours".  Evolution que je souhaite favorable bien entendu ausssi.

    Cordialement

    lundi 4 février 2013 20:56
  • Bonjour,

    Nous changeons le type de votre question à « Discussion générale ». Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci !

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 8 février 2013 09:17
    Propriétaire
  • Bonjour,

    Pardonnez-moi ce retard.

    Oui , j'ai testé mais je reste toujours bloqué.Le code que vous m'aviez indiqué ne tiens pas compte de mon contrôle FileUpload, mais donne comme exemple , l'envoi d'un fichier .xls à un un ensemble de correspondant :

    Voici ce que j'essaye de faire:

     Protected Sub btnEnvoyer_Click(sender As Object, e As System.EventArgs) Handles btnEnvoyer.Click
            ' Construction du message qui contient un TextBox Nom, TextBox Prénom, TextBox Email et TextBox Commentaire
                    ' txtMail.Text contient l'adresse Mail de l'expéditeur
                    ' "contact@monsite.com" est le destinataire (le webmaster du site www.@monsite.com)
    
                    Dim message As New System.Net.Mail.MailMessage(txtMail.Text, "webmaster@monsite.com")
                    'l'objet du message
                    message.Subject = "[Demande d'informations]"
                    'le corps du message
                    message.Body = "[Demande transmise par le site www.monsite.com]" _
                       & vbCr & txtNom.Text.ToUpper _
                       & vbCr & txtPrenom.Text _
                       & vbCr & txtMail.Text _
                       & vbCr & txtCommentaire.Text
    
    
                    Dim Fichier As String = ""
                    ' Créer le fichier à joindre avec le message .
                    Dim data As New Attachment(Fichier, MediaTypeNames.Application.Octet)
                    ' Ajouter les propriétés du fichier.
                    Dim disposition As ContentDisposition = data.ContentDisposition
                    disposition.CreationDate = System.IO.File.GetCreationTime(Fichier)
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(Fichier)
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(Fichier)
                    ' Add the file attachment to this e-mail message.
                    message.Attachments.Add(data)
    
    
            Dim cheminPieceJointe As FileUpload = fileUploadChemin
            'Comment concertir ce FileUpload en String ?
            'Comment sauver le chemin du fichier contenu dans cet FileUpload ,
    
    
                    'Envoi du message
                    Dim smtp As New SmtpClient
                    smtp.Host = "localhost"
            smtp.Send(message)
            ' comment ajouter ici l'envoi de la pièce jointe ?
    
            Try
                smtp.Send(message)
            Catch ex As Exception
                Console.WriteLine("Exception(): {0}", ex.ToString())
            End Try
    
    
            ' Afficher les proprités de la pièce jointe.
            Dim cd As ContentDisposition = data.ContentDisposition
            Console.WriteLine("Content disposition")
            Console.WriteLine(cd.ToString())
            Console.WriteLine("File {0}", cd.FileName)
            Console.WriteLine("Size {0}", cd.Size)
            Console.WriteLine("Creation {0}", cd.CreationDate)
            Console.WriteLine("Modification {0}", cd.ModificationDate)
            Console.WriteLine("Read {0}", cd.ReadDate)
            Console.WriteLine("Inline {0}", cd.Inline)
            Console.WriteLine("Parameters: {0}", cd.Parameters.Count)
            For Each d As DictionaryEntry In cd.Parameters
                Console.WriteLine("{0} = {1}", d.Key, d.Value)
            Next
            data.Dispose()
        End Sub
    End Class

    Et voici un échantillon de capture d'écran de ce que pourrait être ce formulaire.

    Le problème est : comment faire pour instancier , sauver et joindre ce qui se trouve dans le bouton "Parcourir", avecl'envoi du reste du message.

    L'envoi du message seul ne me pose pas de problème.

    C'est la pièce jointe qui me bloque.

    Echantillon de cpature d'écran

    dimanche 3 mars 2013 20:11
  • Bonjour

    Le problème est : comment faire pour instancier , sauver et joindre ce qui se trouve dans le bouton "Parcourir", avecl'envoi du reste du message.

    Ici vous avez un exemple sur le traitement à faire avec FileUpload:

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.postedfile(v=vs.110).aspx

    Vous enregistrez le fichier dans un chemin temporaire et utilisez ce chemin pour l'envoyer comme attachement.

    Attention !  Vous sélectionnez un fichier sur dans l’explorateur. Ce fichier est envoyé  au postback (pas comme nom du fichier mais le contenu du fichier) vers le serveur. Ici vous devez l’enregistrer avec SaveAs dans un chemin temporaire et l’attacher.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 4 mars 2013 08:27
    Propriétaire
  • Bonjour

    Le problème est : comment faire pour instancier , sauver et joindre ce qui se trouve dans le bouton "Parcourir", avecl'envoi du reste du message.

    Ici vous avez un exemple sur le traitement à faire avec FileUpload:

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.postedfile(v=vs.110).aspx

    Vous enregistrez le fichier dans un chemin temporaire et utilisez ce chemin pour l'envoyer comme attachement.

    Attention !  Vous sélectionnez un fichier sur dans l’explorateur. Ce fichier est envoyé  au postback (pas comme nom du fichier mais le contenu du fichier) vers le serveur. Ici vous devez l’enregistrer avec SaveAs dans un chemin temporaire et l’attacher.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    Bonsoir,

    Merci pour votre réponse et ce nouvel apport de code, que je vais étudier, comprendre et mettre en oeuvre afin d'essayer de résoudre cette difficulté.

    Bien entendu, je vous mettrai au courant dès que j'aurai trouvé, afin que toute la communauté puisse en profiter (Ce n'est pas une mince affaire!...)

    Cordialement

    jeudi 7 mars 2013 20:09
  • Bonjour,

    Merci de votre accompagnement durant toutes mes recherches : cette question est dorénavant résolue.

    Voici le code en Visual Basic.Net

    Imports System.Net.Mail
    Imports System.IO
    
    Partial Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub btnEnvoyer_Click(sender As Object, e As System.EventArgs) Handles btnEnvoyer.Click
    
            ' Construction du message qui contient:
            '> un TextBox pour le  Nom 
            '> un TextBox  pour le Prénom
            '> un TextBox pour  l'Email 
            '> unTextBox pour le commentaire
            '------------------------------------------------------------------------------------------
            '> txtMail.Text contient l'adresse Mail de l'expéditeur
            ' "contact@monsite.com" est le destinataire (le webmaster du site www.@monsite.com)
            '------------------------------------------------------------------------------------------
            '> un contrôle FileUpload chargé de récupérer le chemin de la pièce jointe et de le poster
            ' et dont l'ID est FileUpload1
            '-------------------------------------------------------------------------------------------
    
            Dim message As New System.Net.Mail.MailMessage(txtMail.Text, "webmaster@monsite.com")
    
            'l'objet du message
            message.Subject = "[Demande d'informations]"
            'le corps du message
            message.Body = "[Demande transmise par le site www.monsite.com]" _
               & vbCr & txtNom.Text.ToUpper _
               & vbCr & txtPrenom.Text _
               & vbCr & txtMail.Text _
               & vbCr & txtCommentaire.Text
    
            '------------------------------------------------------------------------------------
            'Identifier le chemin de la pièce à joindre et l'attacher au message
    
            Dim fileName As String = Path.GetFileName(FileUpload1.PostedFile.FileName)
            Dim myAttachment As New Attachment(FileUpload1.FileContent, fileName)
            message.Attachments.Add(myAttachment)
            '------------------------------------------------------------------------------
    
            'Envoi du message
    
            Dim smtp As New SmtpClient
            smtp.Host = "localhost"
            smtp.Send(message)
    
        End Sub
    End Class


    • Modifié StudioWin samedi 9 mars 2013 12:43
    samedi 9 mars 2013 12:42