2010-04-14 3 views
1

У меня возникла проблема с проблемой. У меня есть электронная почта, которая отправляет вход на адрес электронной почты, но то, что мне теперь нужно, - это поле ввода файла, которое пользователь может также отправить изображение как приложение.Классический ASP - Форма электронной почты с прикрепленным файлом - пожалуйста, помогите

Так что контактное имя, логотип (приложение).

Сообщалось, что для отправки вложения он должен быть сохранен в папке на моем хостинге до его отправки. Я говорил с хостинговой компанией, и у них нет ничего, чтобы сделать это проще, например aspupload.

В имени = «CONTACTNAME» и имя = «логотип» У меня есть папка в корневой директории под названием логотипов (это жерех страница также существует в корневом каталоге)

Людей я надеюсь, что кто-то может мне помочь провели по времени в поисках ответов

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 

ответ

1

Разве вы не можете просто использовать один из следующих вариантов, в зависимости от формата местоположения вы получаете от поля ввода? Вам не нужно сохранять его на сервере.

<% 
' ... 

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

' ... 
%> 
+0

С сервера у вас не будет доступа к файлу/каталогу пользователей, указанному в поле ввода. Вам нужно будет захватить содержимое из сообщения multipart form, сериализовать его в файл на сервере, а затем «AddAttachment», используя путь к директории/файлу temp (а затем удалите этот файл с сервера после отправки электронной почты) –

+0

Не могли бы вы захватить поток файлов из компонента загрузки файла и добавить это как вложение? Я не уверен, что вы можете сделать это в классическом ASP, но вполне уверен, что это возможно .Net – schmimd04

+0

Ребята какие-то решения ??? – apg1985

0

erm Да, я мог бы использовать один из вышеперечисленных, если файл уже был сохранен, но это не так. Файл сходит с ПК конечных пользователей.

Таким образом, они находят браузер в форме и переходят к файлу на компьютере. Который, я думаю, тогда должен быть сохранен в файл на моем хостинге, тогда местоположение файла было вставлено вроде как вы сделали, чтобы оно было отправлено.

1

Вам необходимо использовать элемент управления вводом файлов. Основная идея заключается в том, что вы объявляете свою форму, как это:

<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 должен затем использовать элемент управления ASP Загрузить, чтобы сохранить загруженный файл где-то на сервере, а затем использовать метод AddAttachment из CDOSYS.

Примечание: при использовании этого компонента загрузки нормальный Request.Form больше не доступен (из-за вызова Response.BinaryRead). Вы можете получить значение ContactName, используя вместо этого коллекцию Fields этого элемента управления загрузкой.

Такой контроль ASP загрузки можно найти здесь:

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

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

-1

Для классического осины вам нужно сначала получить файл загружен в виде двоичного кода данных:

Dim binaryData 

Для получения загруженного файла в двоичной форме просто Google, и вы получите много решений для классического asp.You можете пойти t о для: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4

Если вы идете по ссылке выше, оно должно быть:

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

После этого, вам не нужно хранить двоичные данные в базе данных.Просто создать объект набора записей, как указано ниже:

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

Затем вы можете создать CDO объект сообщения и действовать:

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 

Таким образом, вы не должны хранить загруженный файл в базе данных или на сервере пространства . Вы можете просто прикрепить файл на лету. Надеюсь, поможет.

+0

Это не работает. Я могу получить кодированные данные base64. Но в письме не указывается, что вложение становится пустым. – divinedragon

Смежные вопросы