Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57

    Form - Email - Allegato

    Dunque sto cercando di creare un'applicazione che attraverso un semplice form permetta di inviare mail con allegati.
    Copia-incollando in giro sono arrivato a questo:

    form.asp
    codice:
    <HTML>
    <HEAD>
    <TITLE>Manda Email</TITLE>
    </HEAD>
    <BODY>
    
    <FORM ACTION="manda.asp" METHOD="post" enctype="multipart/form-data">
    
    <div align="center">
    <table border="0" width="85%" celpadding="2" cellspacing="2">
    
    <tr>
    <td>
    <h1>Manda E-mail<hr align="LEFT" size="1" width="100%" color="navy"></h1>
    </td>
    </tr>
    
    <tr>
    <td>
    Compila il Form
    </td>
    </tr>
    
    <td align="center">
    
    
    <table width="60%" border="0" celpadding="2" cellspacing="2">
    
    <tr>
    <td>Subject</td>
    <td><INPUT NAME="subject" TYPE="TEXT" size=30 MAXLENGTH=50></td>
    </tr>
    
    <tr>
    <td>Email destinatario</td>
    <td valign="top">
    <INPUT NAME="destinatario" TYPE="TEXT" ALIGN=left size=30 MAXLENGTH=50>
    </td>
    </tr>
    
    <tr>
    
    <tr>
    <td valign="top">Testo</td>
    <td><TEXTAREA NAME="testo" ROWS=7 COLS=42></TEXTAREA></td>
    </tr>
    
    <tr>
    <td valign="top">Allega</td>
    <td><input type="file" name="file1" /></td>
    </tr>
    
    
    <tr>
    <td colspan="2" align="center">
    <table width="50%" border="0" celpadding="6" cellspacing="2">
    
    <tr> 
      <td><input type="submit" name="invio" value="   Invia    "></td>
      <td align="right">
    <INPUT TYPE="reset" NAME="reset" VALUE="   Reset   "></td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    </div>
    </FORM>
    </BODY>
    </HTML>


    manda.asp
    codice:
    <%
    Dim form, nome, allegato
    %>
    <Html>
    <head>
    <title>Manda Email</title>
    </head>
    <body>
    
    
    
    <%
    
    
    
    Dim oUpload 
    Set oUpload = new cUpload 
    oUpload.Load
    if oUpload.Count=0 then
    	Response.Write "Nessun file caricato"
                      response.write "<a href=Javascript:history.go(-1)>Pagina precedente</a>"
    Else
    	While Not oUpload.EOF
    		oUpload.Save()
    
    		Response.Write "Salvo il file : " & oUpload.GetFileName() & "
    "
    		Response.Write "Percorso fisico : " & oUpload.GetCompletePathFile() & "
    "
                                        allegato = oUpload.GetFileName()
    		Response.Write "Percorso Web : " & oUpload.GetHTTPPathFile() & "
    "
    		Response.Write "Dimensioni del file : " & oUpload.Files("Size") & "
    "
    		Response.Write "<hr>"
    
    		oUpload.MoveNext
    	Wend
    End if
    oUpload.PrintStatus "Report"
    Set oUpload=Nothing 
    
    
    
    call Main()
    Sub Main()
    'se la lungezza è 0 non c'e niente nell email
    If Len(Request.Form("mittente")) = 0 then
    no_email()
    else 
    manda_posta(form)
    ecco_fatto(nome)
    end if
    End sub
    
    
    
    Sub no_email()
    'allora diciamo al cliente che senza una email non possiamo rispondergli
    response.write "<div align='center'>"
    response.write "<table border='0' width='80%' cellspadding='4' cellspacing='4'>" 
    response.write "<tr><td>Non hai inserito il tuo indirizzo E-mail</td></tr>"
    response.write "<tr><td>Per favore, torna indiedro e ricompila il form </td></tr>"
    response.write "<tr><td align='middlè>"
    response.write "<a href=Javascript:history.go(-1)>Pagina precedente</a>"
    response.write "</td></tr></table></div>"
    End Sub
    
    
    
    Sub manda_posta(form)
    Dim mittente, testo
    Dim objMail, objMailConfig, mandamiquesto
    'facciamo la vendemmia dell'input
    nome = Request.Form("subject")
    mittente = Request.Form("mittente")
    testo = Request.Form("testo")
    mandamiquesto = testo 
    'costruiamo un NewMail oggetto
    Set objMail = Server.CreateObject("CDO.Message")
    Set objMailConfig = Server.CreateObject ("CDO.Configuration")
    
    ' Proprietà di invio
    with objMailConfig
      ' SMTP mail server
      .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.fastwebnet.it"
      ' SMTP port
      .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
      ' CDO port
      .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      ' Timeout
      .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
      .Fields.Update
    end with
    
    Set objMail.Configuration = objMailConfig
    
    'adesso che abbiamo accesso a tuttle le sue proprieta, usiamole
    'prendiamo il nome dal Form di input
    objMail.From = "mia_mail@hotmai.it"
    'mandiamola
    objMail.To = Request.Form("destinatario")
    'mettiamoci un riga per il titolo
    objMail.Subject = nome
    'e nel corpo ci mettiamo la stringa che abbiamo costruito
    objMail.TextBody = mandamiquesto
    objMail.AddAttachment Server.MapPath("allegato")
    'al momento è poco importante, direi
    objMail.Fields("urn:schemas:httpmail:importance").Value = 0
    objMail.Fields.update() 
    'e via che va
    objMail.Send
    'e adesso puliamo prima di andarcene
    Set objMail = Nothing
    end sub
    
    
    
    Sub ecco_fatto(nome)
    response.write "<div align='center'>"
    response.write "<table border='0' width='80%' cellspadding='4' cellspacing='4'>" 
    response.write "<tr><td>Grazie " & nome & " per la mail</td></tr>"
    response.write "<tr><td align='middlè>"
    response.write "<a href=Javascript:history.go(-2)>Torna indietro</a>"
    response.write "</td></tr></table></div>"
    End sub
    
    
    
    %>
    </body>
    </html>


    upload.asp è il file di baol (ho scaricato upload312.zip linkato in altri thread di questo forum)



    Mi da questo errore:

    Tipo di errore:
    Errore di run-time di Microsoft VBScript (0x800A01A8)
    Necessario oggetto: 'Files'
    /cartella/upload.asp, line 380
    Ovviamente non sono andato a spulciarmi il file... Sapete dirmi cos'è?

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Quando usi il metodo dell'upload non puoi usare Request.Form per recuperare il valore dei campi del FORM.

    Roby

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57
    Originariamente inviato da Roby_72
    Quando usi il metodo dell'upload non puoi usare Request.Form per recuperare il valore dei campi del FORM.

    Roby
    Uhm aspè scusami non ho capito
    Ti riferisci ad un punto preciso del codice o intendi proprio che non posso usare Request.Form?
    E se è così come faccio per recuperare i dati dei campi del form?

  4. #4
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Non lo puoi proprio usare quando usi la tecnica dell'upload.
    Studiati l'upload di baol, recupera i campi con il metodo: oUpload.Form("xxxx")

    Roby

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57
    Ah ops, non l'avevo notato...
    Vabè ma quindi basta fare un bel
    "sostituisci tutto": Request -> oUpload ? : P



    (Poi scusa ma come mai non posso? Non sono due cose separate?)

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57
    Ok, ho risolto sistemandolo così

    codice:
    <%
    Dim form, subject, allegato
    %>
    
    <Html>
    <head>
    <title>Email spedita</title>
    </head>
    <body>
    
    
    
    <%
    Dim oUpload 
    Set oUpload = new cUpload
    oUpload.SetPath "upload\"
    oUpload.Load
    if oUpload.Count=0 then
    	allegato = ""
    Else
    	While Not oUpload.EOF
    		oUpload.Save()
                    allegato = oUpload.GetFileName()
    		oUpload.MoveNext
    	Wend
    End if
    
    
    
    call Main()
    
    
    
    Sub Main()
    If Len(oUpload.Form("subject")) = 0 then
    no_sub()
    else 
    manda_posta(form)
    ecco_fatto(nome)
    end if
    Set oUpload=Nothing 
    End sub
    
    
    
    Sub no_sub()
    response.write "<div align='center'>"
    response.write "<table border='0' width='80%' cellspadding='4' cellspacing='4'>" 
    response.write "<tr><td>Non hai inserito un subject</td></tr>"
    response.write "<tr><td>Per favore, torna indiedro e inseriscine uno </td></tr>"
    response.write "<tr><td align='middlè>"
    response.write "<a href=Javascript:history.go(-1)>Pagina precedente</a>"
    response.write "</td></tr></table></div>"
    End Sub
    
    
    
    Sub manda_posta(form)
    Dim subject, testo
    Dim objMail, objMailConfig
    subject = oUpload.Form("subject")
    mittente = oUpload.Form("mittente")
    testo = oUpload.Form("testo")
    Set objMail = Server.CreateObject("CDO.Message")
    Set objMailConfig = Server.CreateObject ("CDO.Configuration")
    
    ' Proprietà di invio
    with objMailConfig
      ' SMTP mail server
      .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.fastwebnet.it"
      ' SMTP port
      .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
      ' CDO port
      .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      ' Timeout
      .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
      .Fields.Update
    end with
    
    Set objMail.Configuration = objMailConfig
    
    objMail.From = "mia_mail@hotmai.it"
    objMail.To = oUpload.Form("destinatario")
    objMail.Subject = subject
    objMail.TextBody = testo
    If Len(allegato) <> 0 then
    objMail.AddAttachment Server.MapPath("upload\" & allegato)
    end if
    objMail.Fields("urn:schemas:httpmail:importance").Value = 0
    objMail.Fields.update() 
    objMail.Send
    Set objMail = Nothing
    end sub
    
    
    
    Sub ecco_fatto(nome)
    response.write "<div align='center'>"
    response.write "<table border='0' width='80%' cellspadding='4' cellspacing='4'>" 
    response.write "<tr><td>Grazie " & subject & " per la mail</td></tr>"
    response.write "<tr><td align='middlè>"
    response.write "<a href=Javascript:history.go(-2)>Torna indietro</a>"
    response.write "</td></tr></table></div>"
    End sub
    
    
    
    %>
    </body>
    </html>
    Grazie, Roby.

    Solo due domande:
    1) Così come ho fatto va bene? C'è qualcosa che ho fatto a "modo mio" ma che si dovrebbe/potrebbe fare meglio?
    2) Una volta spedito il file, mi servirebbe che venisse eliminato dal server: potete dirmi come?



    Ringrazio in anticipo ^^

  7. #7
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    1) Tutto si può migliorare ma va bene...
    2) Dopo l'invio della email:
    codice:
    Set fso = CreateObject("Scripting.FileSystemObject")
    if allegato <> "" then
    if fso.fileExists (Server.MapPath("upload\" & allegato)) then
    fso.DeleteFile (Server.MapPath("upload\" & allegato)) 
    end if
    end if
    Set fso = nothing
    Roby

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57
    Ok perfetto.
    Gentilissimo e velocissimo : P
    Al prossimo problema (sperando non sia tanto presto)!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57
    Ok eccolo qui il prossimo dubbio:

    Se nel corpo della mail volessi visualizzare delle immagini (ovviamente il corpo sarebbe in formato html ed userei <img src... ) come potrei fare?

    Premessa: non posso usare un url assoluto del mio server in quanto le img devono essere visualizzabili anche a server non raggiungibile.
    Ho letto che basta spedire l'img come allegato della mail e poi "linkarla" nel body della stessa. A questo punto il dubbio si spezza in due:

    1)
    Come linko nel corpo della mail un'img allegata? Ovvero, che path dovrò mettere nel tag apposito?

    2)
    Posso inserire più allegati?
    Altrimenti tutta la fatica fatta finora è sprecata, se dopo aver capito come allegare un file ad una mail devo occupare lo slot dell'attachment per l'immagine/logo che la mail deve avere ^^;
    Edit:
    Ok, ho provato, basta usare più volte
    .AddAttachment
    Adesso resta solo il punto numero 1



    Grazie in anticipo!

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    57
    E ancora:

    Come ho scritto prima, per fare l'upload dell'allegato uso questo codice
    codice:
    Sub up_file(form)
    oUpload.SetPath "upload\"
    if oUpload.Count=0 then
    	allegato = ""
    Else
    	While Not oUpload.EOF
    		oUpload.Save()
                                        allegato = oUpload.GetFileName()
    		oUpload.MoveNext
    	Wend
    End if
    End sub


    Ora, finchè l'allegato è uno solo, tutto ok.
    Ma così tengo solo conto (in "allegato") dell'ultimo file. Se gli allegati fossero di più perdo i riferimenti agli altri.
    Se volessi quindi, dopo l'upload, utilizzarli, linkarli nella mail o altro, da dove prendo i vari FileName?
    Pensavo di usare una qualche struttura tipo array, ma non posso sapere a priori quanti allegati inserirà l'utente.
    Sono un pò novellino di vbscript non so cosa possa fare al caso mio.
    Consigli?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.