Hardware : ludvd OS, Software, Réseaux & Jeux vidéos : FreddyOne Achats/Ventes : Pt1t, hcpowa, 1 utilisateur anonyme et 30 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

[MsSQL Serveur/VS 2005] Envoie de Mail avec Pieces Jointes

 
n°45933
Twan
Posté le 17-07-2006 à 10:38:59  profilanswer
 

Je vous explique mon probleme. J'ai une table sous MsSQL serveur 2005 avec un identifiant de fichier, un nom de fichier et le fichier. Je fais une appli web avec VS 2005, et j'aimerai avoir une page qui permette de telecharger les fichiers de la table. J'aimerai en fait que sur la page il y ai un lien hypertext du nom du fichier, et qui propose d'ouvrir ou d'enregistrer ce fichier quand on clique sur ce lien. Le language de prog que j'utilise est le VB.net.
Merci


Message édité par Twan le 18-07-2006 à 11:13:14

---------------
http://www.chezmm.fr
n°45934
sebx
boulet cherche canon
Posté le 17-07-2006 à 11:08:50  profilanswer
 

bon j'ai pas le code en tête mais moi je fais comme ça :

 

je créée une page (vide) qui prend en paramètre un id de fichier
elle va récupérer le contenu binaire en base et le redirige vers son flux de sortie, en positionnant le type mime et le nom du fichier correctement
sur ma page, je mets un lien vers cette page avec l'id de fichier souhaité (truc du genre : <a href=./downloadfile.aspx?id=xxx>download</a> )
 :)


Message édité par sebx le 17-07-2006 à 11:10:01

---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45935
castor@mat​be
Mutafukaz !
Posté le 17-07-2006 à 11:28:12  profilanswer
 

Dans la partie 'visual' tu fais un datagrid que tu nommes DTG_Liste_fichier
 
Dans le code behind  
 

Sub Page_Load()
     AfficherListe()
End Sub
 
Sub AfficherListe()
     
     ' Déclaration des différents objets
     Dim oConnection As SqlConnection
     Dim oCommand As SqlCommand
     Dim oDataReader As SqlDataReader
     Dim sSQL As String
     
     ' Création de notre connexion
     oConnection = New SqlConnection()
     oConnection.ConnectionString = ConfigurationSettings.AppSettings("SqlServer" )
     
     ' Ouverture de la connexion
     oConnection.Open()
     
     ' Ecriture de la requête SQL
     sSQL = "SELECT * FROM [Fichier] ORDER BY Nom_Fichier ASC"
     
     ' Création de l'objet SqlCommand
     oCommand = New SqlCommand(sSQL, oConnection)
     
     ' Lecture des données
     oDataReader = oCommand.ExecuteReader()
     
     ' Paramétrage du DataGrid
     DTG_Liste_Fichiers.DataSource = oDataReader
     DTG_Liste_Fichiers.DataBind()
     
     ' Fermeture du DataReader et de la connexion
     oDataReader.Close()
     oConnection.Close()
     
End Sub


 
Dans la partie visual tu fais tes column
Par exemple l'affichage du nom
<asp:BoundColumn DataField="Nom_Fichier" HeaderText="Nom du fichier"></asp:BoundColumn>
 
Et pour le lien un truc dans le genre
<TemplateColumn>
    <ItemTemplate>
       <asp:HyperLink Runat="server" NavigateUrl='<%#  Container.DataItem("Chemin_Fichier" ) %>' />
    </ItemTemplate>
</TemplateColumn>
 
Il faut pour cela que tes fichiers soient quelque part dans un répertoire accessible...


Message édité par castor@matbe le 17-07-2006 à 11:28:50
n°45936
Ashe
reenignE esreveR
Posté le 17-07-2006 à 11:33:27  profilanswer
 

Si meme les fichiers sont pas accessibles (via URL), suffit de changer content-type et compagnie et de balancer le stream :spamafote:


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°45937
castor@mat​be
Mutafukaz !
Posté le 17-07-2006 à 11:40:52  profilanswer
 

+1 mais comme c'était déjà dense je voulais pas tout lacher d'un coup
 
Sinon une approche interressante avec un cryptage et doit y avoir l'envoi des fichiers par streaming  
http://www.asp-php.net/scripts/asp [...] anager.php

n°45943
Twan
Posté le 18-07-2006 à 11:22:56  profilanswer
 

