2009-05-14 6 views
0

J'ai un problème dans la pièce jointe. J'utilise le contrôle fileupload pour obtenir le chemin du fichier de la machine locale.problème avec la pièce jointe

Il donne le chemin correct, mais tout en attachant le fichier à partir de n'importe quel dossier, il donne une erreur "Pièce jointe non valide".

Voici le code ..

protected void sndmail_Click(object sender, EventArgs e) 
    { 
     objmail = new MailMessage(); 
     objmail.From = txt_sender.Text; 
     objmail.To = txt_recipient.Text; 
     objmail.Cc = txt_cc.Text; 
     objmail.BodyFormat = MailFormat.Text; 
     objmail.Priority = MailPriority.High; 
     objmail.Subject = txt_sub.Text; 
     objmail.Body = txt_body.Text; 
     SmtpMail.SmtpServer = "localhost"; 
     SmtpMail.Send(objmail); 
     Response.Write("Mail send successfully..."); 

    } 


    protected void attch_Click(object sender, EventArgs e) 
    { 
     string mypath = System.IO.Path.GetFullPath(FileUpload1.FileName); 
     MessageBox.Show(mypath); 
     MailAttachment attch = new MailAttachment(mypath); 

     objmail.Attachments.Add(attch); 
    } 

Pouvez-vous me aider à comprendre pourquoi je vois cette erreur?

+0

Est-ce que ce code travailler du tout? Dans l'événement de clic pour le bouton de pièce jointe vous vous référez à l'objet d'email, mais dans l'événement de clic d'envoi vous créez un nouvel email et envoyez cela ... –

Répondre

0

objmail = nouveau MailMessage();

objmail.Attachments.Add(new MailAttachment(FileUpload1.PostedFile.FileName)); 
    objmail.From = txt_sender.Text; 
    objmail.To = txt_recipient.Text; 
    objmail.BodyFormat = MailFormat.Text; 
    objmail.Priority = MailPriority.High; 
    objmail.Subject = txt_sub.Text; 
    objmail.Body = txt_body.Text; 
    SmtpMail.SmtpServer = ""; 
    SmtpMail.Send(objmail); 
    Response.Write("Mail send successfully..."); 

maintenant son fichier de travail .... en utilisant cette ligne ..... (SmtpMail.SmtpServer = "";)

des réponses Thanx alll ...

1

La propriété FileName du contrôle FileUpload vous donnera le nom du fichier sur le client, alors que le code qui crée le message est en cours d'exécution sur le serveur . Vous devrez d'abord stocker le fichier sur le serveur, puis vous référer à ce chemin lors de la création de la pièce jointe.

string fileNameOnServer = Path.Combine("<some writeable path on your server>", FileUpload1.FileName); 
FileUpload1.SaveAs(fileNameOnServer); 

// now you can user fileNameOnServer to attach the file to a mail message 
objMail.Attachments.Add(new Attachment(fileNameOnServer)); 
+0

non monsieur son ne fonctionne pas .. –

1

Lorsque le code objmail.Attachments.Add(attch); est exécuté, la variable objmail n'est pas instancié et donc vous obtenez l'erreur.

Cette ligne de code doit être écrit dans la méthode sndmail_Click après objmail = new MailMessage();

S'il vous plaît l'esprit le fait que attch est une variable locale dans attch_Click méthode et ne serait pas accessible dans la méthode sndmail_Click. Vous devez rendre cette variable disponible pour les deux méthodes, donc déclarer avec où vous avez déclaré la variable objmail.

Modifier:

Cependant, comme Fredrick a souligné dans sa réponse que vous devez enregistrer le fichier sur le serveur dans la méthode attch_Click et dans la méthode sndmail_Click ajouter le fichier enregistré à la collection objmail.Attachments.

+0

non monsieur lui encore donnant la même erreur. –

+0

@Aarsh - Vous devez combiner Fredrick et mes réponses. Vous devez enregistrer le fichier dans le serveur dans la méthode attch_Click (comme Fred l'a mentionné à juste titre) et dans sndmail_Click, sélectionnez le fichier enregistré et ajoutez-le à la collection objmail.Attachments avant d'appeler SmtpMail.Send (objmail). –

Questions connexes