C# 发送用户随邮件选择的附件

C# 发送用户随邮件选择的附件,c#,html,asp.net,email,attachment,C#,Html,Asp.net,Email,Attachment,问题: 我希望用户可以给我发送带有附件的邮件。他们可以通过html中的“输入文件”按钮选择文件。问题是它找不到文件。它工作正常,没有附件 我得到这个错误 文件C:找不到ExpressGIPENGLISH.pptx IIS的程序文件(x 86) 有人有什么想法吗 我所尝试的: 尝试先将文件上载到该位置,但仍然无法工作 输入文件按钮 <INPUT type=file id=File1 name=File1 runat="server" >&nbsp; </asp:Conte

问题

我希望用户可以给我发送带有附件的邮件。他们可以通过html中的“输入文件”按钮选择文件。问题是它找不到文件。它工作正常,没有附件

我得到这个错误

文件C:找不到ExpressGIPENGLISH.pptx IIS的程序文件(x 86)

有人有什么想法吗

我所尝试的

尝试先将文件上载到该位置,但仍然无法工作

输入文件按钮

<INPUT type=file id=File1 name=File1 runat="server" >&nbsp; </asp:Content>

结果:我希望用户可以向我发送一封带有他自己选择的附件的邮件,该附件位于他的计算机上。我可以收到邮件并打开附件。提前感谢

您需要先将发布的文件保存到服务器,然后才能将其添加为附件。您还可以从MemoryStream中添加附件,因此这可能是另一种不必保存文件本身的方法。

下面是一个完整的示例,可以将文件作为附件添加到电子邮件中,而无需将其写入磁盘

using (SmtpClient client = new SmtpClient())
using (MailMessage message = new MailMessage())
{
    client.Host = "host.com";
    client.Port = 25;
    client.Timeout = 10000;
    client.EnableSsl = false;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("user", "pass");

    message.From = new MailAddress("email@from.nl", "VDWWD");
    message.To.Add(new MailAddress("email@to.nl"));
    message.Subject = "Your uploaded files";
    message.IsBodyHtml = true;
    message.Body = "<html><head></head><body><font face=\"arial\" size=\"2\"><b>The files you uploaded.</b></font></body></html>";

    //loop all the uploaded files
    foreach (var file in FileUpload1.PostedFiles)
    {
        //add the file from the fileupload as an attachment
        message.Attachments.Add(new Attachment(file.InputStream, file.FileName, MediaTypeNames.Application.Octet));
    }

    //send mail
    try
    {
        client.Send(message);
    }
    catch (Exception ex)
    {
        //handle error
    }
}
使用(SmtpClient=new SmtpClient())
使用(MailMessage=newmailmessage())
{
client.Host=“Host.com”;
客户端端口=25;
client.Timeout=10000;
client.enablesl=false;
client.DeliveryMethod=SmtpDeliveryMethod.Network;
client.UseDefaultCredentials=false;
client.Credentials=新的网络凭据(“用户”、“通过”);
message.From=新邮件地址(“email@from.nl“,“VDWWD”);
message.To.Add(新邮件地址(“email@to.nl"));
message.Subject=“您上传的文件”;
message.IsBodyHtml=true;
message.Body=“您上载的文件。”;
//循环所有上传的文件
foreach(FileUpload1.PostedFiles中的var文件)
{
//将文件上载中的文件添加为附件
message.Attachments.Add(新附件(file.InputStream、file.FileName、MediaTypeNames.Application.Octet));
}
//寄信
尝试
{
客户端。发送(消息);
}
捕获(例外情况除外)
{
//处理错误
}
}

您需要先将发布的文件保存到服务器,然后才能将其添加为附件。您还可以从MemoryStream中添加附件,因此这可能是另一种不必保存文件本身的方式。。。或者最简单的方法:直接使用
HttpPostedFile.InputStream
创建
附件
。。。没有储蓄,就没有不必要的东西MemoryStream@Selvin你有更多的信息或例子吗?我查了一下,它对我来说非常复杂。几个月前才开始编程。advanceNo感谢您,因为@Selvin说您不需要先将其存储在服务器上,然后将其作为附件添加。
using (SmtpClient client = new SmtpClient())
using (MailMessage message = new MailMessage())
{
    client.Host = "host.com";
    client.Port = 25;
    client.Timeout = 10000;
    client.EnableSsl = false;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("user", "pass");

    message.From = new MailAddress("email@from.nl", "VDWWD");
    message.To.Add(new MailAddress("email@to.nl"));
    message.Subject = "Your uploaded files";
    message.IsBodyHtml = true;
    message.Body = "<html><head></head><body><font face=\"arial\" size=\"2\"><b>The files you uploaded.</b></font></body></html>";

    //loop all the uploaded files
    foreach (var file in FileUpload1.PostedFiles)
    {
        //add the file from the fileupload as an attachment
        message.Attachments.Add(new Attachment(file.InputStream, file.FileName, MediaTypeNames.Application.Octet));
    }

    //send mail
    try
    {
        client.Send(message);
    }
    catch (Exception ex)
    {
        //handle error
    }
}