Merci pour ces explications. J'ai un nouveau problème maintenant !
J'ai une table sous MsSQL Serveur avec des fichiers. Je voudrai en VB.net pouvoir automatiquement envoyer des mails, avec des pieces jointes, qui sont prises dans la table des fichiers. J'ai déjà trouvé tout le code pour envoyer un mail :

Dim mailServerName As String = "*************"
Dim monMail As MailMessage = New MailMessage()
Dim mailClient As SmtpClient = New SmtpClient
 
'Expediteur
monMail.From = New MailAddress("****@****.***" )
 
'Destinataire
monMail.To.Add(New MailAddress("****@****.***" ))
 
'Copies
monMail.CC.Add(New MailAddress("****@****.***" ))
 
'Sujet,Contenu
monMail.Subject = "Mail de test 03"
monMail.Body = "Hello les gens"
 
mailClient.Host = mailServerName
mailClient.Send(monMail)
monMail.Dispose()


Mais j'arrive pas a mettre des pieces Jointes qui proviennent de la BD. J'ai récupéré de la BD le nom du fichier dans un string, le type du fichier dans un string, et le fichier dans un Byte(). Apres je pense qu'il faut que je passe par un objet attachement, mais c'est la que je bloque. Si quelqu'un pouvais me dire comment faire, ca serait super sympa !


---------------
http://www.chezmm.fr
n°45944
castor@mat​be
Mutafukaz !
Posté le 18-07-2006 à 11:31:29  profilanswer
 

http://msdn2.microsoft.com/en-us/l [...] hment.aspx
 
y a un exemple complet en C#, mais c'est facile, ce sont les mêmes objet qu'en VB, seule la synthaxe change

n°45945
Twan
Posté le 18-07-2006 à 11:33:54  profilanswer
 

Merci beaucoup, j'essaye tout de suite !


---------------
http://www.chezmm.fr
n°45946
Twan
Posté le 18-07-2006 à 13:24:31  profilanswer
 

Ca marche pas :cry:
J'ai ca comme message d'erreur :
Impossible de trouver le fichier 'C:\WINDOWS\system32\Test.doc'
Pourquoi il va le chercher la bas ???


---------------
http://www.chezmm.fr
n°45947
sebx
boulet cherche canon
Posté le 18-07-2006 à 13:38:28  profilanswer
 

parce que tu as spécifié le nom "test.doc" ?  :whistle:
 
l'exemple de MS attache un fichier sur le disque
 
il y a des constructeurs de attachment avec un stream dedans, cherche de ce côté, tu mets ton byte() dans un stream et hop  ;)


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45948
castor@mat​be
Mutafukaz !
Posté le 18-07-2006 à 13:42:40  profilanswer
 

Comme ça c'est chaud de répondre, on peut voir l'intégralité du msg d 'erreur et un bout de code ?

n°45949
sebx
boulet cherche canon
Posté le 18-07-2006 à 13:51:15  profilanswer
 

bah il est assez clair son message d'erreur  :spamafote:


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45950
Twan
Posté le 18-07-2006 à 13:53:32  profilanswer
 

sebx a écrit :

parce que tu as spécifié le nom "test.doc" ?  :whistle:
 
l'exemple de MS attache un fichier sur le disque
 
il y a des constructeurs de attachment avec un stream dedans, cherche de ce côté, tu mets ton byte() dans un stream et hop  ;)


 
Si je fais comme tu dis je recupere d'abord le fichier de la BD, son type et son nom :

Dim image As Byte()
Dim Nom_PJ As String
Dim Type As String
 
image = objDS.Tables(0).Rows(0).Item("Piece_Jointe" )
Nom_PJ = objDS.Tables(0).Rows(0).Item("Nom_PJ" )
Type = objDS.Tables(0).Rows(0).Item("Type_PJ" )


je mets le byte() dans un stream :

Dim stream As New System.IO.MemoryStream
stream.Write(image, 0, image.Length)


apres je fait mon attachment :

Dim maPieceJointe As New Attachment(stream, Nom_PJ, Type)


et j'ajoute la piece jointe :

monMail.Attachments.Add(maPieceJointe)


La ca m'envoie bien le mail, avec une piece jointe, avec le nom de la piece jointe, mais la piece jointe fait toujours 64o et elle est vide.
Ya donc un probleme quelque part. Mais j'arrive pas a voir ou !


---------------
http://www.chezmm.fr
n°45951
sebx
boulet cherche canon
Posté le 18-07-2006 à 14:19:51  profilanswer
 

