77 messaggi dal 24 giugno 2005
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.
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
Puoi provare a verificare che il valore della Select sia recuperato con UploadRequest.Item("destinatario").Item("Value") ?

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.