邮件附件的问题

时间:2009-05-14 08:07:46

标签: asp.net

我在邮件附件方面遇到问题。我正在使用fileupload控件来获取路径 来自本地机器的文件。

它提供了正确的路径,但在从任何文件夹中附加文件时,它给出错误“邮件附件无效”。

以下是代码..

  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);
    }

你能帮我弄清楚为什么我会看到这个错误吗?

3 个答案:

答案 0 :(得分:1)

FileUpload控件的FileName属性将为您提供客户端上文件的名称,而创建邮件消息的代码正在服务器上运行。您需要先将文件存储在服务器上,然后在创建邮件附件时参考该路径。

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));

答案 1 :(得分:1)

执行objmail.Attachments.Add(attch);代码时,objmail变量未实例化,因此您收到错误。

这行代码应该在sndmail_Click

之后用objmail = new MailMessage();方法编写

请注意,attchattch_Click方法中的局部变量,无法在sndmail_Click方法中访问。您应该将此变量用于两个方法,因此声明您声明objmail变量的位置。

修改

但是,正如Fredrick在回答中所述,您需要使用attch_Click方法将文件保存在服务器中,并使用sndmail_Click方法将保存的文件添加到objmail.Attachments集合中

答案 2 :(得分: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...");

现在它的工作文件.... 使用这一行......(SmtpMail.SmtpServer =“”;)

感谢alll回复...