est-ce que ton byte() fait la bonne taille ?
essaye de repositionner ton stream au début avec seek() avant de créer l'attachment   ;)


Message édité par sebx le 18-07-2006 à 14:20:08

---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45952
castor@mat​be
Mutafukaz !
Posté le 18-07-2006 à 14:36:30  profilanswer
 

l y a plusieurs constructeurs pour le type attachment, et je n'ai pas trouvé de code pour travailler à partir d'un stream.
Le plus simple serait encore de passer par le chemin du fichier comme dans cet exemple. I
 
Etant rouillé complétement au niveau code je ne sais pas à quoi sert le @ dans le constructeur attachment du code suivant. Peux tu essayer sur ce modèle ?
 

// création de la pièce jointe
Attachment maPieceJointe = new Attachment(@"c:/fichier.zip" ); // chemin de la pièce jointe
 
// ajout de la pièce jointe au mail
monMail.Attachments.Add(maPieceJointe);


n°45953
sebx
boulet cherche canon
Posté le 18-07-2006 à 14:47:05  profilanswer
 

sa pièce jointe n'est pas dans un fichier  ;)


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45956
sebx
boulet cherche canon
Posté le 18-07-2006 à 14:52:27  profilanswer
 

avec gougeule je trouve ça :
 
 

Code :
  1. Function CreateBinaryAttachment(ByVal content() As Byte, ByVal fileName As String) As Attachment
  2.     ' Convert byte contents into a MemoryStream object
  3.     Dim memoryStream As New System.IO.MemoryStream(content)
  4.     ' Embed the stream to attachment object
  5.     Dim att As New Attachment(memoryStream)
  6.     att.FileName = fileName
  7.     ' Avoid leaving any stream opened
  8.     memoryStream.Close()
  9.     Return att
  10. End Function

 

apparemment il faut bien fermer le stream (est-ce que tu le fais), et pas besoin de le repositionner au début...


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45957
castor@mat​be
Mutafukaz !
Posté le 18-07-2006 à 14:52:29  profilanswer
 

Oui bon ça va, j'y peux rien s'il y avait apéro e midi :o
 
:whistle:
 
Faut essayer sans spécifier nom_pj et type deja ça à l'air facultatif.


Message édité par castor@matbe le 18-07-2006 à 14:52:39
n°45958
Twan
Posté le 18-07-2006 à 14:54:38  profilanswer
 

Ca marche bien, marci beaucoup Sebx !
J'ai juste rajouté cette ligne juste avant d'appeler mon constructeur :

stream.Seek(0, IO.SeekOrigin.Begin)


Message cité 1 fois
Message édité par Twan le 18-07-2006 à 14:55:45

---------------
http://www.chezmm.fr
n°45959
castor@mat​be
Mutafukaz !
Posté le 18-07-2006 à 15:05:11  profilanswer
 

Et moi, parce que je dis des conneries on me dit pas merci :pfff:
:D


Message édité par castor@matbe le 18-07-2006 à 15:05:18
n°45961
sebx
boulet cherche canon
Posté le 18-07-2006 à 15:10:07  profilanswer
 

Twan a écrit :

Ca marche bien, marci beaucoup Sebx !
J'ai juste rajouté cette ligne juste avant d'appeler mon constructeur :

 


   

pas de quoi  :jap:

 

je m'en doutais, donc le code que j'ai trouvé et posté ici ne marche pas  :D  
 
edit : il faut quand-même penser à fermer le stream par contre


Message édité par sebx le 18-07-2006 à 15:10:33

---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45963
Twan
Posté le 18-07-2006 à 16:07:01  profilanswer
 

euh ... Ca fait quoi si on le ferme pas ? je l'ai pas fermé et ca marche tres bien !


---------------
http://www.chezmm.fr
n°45964
sebx
boulet cherche canon
Posté le 18-07-2006 à 16:08:47  profilanswer
 

ouaip mais du coup l'objet reste chargé et au bout de quelques mails envoyés, tu vas te retrouver avec ta mémoire pleine  :p


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45969
Ashe
reenignE esreveR
Posté le 18-07-2006 à 18:54:11  profilanswer
 

Le garbage collector pensera ptet a faire son boulot un d'ces 4


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°45970
LostSoul
Manieur de hache
Posté le 18-07-2006 à 18:58:39  profilanswer
 

2 fois par semaine comme les vrais :o

n°45974
sebx
boulet cherche canon
Posté le 18-07-2006 à 19:39:21  profilanswer
 

