ERRORE invio E-mail con Asp.net

martedì 29 giugno 2010 - 23.24

terravulcanica Profilo | Newbie

Salve ho creato in ASP.NET il modulo per invio email dal mio sito, solo che mi sono accorto che non vengono eseguiti i validatori cioè:
per ogni textbox ho impostato di verificare che essi non siano vuoti ad esempio:

Oggetto del messaggio:<br />
<asp:TextBox id="txtOggetto" runat="server"/>
<asp:RequiredFieldValidator id="RequiredFieldValidator3"
ControlToValidate="txtOggetto"
Text="il campo non può essere vuoto!"
EnableClientScript="false"
Display="Dynamic"
runat="server"/><br />

Inoltre ho impostato una label così:
Label1.Text = "E-mail inviata con successo!"
se tutto andava bene
oppure
Label1.Text = "Errore nell'invio dell'e-mail"
se qualcosa non andava

purtroppo quando invio l'email scompare la form perchè ho impostato: formEmail.visible = false per cui non mi fa vedere la label1 con il messaggio "E-mail inviata con successo!" come posso fare per far scomparire il modulo di invio e la label1?
Inoltre una volta che il modulo ha inviato l'email è possibile far ripulire i campi in modo tale che se l'utente dovesse ricaricare la pagina vedrebbe il modulo ripulito?

E' proprio necessario impostare i seguenti campi? io non li ho proprio inseriti eppure funziona ma dovrei inserirli?

'eseguo autenticazione sul server SMTP
'usare i dati di una qualunque casella del dominio
mail.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
mail.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "tuacasella@tuodominio.com"
mail.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passwordcasella"

Forse non sono necessari?

Grazie infinite

skraus Profilo | Junior Member

formEmail cos'è ? inoltre perchè sui validator la proprietà EnableClientScript la tieni uguale a false ? in questo modo la validazione la deleghi al server, al contrario se imposti detta proprietà a true ti vengono generati i necessari script Javascript per eseguire la validazione client side.

Se posti il codice relativo all'insieme dei controlli per l'invio della mail risulterebbe più chiaro il problema.

Per fare l'invio della mail che oggetto usi ? System.Net.Mail.MailMessage ?
Sk

Gluck74 Profilo | Guru

c'è un po' di confusione in effetti, non si capisce bene come è costruita la pagina.
In linea di massima comunque:
- lascia abilitato il clientScript per i validator, così viene gestito in automatico il postBack solo se tutto ok, altrimenti dovresti andare a congtrollare tu da codice se la pagina è valida e non eseguire l'invio della mail altrimenti.
- se inviando la mail metti frmMail.Visible=false, è naturale che la label dove scrivi il risultato DEVE essere fuori da questo form, altrimenti non la leggerai mai.
- per azzerare i campi del form, devi settare uno ad uno la proprietà text a string.Empty, altrimenti vedrai sempre i valori precedentemente inviati.

ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

terravulcanica Profilo | Newbie

Grazie per l'interesse dimostrato, di seguito posto il codice dello script:

<!-- Script ASP per invio E-mail -->
<%@ Import Namespace="System.Web.Mail"%>
<script language="VB" runat="server">
Sub ButtonClick(sender As Object, e As EventArgs)
Try
Dim mail As New MailMessage
mail.From = txtEmail.Text
mail.To = "email@nomesito.it"
mail.Subject = txtOggetto.Text
mail.Body = "E-mail proveniente dal sito" & vbCrLf & "Mittente: "& txtNome.Text & vbCrLf & "Messaggio: " & txtMessaggio.Text

'imposto il server SMTP da usare, quello del mio dominio

SmtpMail.SmtpServer = "smtp.aruba.it"
SmtpMail.Send(mail)

' nascondo la form
form1.visible = false

Label1.Text = "E-mail inviata con successo!"

Catch exc As Exception
Label1.Text = "Errore nell'invio del messaggio: controllare la corretta compilazione dei campi del modulo per l'invio dell'e-mail"
End Try
End Sub
</script>

Ecco invece il form:

<div class="boxContenuto">
<h2>Contatta la iocus animazione</h2>
<form id="form1" runat="server">
<asp:Label id="Label1" runat="server"/><br />
Indicare il Nome:<br />
<asp:TextBox id="txtNome" runat="server"/>
<asp:RequiredFieldValidator id="RequiredFieldValidator1"
ControlToValidate="txtNome"
Text="il campo non può essere vuoto!"
EnableClientScript="false"
Display="Dynamic"
runat="server"/><br />

Indirizzo e-mail:<br />
<asp:TextBox id="txtEmail" runat="server"/>
<asp:RequiredFieldValidator id="RequiredFieldValidator2"
ControlToValidate="txtEmail"
Text="il campo non può essere vuoto!"
EnableClientScript="false"
Display="Dynamic"
runat="server"/><br />

