Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过文件上传获得准确的文件路径,通过电子邮件C#ASP.NET发送文件_C#_Asp.net_Email_File Upload_Path - Fatal编程技术网

通过文件上传获得准确的文件路径,通过电子邮件C#ASP.NET发送文件

通过文件上传获得准确的文件路径,通过电子邮件C#ASP.NET发送文件,c#,asp.net,email,file-upload,path,C#,Asp.net,Email,File Upload,Path,我想用c#ASP.net通过电子邮件发送一个文件(可能还会发送更多文件,但目前我只关心发送至少一个文件) 目前,如果你想发送电子邮件,我确实有一种方法可以奏效 public string EnviarMensaje(int intIdVendedor, string strCorreoPara, string strCorreosAdicionales, string strTema, string strMensaje, string strRuta) { string

我想用c#ASP.net通过电子邮件发送一个文件(可能还会发送更多文件,但目前我只关心发送至少一个文件)

目前,如果你想发送电子邮件,我确实有一种方法可以奏效

public string EnviarMensaje(int intIdVendedor, string strCorreoPara, string strCorreosAdicionales, string strTema, string strMensaje, string strRuta)
    {
        string strResultado="";
        DataTable dt = ConexionBD.GetInstanciaConexionBD().GetVendedorEspecifico(intIdVendedor);
        string strCuerpo = strMensaje + "\n\n\n\nMensaje Enviado Por:\n" + dt.Rows[0]["Vendedor"] + "\n" + dt.Rows[0]["Email"] + "\n" + dt.Rows[0]["Telefono"];
        string[] strListaCorreos = strCorreosAdicionales.Split(new Char[] {' ', ','}, StringSplitOptions.RemoveEmptyEntries);

        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtpout.secureserver.net");

            mail.Subject = strTema;
            mail.Body = strCuerpo;
            mail.From = new MailAddress(strCorreoDe);
            mail.To.Add(strCorreoPara);

            foreach (string c in strListaCorreos)
            {
                mail.To.Add(c);
            }

            if (strRuta != "")
            {
                Attachment attachment;
                attachment = new Attachment(strRuta);
                mail.Attachments.Add(attachment);
            }

            SmtpServer.Port = 80;
            SmtpServer.Credentials = new System.Net.NetworkCredential(strCorreoDe, strContrasena);
            SmtpServer.EnableSsl = false;

            SmtpServer.Send(mail);
            strResultado = "Exito";
        }

        catch (Exception ex)
        {
            strResultado = ex.ToString();
        }

        return strResultado;
    }
在aspx中,我有

<asp:FileUpload ID="fileUploadArchivos" runat="server" />

<asp:ImageButton ID="imgBtnEnviar" runat="server" Height="60px" Width="60px" ImageUrl="~/img/iconos/email.png" CausesValidation = "True" ValidationGroup="vgpCorreo" onclick="imgBtnEnviar_Click" />
}

但是,问题在于文件上载。 我尝试过很多方法,比如Server.MapPath、Path.GetFileName、GetDirectoryName、GetFullPath、GetPathRoot。。。我总是什么也得不到,只有文件名或者一个完全不同的路径(我猜是一个服务器类的路径)

我只是暂时想得到一个像C:\Test.txt这样简单的文件路径,例如。。。 我想如果我能从文件上传中得到准确的字符串,我就能发送它。。。然而,我不知道如何使它工作

希望你能帮助我
谢谢

如果您需要保存在服务器上的上传文件的本地副本,只需

fuFileUpload.SaveAs(MapPath(filepath));
然后您的struta可以使用您刚才通过

strRuta = Server.MapPath(filepath);

准备传递到新的附件对象。

如果只想将文件添加为附件,则不需要将文件保存到磁盘

FileUpload
的属性是
——类的一些构造函数将流作为参数

解决方案是将此流传递给您的方法并直接使用它

在代码隐藏中:

string strResultado = objEmail.EnviarMensaje((int)Session["IdVendedor"], 
                                             lblCorreoPara.Text, 
                                             tbxCorreoPara.Text, 
                                             tbxTema.Text, 
                                             tbxMensaje.Text, 
                                             fileUploadArchivos.FileContent);
在你们班:

public string EnviarMensaje(int intIdVendedor, 
                            string strCorreoPara, 
                            string strCorreosAdicionales, 
                            string strTema, 
                            string strMensaje, 
                            Stream attachmentData)
{

...

  var attachment = new Attachment(attachmentData, "nameOfAttachment");

...

}

您可以尝试使用流而不是简单的文本:

