Avendo incontrato inrisolti problemi con la mail di PHP, stavo provando a usare il sistema proposto da Microsoft.
Il problema è che mi serve inviare a un indirizzo non pubblicato, nome, indirizzo email, testo e (eventualmente) un allegato di chi scrive.
Ho visto che con questo metodo (pagine aspx) occorre fare upload degli alegati sul server, per cui, ecco uno schema del mio form:
codice:
<form method = "post" name = "frmemail" runat = "server" enctype="multipart/form-data" onSubmit = "return Tocheck(this)">
<span style="color:red">*</span> Nome o pseudonimo:
<asp:TextBox Columns="60" ID = "txtName" runat = server></asp:TextBox>
</p>
<span style="color:red">*</span> E-Mail obbligatorio:
<asp:TextBox Columns="60" ID = "txtFrom" Runat =server></asp:TextBox></p>
</p>
Testo:
<asp:TextBox Columns="46" ID="txtMsg" Rows="5" runat="server" Text="Nome e Cognome:" TextMode="MultiLine">Nome e cognome:</asp:TextBox>
</p>
Allega file:
<input name="" type = "file" id = "txtFile" size="40" runat = "server">
</p>
</p>
<div style="width:200px; float:left"></div>
<div align="center" style="float:left">
<asp:Button Runat = server ID = "btnSubmit" Text = "Invio" OnClick = "btnSubmit_Click"></asp:Button></p></div>
</form>
La mia scarsa conoscenza del metodo e del linguaggio, non mi ha fino ad ora permesso di liberarmi di quel "onSubmit = "return Tocheck(this)", che fa riefrimento a uan routine Jscript che dice semplicemente "non è stato allegato alcun file".
Perché il problema è prorpio questo: fare in modo che se non è allegato un file, parta la posta senza file.
Ecco qui la parte C#, più il famigerato Jscript di cui sopra:
codice:
<script language = "javascript">
function Tocheck(frmemail) {
if(frmemail.txtFile.value == "") {
alert("Non è stato allegato alcun file");
frmemail.txtFile.focus();
return(false);
}
}
</script>
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Mail" %>
<%@ Import Namespace="System.IO" %>
<script runat="server">
string txtSubject = "Il soggetto lo scelgo io";
string txtTo = "io@mioserver.it";
void btnSubmit_Click(Object sender, EventArgs e) {
MailMessage mail = new MailMessage();
mail.From = txtFrom.Text; /* qui si dovrebbe trovare il modo di creare qualcosa tipo "pippo <pippo@suoserver.it>" usando txtName.Text */
mail.To = txtTo;
mail.Subject = txtSubject;
mail.Body = txtMsg.Text;
mail.BodyFormat = MailFormat.Html;
// attualmente è obbligatorio mettere un allegato ...
string strdir = "D:\\inetpub\\webs\\public\\temp\\";
string strfilename = Path.GetFileName(txtFile.PostedFile.FileName);
txtFile.PostedFile.SaveAs(strdir+strfilename);
mail.Attachments.Add(new MailAttachment(strdir+strfilename));
// questo gruppo dovrebbe diventare condizionale: se esiste allegato esegui, altrimenti no!
try
{
SmtpMail.Send(mail);
Response.Redirect("ok.asp");
}
catch(Exception ex)
{
Response.Redirect("ko.asp");
}
// Uploaded file deleted after sending e-mail
File.Delete(strdir+strfilename);
}
</script>