Классический ASP - Форма электронной почты с приложенным файлом - пожалуйста, помогите - PullRequest
1 голос
/ 14 апреля 2010

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

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

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

В форме name = "contactname" и name = "logo" у меня есть папка в корневом каталоге с именем logos (эта страница asp также существует в корневом каталоге)

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

Dim contactname, logo

contactname = request.form("contactname")
If request("contactname") <> "" THEN
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Form"
myMail.From="web@email"
myMail.To="web@email"
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

Ответы [ 4 ]

1 голос
/ 02 мая 2010

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

<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 Upload для сохранения загруженного файла где-нибудь на сервере, а затем использовать метод 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 голос
/ 14 апреля 2010

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

<% 
' ... 

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

' ...
%>
0 голосов
/ 22 февраля 2013

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

Dim binaryData

Для загрузки загруженного файла в двоичном виде просто Google, и вы получите множество решений для классического asp. Вы можете перейти на: 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 голосов
/ 14 апреля 2010

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

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

...