public string EnviarMensaje(int intIdVendedor, string strCorreoPara, string strCorreosAdicionales, string strTema, string strMensaje, string strRuta)
    {
        string strResultado="";
        DataTable dt = ConexionBD.GetInstanciaConexionBD().GetVendedorEspecifico(intIdVendedor);
        string strCuerpo = strMensaje + "\n\n\n\nMensaje Enviado Por:\n" + dt.Rows[0]["Vendedor"] + "\n" + dt.Rows[0]["Email"] + "\n" + dt.Rows[0]["Telefono"];
        string[] strListaCorreos = strCorreosAdicionales.Split(new Char[] {' ', ','}, StringSplitOptions.RemoveEmptyEntries);

        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtpout.secureserver.net");

            mail.Subject = strTema;
            mail.Body = strCuerpo;
            mail.From = new MailAddress(strCorreoDe);
            mail.To.Add(strCorreoPara);

            foreach (string c in strListaCorreos)
            {
                mail.To.Add(c);
            }

            bool hasAttachment = !string.IsNullOrWhitespace(strRuta);
            System.IO.FileStream stream = null;
            Attachment attachment = null;

            if (hasAttachment)
            {
                // Create a file stream.
                stream = new FileStream(strRuta, FileMode.Open, FileAccess.Read);

                // Define content type.
                ContentType contentType = new ContentType();
                contentType.MediaType = MediaTypeNames.Text.Plain; // or whatever your attachment is

                // Create the attachment and add it.
                attachment = new Attachment(stream, contentType);
                mail.Attachments.Add(attachment);
            }

            SmtpServer.Port = 80;
            SmtpServer.Credentials = new System.Net.NetworkCredential(strCorreoDe, strContrasena);
            SmtpServer.EnableSsl = false;

            SmtpServer.Send(mail);
            strResultado = "Exito";

            // Don't forget to release the resources if the attachment has been added
            if (hasAttachment)
            {
                data.Dispose();
                stream.Close();
                stream.Dispose();
            }
        }

        catch (Exception ex)
        {
            strResultado = ex.ToString();
        }

        return strResultado;
    }

我在任何地方都看不到
文件上传
,它在哪里?你从哪里获得struta?对不起,我已经编辑过了,谢谢你让我知道=)谢谢,我最终使用了你的方法,它确实有效,现在我有另一个问题。。。首先我上传文件(比如txt文件),然后我得到路径,我可以通过电子邮件发送文件。。。但是,我想在以后删除该文件,这样它就不会留在服务器上。。。但是当我使用File.Delete时(Server.MapPath(“~/Temp/”)+fileUploadArchivos.FileName);它声明我无法删除该文件,因为它正被另一个程序使用。。。有什么建议吗??谢谢
public string EnviarMensaje(int intIdVendedor, string strCorreoPara, string strCorreosAdicionales, string strTema, string strMensaje, string strRuta)
    {
        string strResultado="";
        DataTable dt = ConexionBD.GetInstanciaConexionBD().GetVendedorEspecifico(intIdVendedor);
        string strCuerpo = strMensaje + "\n\n\n\nMensaje Enviado Por:\n" + dt.Rows[0]["Vendedor"] + "\n" + dt.Rows[0]["Email"] + "\n" + dt.Rows[0]["Telefono"];
        string[] strListaCorreos = strCorreosAdicionales.Split(new Char[] {' ', ','}, StringSplitOptions.RemoveEmptyEntries);

        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtpout.secureserver.net");

            mail.Subject = strTema;
            mail.Body = strCuerpo;
            mail.From = new MailAddress(strCorreoDe);
            mail.To.Add(strCorreoPara);

            foreach (string c in strListaCorreos)
            {
                mail.To.Add(c);
            }

            bool hasAttachment = !string.IsNullOrWhitespace(strRuta);
            System.IO.FileStream stream = null;
            Attachment attachment = null;

            if (hasAttachment)
            {
                // Create a file stream.
                stream = new FileStream(strRuta, FileMode.Open, FileAccess.Read);

                // Define content type.
                ContentType contentType = new ContentType();
                contentType.MediaType = MediaTypeNames.Text.Plain; // or whatever your attachment is

                // Create the attachment and add it.
                attachment = new Attachment(stream, contentType);
                mail.Attachments.Add(attachment);
            }

            SmtpServer.Port = 80;
            SmtpServer.Credentials = new System.Net.NetworkCredential(strCorreoDe, strContrasena);
            SmtpServer.EnableSsl = false;

            SmtpServer.Send(mail);
            strResultado = "Exito";

            // Don't forget to release the resources if the attachment has been added
            if (hasAttachment)
            {
                data.Dispose();
                stream.Close();
                stream.Dispose();
            }
        }

        catch (Exception ex)
        {
            strResultado = ex.ToString();
        }

        return strResultado;
    }