ça n'empêche que c'est pô prop  :o


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45976
LostSoul
Manieur de hache
Posté le 18-07-2006 à 22:23:43  profilanswer
 

sebx a écrit :

ça n'empêche que c'est pô prop  :o


 
programmer propre c'est faire des désallocations soi-même :o

n°45977
sebx
boulet cherche canon
Posté le 18-07-2006 à 22:29:01  profilanswer
 

avec .net c'est dur  :D
 
mais tout bien fermer c'est un réflexe qui m'est resté du C  :D


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45979
Twan
Posté le 19-07-2006 à 11:47:55  profilanswer
 

Bon j'ai toujours des problemes avec mes pieces jointes !
Donc maintenant j'ai le chemin d'acces d'un fichier sur le disque dur, et je voudrai recuperer un byte(), et un string pour le type. Est ce que c'est possible ? J'ai réussi a le mettre dans un stream avec la commande :

Dim File As New System.IO.StreamReader(FilePath & "/" & FileName)

mais je sais pas si ca sert a quelque chose et surtout si ca marche !


Message édité par Twan le 19-07-2006 à 11:48:59

---------------
http://www.chezmm.fr
n°45980
sebx
boulet cherche canon
Posté le 19-07-2006 à 11:54:45  profilanswer
 

pourquoi tu crées pas ton attachment avec le constructeur qui prend un chemin de fichier  :??:
 
et le type est facultatif, c'est le client mail du destinataire qui le déterminera tout seul  ;)


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45981
Twan
Posté le 19-07-2006 à 12:01:17  profilanswer
 

la en fait j'ai changé de methode. En fait avant je mettais le fichier dans la BD, et je le joignais au mail. La je fais l'inverse, comme ca en cas de suppression de fichier, ca me fait des acces a la base en moins. La j'ai le chemin, et je veux le mettre dans ma BD


---------------
http://www.chezmm.fr
n°45982
sebx
boulet cherche canon
Posté le 19-07-2006 à 12:09:55  profilanswer
 

méthode Read() de l'objet FileStream  ;)


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45983
sebx
boulet cherche canon
Posté le 19-07-2006 à 12:11:37  profilanswer
 

code exemple de MS :
 
 

Code :
  1. Dim fi As New FileInfo("c:\csc.txt" )
  2. Dim fs As FileStream = fi.OpenRead()
  3. Dim nBytes As Integer = 100
  4. Dim ByteArray(nBytes) As Byte
  5. Dim nBytesRead As Integer = fs.Read(ByteArray, 0, nBytes)

 


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45984
Twan
Posté le 19-07-2006 à 12:31:57  profilanswer
 

Merci beaucoup ! Ca marche j'arrive a recuperer un Byte(), mais j'ai toujours pas toruvé comment récuperer le type du fichier.


---------------
http://www.chezmm.fr
n°45986
sebx
boulet cherche canon
Posté le 19-07-2006 à 13:56:32  profilanswer
 

ben c'est pas écrit dans le fichier, faut faire un case sur l'extension  :/


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45987
Ashe
reenignE esreveR
Posté le 19-07-2006 à 14:14:00  profilanswer
 

Les types mime sont dans la base de registre, pour ceux qui sont connus
Tt facon a moins que ce soit du texte ou une image le reste tu peux le mettre en binary :spamafote:


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°45988
Twan
Posté le 19-07-2006 à 14:26:06  profilanswer
 

bah je me suis pas fait chier au final j'ai mis dans mon nom de fichier le nom et le type, comme ca je peux recuperer les deux apres !


---------------
http://www.chezmm.fr
n°45989
Ashe
reenignE esreveR
Posté le 19-07-2006 à 14:28:27  profilanswer
 

:sarcastic:


---------------
Globe trotter/SDF - Namur, Belgique
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°45992
sebx
boulet cherche canon
Posté le 19-07-2006 à 14:43:04  profilanswer
 

cay nul / pô prôp  :o


---------------
Célibataire & béhémiste de service
Gentil Organisateur des rencontres matbe
JH 27 ans, bon salaire, propriétaire, roulant en berline Allemande cherche femme pour mariage, bébés et + si affinités
n°45999
Twan
Posté le 19-07-2006 à 16:22:09  profilanswer
 

Voila, c'est bon, j'ai tout séparé ! Comme ca c'est mieux propre !


---------------
http://www.chezmm.fr

Aller à :
Ajouter une réponse