2009-05-14 24 views
0

Ich habe ein Problem in der E-Mail-Anlage. Ich verwende das Fileupload-Steuerelement, um den Pfad der Datei von der lokalen Maschine zu erhalten.Problem mit E-Mail-Anhang

Es gibt den richtigen Pfad, aber während die Datei aus jedem Ordner die Fehlermeldung "Ungültiger E-Mail-Anhang" gibt.

Im Folgenden finden Sie den 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); 
    } 

Können Sie mir helfen, arbeiten, warum ich diesen Fehler zu sehen bin?

+0

Wird dieser Code überhaupt arbeiten? In dem Click-Ereignis für die Anlage Schaltfläche beziehen Sie sich auf das E-Mail-Objekt, aber in der Sende-Click-Ereignis erstellen Sie eine neue E-Mail und senden Sie diese ... –

Antwort

0

objmail = new 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..."); 

jetzt seine Arbeitsdatei .... diese Zeile mit ..... (SmtpMail.SmtpServer = "";)

Danke für alll Antworten ...

1

Die Eigenschaft File-Name des Fileupload-Steuerelement geben Sie den Namen der Datei auf dem Client , während der Code, der die E-Mail-Nachricht auf dem Server ausgeführt wird, zu schaffen. Sie müssen die Datei zuerst auf dem Server speichern und dann beim Erstellen des Mail-Anhangs auf diesen Pfad verweisen.

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

Nein, es funktioniert nicht .. –

1

Wenn der objmail.Attachments.Add(attch); Code ausgeführt wird, die objmail Variable nicht instanziert wird, und daher werden Sie den Fehler.

Diese Codezeile soll nach objmail = new MailMessage();

in sndmail_Click Methode geschrieben wird dagegen Bitte geben Sie die Tatsache, dass attch eine lokale Variable in attch_Click Verfahren und würde in den sndmail_Click Verfahren nicht zugänglich sein. Sie sollten diese Variable für beide Methoden verfügbar machen und daher zusammen mit der Variablen objmail deklarieren.

bearbeiten:

Doch wie Fredrick in seiner Antwort skizziert hat, müssen Sie die Datei auf dem Server in den attch_Click Verfahren und in der sndmail_Click Methode fügen Sie die gespeicherte Datei auf die objmail.Attachments Sammlung speichern.

+0

nein, Sir immer noch denselben Fehler. –

+0

@Aarsh - Sie müssen beide Fredricks & meine Antworten kombinieren. Sie müssen die Datei auf dem Server in der attch_Click-Methode speichern (wie Fred zu Recht erwähnt hat) und in sndmail_Click die gespeicherte Datei auswählen und zur objmail.Attachments-Sammlung hinzufügen, bevor Sie SmtpMail.Send (objmail) aufrufen. –