Ciao a tutti!
Ho un modulo di contatto/inviocurriculum (con selezione del destinatario) che, oltre ad inviare una e-mail (utilizzando CDOSYS), esegue l'upload di files (di dimensioni medio/piccole, dunque l'esempio di aruba mi va benissimo).
Lo scopo è (anche) quello di permettere ad un potenziale candidato di inviare una email e di allegare (uploadare) il proprio curriculum (al destinatario arriverà quindi una e-mail con l'url dove poter scaricare il file del CV).
Nel "miscelare" i codici di queste 2 funzionalità all'interno di un'unica pagina asp (l'ordine è: 1) upload - 2) invio e-mail), dapprima sono incorsa in errori di incompatibilità tra "Request.BinaryRead" (dell'upload) ed i vari "Request.Form" (passati dal form), ma li ho ben presto risolti sostituendo a questi ultimi l'istruzione UploadRequest.Item("nomecampoform").Item("Value").
Tutto bene fin quando, anzichè passare il contenuto di un campo di tipo testo, passo il contenuto di un campo selezionato da un menu a tendina, nel mio caso specifico il destinatario.
L'errore che ottengo è il seguente:
CDO.Message.1 error '8004020c'
È necessario specificare almeno un destinatario, ma non ne è stato trovato alcuno.
formcdosys.asp, line 122
Cosa c'è che non va? Perchè i campi di testo li passo regolarmente mentre il destinatario, selezionato da un menu a tendina (input type select), non me lo passa?
Il codice del menu a tendina nel form è il seguente:
<select name="destinatario">
<option>Scegliere un destinatario...</option>
<option value="email1">Informazioni</option>
<option value="email2">Ufficio Vendite</option>
<option value="email3">Ufficio Commerciale</option>
<option value="email4">Invio Curriculum Vitae</option>
</select>
Mentre il codice dell'upload + invio è il seguente:
<!--#include file="upload.asp"-->
<%
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin
contentType = UploadRequest.Item("blob").Item("ContentType")
filepathname = UploadRequest.Item("blob").Item("FileName")
vardestinatario=UploadRequest.Item("destinatario").Item("Value")
varnome=UploadRequest.Item("nome").Item("Value")
varazienda=UploadRequest.Item("azienda").Item("Value")
varemail=UploadRequest.Item("email").Item("Value")
varmessaggio=UploadRequest.Item("messaggio").Item("Value")
varblob=UploadRequest.Item("blob").Item("Value")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("blob").Item("Value")
'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
'Create and Write to a File
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd) & filename)
For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next
MyFile.Close
%>
<!--METADATA TYPE="typelib" UUID="CD000000-8B95-11D1-82DB-00C04FB1625D" NAME="CDO for Windows 2000 Type Library" -->
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" -->
<%
DIM corpoMessaggio, numeroCampi, invioA, invioDa, nomeDominio, indirizzoIp, modulo, browserSistemaOperativo
If vardestinatario = "email1" Then
invioA = "casella1@dominio.it"
ElseIf vardestinatario = "email2" Then
invioA = "casella2@dominio.it"
ElseIf vardestinatario = "email3" Then
invioA = "casella3@dominio.it"
ElseIf vardestinatario = "email4" Then
invioA = "casella4@dominio.it"
End If
invioDa = varemail
nomeDominio = Request.ServerVariables("HTTP_HOST")
indirizzoIp = Request.ServerVariables("REMOTE_ADDR")
modulo = Request.ServerVariables("HTTP_REFERER")
browserSistemaOperativo = Request.ServerVariables("HTTP_USER_AGENT")
If varblob = "" Then
corpoMessaggio = vbCrLf & "Nome: " & varnome & vbCrLf & "Azienda: " & varazienda & vbCrLf & "E-mail: " & varemail & vbCrLf & "Messaggio: " & vbCrLf & varmessaggio
Else
corpoMessaggio = vbCrLf & "Nome: " & varnome & vbCrLf & "E-mail: " & varemail & vbCrLf & "File del C.V.: http://www.dominio.it/public/cv/" & varblob & vbCrLf & "Messaggio: " & vbCrLf & varmessaggio
End If
'* creo gli oggetti cdosys sul server e li gestisco
DIM iMsg, Flds, iConf
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds(cdoSendUsingMethod) = cdoSendUsingPort
Flds(cdoSMTPServer) = "smtp.aruba.it"
Flds(cdoSMTPServerPort) = 25
Flds(cdoSMTPAuthenticate) = cdoAnonymous ' 0
Flds.Update
With iMsg
Set .Configuration = iConf
.To = invioA
.From = varemail
.Sender = invioDa
If varblob = "" Then
.Subject = "Messaggio dal sito"
Else
.Subject = "Curriculum Vitae dal sito"
End If
.TextBody = "Questi i dati inseriti nel modulo di contatto presente sul sito PippoPluto all'indirizzo " & modulo & "):" & vbCrLf & corpoMessaggio & ""
.Send
End With
%>
<script>
document.location.replace('/contatti_ok.asp');
</script>
Vi ringrazio per qualunque aiuto potrete darmi!
t.