2010-04-14 10 views
1

J'ai eu un problème J'ai reçu un formulaire de courrier électronique qui envoie l'entrée à une adresse e-mail, mais ce dont j'ai besoin maintenant, c'est un champ de saisie que l'utilisateur peut envoyer une image en pièce jointe.Classic ASP - Email avec le fichier joint - aidez s'il vous plaît

Nom du contact, logo (pièce jointe).

J'ai été informé que pour envoyer la pièce jointe, il faut l'enregistrer dans un dossier sur mon hébergement avant de pouvoir l'envoyer. J'ai parlé à la société d'hébergement et ils n'ont rien en place pour rendre cela plus facile, comme aspupload.

Au nom de forme = « logo » « ContactName » et name = J'ai un dossier dans le répertoire racine appelé logos (cette page asp existe également dans le répertoire racine)

homme J'espère que quelqu'un peut me aider passé le long temps à chercher des réponses

Dim contactname, logo 

contactname = request.form("contactname") 
If request("contactname") <> "" THEN 
Set myMail=CreateObject("CDO.Message") 
myMail.Subject="Form" 
myMail.From="[email protected]" 
myMail.To="[email protected]" 
myMail.HTMLBody = "" & contactname & "" 
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "relay.host" 
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
myMail.Configuration.Fields.Update 
myMail.Send 
set myMail=nothing 

Répondre

1

tu ne peux pas utiliser juste une des options suivantes, en fonction du format de l'emplacement que vous obtenez à partir du champ de saisie? Vous ne devriez pas avoir à l'enregistrer sur le serveur.

<% 
' ... 

myMail.AddAttachment Server.MapPath("file1.txt") 
myMail.AddAttachment "d:\file2.txt" 
myMail.AddAttachment "file://d:\file3.txt" 

' ... 
%> 
+0

À partir du serveur, vous n'aurez pas accès au fichier/répertoire d'utilisateurs spécifié dans le champ de saisie. Vous devez récupérer le contenu de la publication du formulaire en plusieurs parties, le sérialiser en un fichier sur le serveur, puis ajouter AddAttachment en utilisant le chemin d'accès au répertoire/fichier temporaire (puis supprimer ce fichier du serveur après l'envoi de l'e-mail) –

+0

Vous n'avez pas pu récupérer le flux de fichier à partir du composant de téléchargement de fichier et l'ajouter en tant que pièce jointe? Je ne suis pas sûr si vous pouvez le faire dans ASP classique, mais à peu près sûr que c'est possible dans. Net – schmimd04

+0

Guys des solutions? – apg1985

0

ou bien je pourrais utiliser l'un de ceux ci-dessus si le fichier était déjà stocké mais pas. Le fichier sort du PC des utilisateurs finaux. Donc, ils cliquent sur le navigateur dans le formulaire et naviguent vers le fichier sur leur PC. Ce que je pense ensuite doit être sauvegardé dans un fichier sur mon hébergement puis l'emplacement du fichier inséré un peu comme vous l'avez fait pour qu'il soit envoyé.

1

Vous devez utiliser un contrôle d'entrée de fichier. L'idée de base est que vous déclarez votre formulaire comme ceci:

<form method="POST" action="YourScript.asp" enctype="multipart/form-data"> 
<input name="ContactName" type="text" size="50"> 
<input name="LogoFile" type="file"> 
<input type="submit" value="Send"> 
</form> 

YourScript.asp doit alors utiliser un ASP Upload contrôle pour stocker le fichier téléchargé quelque part sur le serveur, puis utilisez la méthode AddAttachment de CDOSYS.

Remarque: Lors de l'utilisation de ce composant de téléchargement, Request.Form normal n'est plus disponible (en raison de l'appel de Response.BinaryRead). Vous pouvez accéder à la valeur ContactName en utilisant la collection Fields de ce contrôle de téléchargement à la place.

Un tel contrôle ASP Upload se trouve ici:

http://www.asp101.com/articles/jacob/scriptupload.asp

http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4

-1

Pour asp classique, vous devez d'abord le fichier se téléchargé sous forme de données binaires:

Dim binaryData 

Pour obtenir le fichier téléchargé sous forme binaire juste google et vous obtiendrez beaucoup de solutions pour ASP classique. Vous pouvez aller t o pour: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4

Si vous passez par le lien ci-dessus, il est:

Dim binaryData = objUpload("File1").BLOB & ChrB(0) 

Par la suite, vous ne devez pas stocker les données binaires dans la base de données.Il suffit de créer un objet recordset comme indiqué ci-dessous:

set rset = server.createobject("ADODB.RECORDSET") 
rset.fields.append "FileName", 205, LenB(binaryData) 
rset.open 
rset.addnew 
rset.fields(0).AppendChunk binaryData 

Ensuite, vous pouvez créer un objet de message CDO et procédez comme:

Set myMail=CreateObject("CDO.Message") 
'//your mail code here 
myMail.Configuration.Fields.Update 

binaryData = rset.fields("FileName").value    
Const cdoContentDisposition = "urn:schemas:mailheader:content-disposition" 
Const cdoBase64 = "base64"    
Dim attach : Set attach = myMail.Attachments.Add    
attach.ContentMediaType = "application/octet-stream" 
attach.ContentTransferEncoding = cdoBase64 
'//Here I am just attaching an jpeg image file with fixed name 'myimage.jpg' 
attach.Fields(cdoContentDisposition).Value="attachment;filename=""myimage.jpg""" 
attach.Fields.Update 
Dim oStreamOutput: Set oStreamOutput = attach.GetDecodedContentStream 
oStreamOutput.Write binData 
oStreamOutput.Flush 
myMail.Send 
set myMail=nothing 

De cette façon, vous ne devez pas stocker le fichier téléchargé dans la base de données ou sur votre espace serveur Vous pouvez simplement joindre le fichier à la volée. J'espère que cela aide.

+0

Cela ne fonctionne pas. Je suis en mesure d'obtenir les données encodées en base64. Mais, il ne définit pas dans l'email provoquant la pièce jointe à venir comme vide. – divinedragon