0

c#ASP.netを使用して電子メールでファイルを送信したい(おそらくもっと多くのファイルもありますが、今のところ、少なくとも1つのファイルだけを送信することを懸念しています)

今のところ、メールを送信したい場合に機能する方法があります

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" />

そして私が持っているcsに

EnviarEmail objEmail = new EnviarEmail();

protected void imgBtnEnviar_Click(object sender, ImageClickEventArgs e)
{
if (fileUploadArchivos.HasFile)
{
    strArchivo = Path.GetTempFileName();\\RIGHT NOW I LEFT IT THIS WAY, BUT I NOW THAT HERE IS THE PROBLEM, I DON'T KNOW WHTAT CAN I DO HERE
}
string strResultado = objEmail.EnviarMensaje((int)Session["IdVendedor"], lblCorreoPara.Text, tbxCorreoPara.Text, tbxTema.Text, tbxMensaje.Text, strArchivo);

}

ただし、問題はFileUploadにあります。Server.MapPath、Path.GetFileName、GetDirectoryName、GetFullPath、GetPathRoot ...などの多くのメソッドを試しましたが、常に何も取得せず、ファイル名のみ、または完全に異なるパスを取得しています(サーバーの一種のパスだと思います) ..

たとえば、C:\ Test.txtのような単純なファイルパスを取得したいのは今のところです...FileUploadから正確な文字列を取得できれば、送信できると思います...しかし、それを機能させる方法がわかりません。

あなたが私を助けてくれることを願っていますありがとう

4

3 に答える 3

1

アップロードされたファイルのローカルコピーをサーバーに保存する必要がある場合は、次のようにすることができます。

fuFileUpload.SaveAs(MapPath(filepath));

次に、strRutaは、保存したばかりのファイルを使用できます。

strRuta = Server.MapPath(filepath);

新しいAttachmentオブジェクトに渡す準備ができました。

于 2012-08-09T20:39:24.557 に答える
0

ファイルをディスクに保存する必要はまったくありません。ファイルを添付ファイルとして追加するだけの場合は、ファイルを保存する必要はありません。

FileUpload次のFileContentプロパティがありますStream-クラスのコンストラクタの一部はAttachment、パラメータとしてストリームを取ります。

解決策は、このストリームをメソッドに渡し、直接使用することです。

コードビハインド:

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

...

}
于 2012-08-09T20:47:25.800 に答える
0

単純なテキストの代わりにストリームを使用して、これを試すことができます。

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;
    }
于 2012-08-09T20:54:12.153 に答える