Oggetto del messaggio:<br />
<asp:TextBox id="txtOggetto" runat="server"/>
<asp:RequiredFieldValidator id="RequiredFieldValidator3"
ControlToValidate="txtOggetto"
Text="il campo non può essere vuoto!"
EnableClientScript="false"
Display="Dynamic"
runat="server"/><br />

Inserire un Messaggio:<br />
<asp:TextBox id="txtMessaggio" TextMode="MultiLine" Columns="50" Rows="10" runat="server"/>
<asp:RequiredFieldValidator id="RequiredFieldValidator4"
ControlToValidate="txtMessaggio"
Text="il campo non può essere vuoto!"
EnableClientScript="false"
Display="Dynamic"
runat="server"/><br />

<asp:Button id="btnInvia"
Text="Invia"
OnClick="ButtonClick"
runat="server"/><br />

</form>
</div>

Vorrei che l'utente invii l'email e successivamente gli compaia la scritta che l'email è stata inviata correttamente.
Ma se l'utente volesse inviare una seconda e-mail? (consigliatemi)
Per la verifica della l'email corretta inserita dall'utente?
GRAZIE

Gluck74 Profilo | Guru

Per l'appunto la label1 sta dentro il form, quindi non sarà mai visibile in caso di mail inviata.
Inoltre, ti consiglio vivamente di [b]non nascondere MAI il form principale della pagina aspx[/b], rischi di generare errori gravi.

crea una pagina con questa struttura DENTRO il form:
<form id="form1" runat="server"> <asp:panel runat="server" id="pnlmail"> </asp:panel> <asp:panel runat="server" id="pnlFine"> </asp:panel> </form>
La label1 la lasci fuori dal panel, e ti consiglio PRIMA del panel.
dentro il primo pannello, metti tutto quello che ti server per scrivere la mail;
nel secondo pannello metti due sempli link: "scrivi altra mail" e "home" (al posto di home quello che vuoi per cambiare pagina)

Nel Load della pagina ti preoccuperai di visualizzare il primo pannello e nascondere il secondo, se la pagina non è in postBack,
mantenere questo aspetto se la mail ha dato errore,
nascondere il primo pannello e visualizzare il secondo se la mail è stata inviata.

Ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

terravulcanica Profilo | Newbie

Grazie!!!
Scusa la mia ignoranza, dato che tutto il codice postato sopra è all'interno di un unico file, è bene separare lo script dal form cioè mettere in un file il codice script e nella pagina principale dei contatti il form? e come dovrei fare?
Inoltre data sempre la mia ignoranza, come faccio a verificare che la pagina sia in postBack?
cosa vuol dire "nel Load della pagina?"

Scusate ma io sto iniziando proprio ora e sinceramente non ho ancora ben capito il funzionamento di ASPX...

Grazie infinite

Gluck74 Profilo | Guru

U.P. - P.S.:
scusa, mi sono accorto adesso che tu usi VB e io ti ho scritto tutto in cs...... hi hi


>Scusate ma io sto iniziando proprio ora e sinceramente non ho
>ancora ben capito il funzionamento di ASPX...
ti consiglio allora una guida anche semplicissima, tipo quelle che trovi su html.it o siti simili.
In un paio di ore al massimo impari le basi per lavorare tranquillo per cose che devi fare come quelle che mi stai chiedendo

>Grazie!!!
>Scusa la mia ignoranza, dato che tutto il codice postato sopra
>è all'interno di un unico file, è bene separare lo script dal
>form cioè mettere in un file il codice script e nella pagina
>principale dei contatti il form? e come dovrei fare?
utile ma non necessario.
Se usi visual studio, quando crei una nuova pagina, nella finestra di dialogo dove scrivi il nome, proprio accanto ti chiede se vuoi mettere il codice in un file separato "Inserisci il codice in un file separato".
Confermando questo, ti viene creato, per una pagina "testCodice", il file testCodice.aspx e testCodice.aspx.cs
separando tutti i tag html e asp nel primo file, e tutto il codice nel secondo.


>Inoltre data sempre la mia ignoranza, come faccio a verificare
>che la pagina sia in postBack?
>cosa vuol dire "nel Load della pagina?"

nel load della pagina vuol dire all'interno della function associata all'evento PageLoad.
in effetti, il codice scritto sotto che sta all'interno appunto di Page_Load, lo puoi mettere anche nella function che usi adesso (buttonclick mi sembra)
protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) { //mando la mail } else { //nascondo il pannello con il form della mail //visualizzo il pannello con i link } }

>Grazie infinite
de nada

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5