Pièce jointe formulaire asp.net [Résolu]

cirtey 30 Messages postés lundi 29 janvier 2007Date d'inscription 8 mai 2009 Dernière intervention - 2 janv. 2008 à 18:04 - Dernière réponse : cirtey 30 Messages postés lundi 29 janvier 2007Date d'inscription 8 mai 2009 Dernière intervention
- 3 janv. 2008 à 09:25
Bonjour;

Je cherche à ajouter une fonctionnalité attacher pièce jointe à mon formulaire asp.net sans succès.

J'ai le message d'erreur suivant:
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 55:
Line 56: String StrFileName = "";
Line 57: StrFileName = Request.Files["fileAttachment"].FileName;
Line 58: if (StrFileName != "")
Line 59: {

Source File: c:\Documents and Settings\TBSoltane\Mes documents\Visual Studio 2008\WebSites\Prestige\Fra\frContact.aspx.cs Line: 57

Le code frContact.aspx:


[frContact.aspx Contact]
[frDefault.aspx Accueil]
[frProducts.aspx Produits]
[frPartners.aspx Partenaires]
[frReferences.aspx Réferences]
[frAbout.aspx A propos]
[frTestimonials.aspx Témoignages]






Contactez-nous



Siège social



Prestige concepts

LL1/9-Kortoba Riadh El Andalous

2058 Ariana Tunis Tunisie



tel: (+216)71 82 07 47 / (+216)71 82 07 46



fax: (+216)71 82 07 48


[mailto:info@prestigeconcepts.com info@prestigeconcepts.com]









----

Entreprise,
,
*,

----

Nom,
,
*,

----

Email,
,
*
*,

----

Tél.,
,
*,

----

Message*,
,
*
*,

----

Attachment,
,




 





Tous les champs sont obligatoires


* = Maximum 1000 caractères, minimum 20.












 






Prestige Concepts à votre écoute.





Si vous avez une quetion, n'hésitez pas à nous contacter. Une équipe réactive et dynamique vous répondra rapidement. 







Le code de frContact.aspx.cs:
using System;
using System.Web.Mail;
using System.IO;

public partial class frContact : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputFile file;
protected void CustomValidator1_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
{
if ((txtMessage.Text.Length < 20) || (txtMessage.Text.Length > 1000))
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtName.Text = "";
txtEmail.Text = "";
txtCompany.Text = "";
txtPhone.Text = "";
txtMessage.Text = "";
}
}

protected void btnValidate_Click(object sender, EventArgs e)
{

MailMessage email = new MailMessage();

email.From = "site@prestigeconcepts.fr";
email.To = "info@prestigeconcepts.fr";

email.Body =
"Name :"
+ txtName
+ "\r\n"
+ "Email :"
+ txtEmail
+ "\r\n"
+ "Company: "
+ txtCompany.Text
+ "\r\n"
+ "Phone : "
+ txtPhone.Text
+ "\r\n"
+ "Message : "
+ txtMessage.Text;

String StrFileName = "";
StrFileName = Request.Files["fileAttachment"].FileName;
if (StrFileName != "")
{

//extraction fichier avec chemin
StrFileName = StrFileName.Substring(StrFileName.LastIndexOf("\") + 1);
//enregistrement en temp
Request.Files["fileAttachment"].SaveAs(Server.MapPath(StrFileName));
//attacher le fichier
MailAttachment MyAttachment = new MailAttachment(Server.MapPath(StrFileName));
email.Attachments.Add(MyAttachment);
}

email.Priority = MailPriority.High;

SmtpMail.SmtpServer = "smtp.planet.tn";

try
{
SmtpMail.Send(email);
}
catch (Exception ex)
{
lblError.Text = ex.Message;
}
finally
{
lblError.Text = "Message envoyé avec succès";

}
if (StrFileName != "")
File.Delete(Server.MapPath(StrFileName));

}

}

Je pense que je doit créer un objet et l'instancier pour résoudre le
problème. Mais, j'ai beau chercher, je ne sais pas comment faire.


Merci de votre aide.
Afficher la suite 

Votre réponse

2 réponses

cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 2 janv. 2008 à 22:54
+3
Utile
Salut,


Quelques remarques au passage :


email.Body =
"Name :"
+ txtName
+ "\r\n"
+ "Email :"
+ txtEmail
+ "\r\n"
+ "Company: "
+ txtCompany.Text
+ "\r\n"
+ "Phone : "
+ txtPhone.Text
+ "\r\n"
+ "Message : "
+ txtMessage.Text;


a remplacer par quelquechose du genre :


email.Body = String.Format("Name :{0}\r\nEmail :{1}\r\nCompany: {2}\r\nPhone : {3}\r\nMessage : {4}",
txtName,
txtEmail,
txtCompany.Text,
txtPhone.Text,
txtMessage.Text
);


 


 




String StrFileName = "";
StrFileName = Request.Files["fileAttachment"].FileName;
if (StrFileName != "")
{
    //extraction fichier avec chemin
    StrFileName = StrFileName.Substring(StrFileName.LastIndexOf("\") + 1);
    //enregistrement en temp
    Request.Files["fileAttachment"].SaveAs(Server.MapPath(StrFileName));
    //attacher le fichier
    MailAttachment MyAttachment = new MailAttachment(Server.MapPath(StrFileName));
    email.Attachments.Add(MyAttachment);
}


a remplacer par quelquechose de ce genre


String StrFileName = "";
HttpPostedFile attachment = Request.Files["fileAttachment"];
if ( attachment != null )
{
    //extraction fichier avec chemin
    StrFileName = Path.GetFileName(attachment.FileName);
   
    //enregistrement en temp
    attachment.SaveAs(Server.MapPath(StrFileName));
   
    //attacher le fichier
    MailAttachment MyAttachment = new MailAttachment(Server.MapPath(StrFileName));
    email.Attachments.Add(MyAttachment);
}






Hormis ceci, essaie de penser à ce qui va se passer si 2 utilisateurs attachent chacun un fichier portant le même nom...
De plus je vois que tu es en .NET 3.5, hors les classes utilisant MailAttachment sont obsolètes depuis .NET 2.0, comme indiqué en rouge gras dans la doc : http://msdn2.microsoft.com/fr-fr/library/system.web.mail.mailattachment(VS.80).aspx

Surtout que dans les nouvelles classes, les pièces jointes peuvent provenir d'un flux, ce qui tombe bien vu que la classe HttpPostedFile en fourni justement un, résolvant au passage ton problème d'écriture sur disque.

/*
coq
MVP Visual C#
CoqBlog
*/
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
cirtey 30 Messages postés lundi 29 janvier 2007Date d'inscription 8 mai 2009 Dernière intervention - 3 janv. 2008 à 09:25
0
Utile
Merci pour ton retour.
J'ai finalement opté hier pour un asp:fileupload à la place de la méthode se basant sur du html et cela marche.
Commenter la réponse de cirtey

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.