Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tiego Douglas Medeiros

Anexar arquivo por e-mail e Deleta-lo na pasta do servidor

Recommended Posts

Preciso anexar arquivo dentro da pasta no servidor.

 

porém esta dando erro.

 

Could not find a part of the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\~\arquivos\'.

 

 

...em seguida preciso apaga-lo da pasta no servidor.

Lembrando que esse arquivo é um anexo que vai para o e-mail

 

O arquivo veio por meio de UPLOAD (já programado)

 

Preciso de Ajuda

 

 


static void EnviaEmail(string Mensagem, string Destinatario, string Assunto, MailPriority Prioridade)
   {
       //OBJETOS:::: cliente_smtp - remetente - destinatario - mensagem


       SmtpClient cliente_smtp = new SmtpClient();
       cliente_smtp.Host = "smtp.gmail.com";
       cliente_smtp.Credentials = new NetworkCredential("xxxxxxxxxxxxx", "xxxxxxxxxxxxxxx");
       cliente_smtp.Port = 25;

       MailAddress remetente = new MailAddress("xxxxxxxxx@xxxxxxxxx", "UPLOAD - Website");
       MailAddress destinatario = new MailAddress(Destinatario);
       MailMessage mensagem = new MailMessage();
       mensagem.CC.Add(destinatario);
       mensagem.IsBodyHtml = true; //estou dizendo que em mensagem havera uma página html
       mensagem.From = remetente;
       mensagem.Subject = Assunto;
       mensagem.Body = Mensagem;
       mensagem.Priority = Prioridade;


       #region INICIO ANEXO
                                       //Como eu faço???
       FileStream fileToAttach = File.Open(@"~\arquivos\", FileMode.Open); //Ler arquivo do file system

      // string FileName = server.MapPath("~/App_data/contactForm.text");
      // FileStream fileToAttach = System.IO.File.ReadAllText(FileName);

       AttachmentCollection objAttachCol = mensagem.Attachments; //Pegar coleção de anexos
       Attachment objAttach = new Attachment(fileToAttach, "/"); //Criar objeto do arquivo anexo passando o FileStream instânciado
       objAttachCol.Add(objAttach);  //Anexar o arquivo


       //em seguida eu preciso apagar o arquivo da pasta no servidor

       #endregion




       try
       {
           cliente_smtp.Send(mensagem);

       }

       catch (Exception ex)
       {

           throw ex;

       }
   }



Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode me dar um exemplo por favor?

 

---------------UPLOAD-------------

 

//UPLOAD
   protected void Upload_Click(object sender, EventArgs e)
   {
       try
       {
           //inicializar as variáveis
           string arq = FileUpload1.PostedFile.FileName;
           string extensao = "";
           double tamanho = 0;
           //tamanho maximo do upload em kb
           double permitido = 2000;
           //vamos utIlizar uma variavel para controlar a aceitação das regras
           //se o valor padrão da variavel for alterado é porque alguma regra foi violada
           string erroRegra = "0";
           // Teste para verificar se foi submetido o arquivo
           if (FileUpload1.PostedFile != null)
           {
               //identificamos o tamanho do arquivo
               tamanho = Convert.ToDouble(FileUpload1.PostedFile.ContentLength) / 1024;
               //verificamos a extensão através dos últimos 4 caracteres
               extensao = arq.Substring(arq.Length - 4).ToLower();
               //para saber o nome do arquivo utilizaremos a propriedade GetFileName
               //passando a string arq 
               string nomeArq = System.IO.Path.GetFileName(tira_acentos(arq));
               //diretorio onde será gravado o arquivo 
               //faremos uma chamada ao método tira_acentos para 
               //remover espaços e caracteres indesejados.
               //criar o diretório arquivos no mesmo local da aplicação

                                                 // Aqui também!!!
               string diretorio = this.Server.MapPath(@"arquivos\" + tira_acentos(nomeArq));

               // o tamanho acima do permitido - violação de regra
               if (tamanho > permitido)
               {
                   this.Label1.Text = "Tamanho Máximo permitido é de " + permitido + " kb!";
                   erroRegra = "1";
               }
               // extensão diferente de jpg, doc, pdf e gif - violação de regra
               if ((extensao != ".jpg" && extensao != ".gif" && extensao != ".doc" && extensao != "pdf"))
               {
                   this.Label1.Text = "Extensão inválida, só são permitidas .jpg, .doc, .pdf e .gif!";
                   erroRegra = "2";
               }
               if (erroRegra == "0")
               {
                   try
                   {
                       // verifica se já existe o nome do arquivo submetido 
                       if (!File.Exists(diretorio))
                       {
                           FileUpload1.PostedFile.SaveAs(diretorio);
                           this.Label1.Text = "Arquivo enviado com sucesso!";
                       }
                       else
                           this.Label1.Text = "Já existe um arquivo com esse nome!";
                   }
                   //Caso ocorra alguma exceção será mostado no label
                   catch (UnauthorizedAccessException ex)
                   {
                       this.Label1.Text = "Erro no Upload:" + ex.Message;
                   }
               }
           }
       }
       catch
       {
           this.Label1.Text = "Erro no Upload";
       }
   }

 

...Então estou com 2 erros

 

1. Depois que carreguei minha página para o servidor, não consigo executar o UPLOAD...

Só pode ser a linha

string diretorio = this.Server.MapPath(@"arquivos\" + tira_acentos(nomeArq));

 

2 Não consigo anexar (lógico) o conteúdo para o e-mail

 

 FileStream fileToAttach = File.Open(@"~\arquivos\", FileMode.Open); //Ler arquivo do file system

 

O UPLOAD apresenta esse erro: (servidor)

Erro no Upload:Access to the path 'D:\Hosting\6633076\html\teste\xxxxxxxxxxxx.com.br\aspx\arquivos\xxxxxx.jpg' is denied. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que dar permissão no diretório através do painel de controle do site, para poder resolver o problema do upload..

 

Existe uma grande chance de que no momento em que você resolver o problema do Upload você resolva o problema do envio do email..

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, deu certo...

Agora estou com outro prooblema...

 

Preciso anexar o arquivo, porém veja minha linha de comando @"arquivo\" -- Como eu me refiro ao arquivo que acabei de carregar? (como dou a ordem de anexa-lo?

 

FileStream fileToAttach = File.Open(@"arquivos\", FileMode.Open); //Ler arquivo do file system
Line 90:             AttachmentCollection objAttachCol = mensagem.Attachments; //Pegar coleção de anexos
Line 91:             Attachment objAttach = new Attachment(fileToAttach, "/.doc"); //Criar objeto do arquivo anexo passando o FileStream instânciado



Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu uso

 


Server.MapPath (@"\arquivos\");

 

Aparece o seguinte erro:

 

 

Error 12 An object reference is required for the non-static field, method, or property 'System.Web.UI.Page.Server.get' g:\Tiego\Documents\Arquivos EscolherSeguro\Web Site\wesite\aspx\upload_apolice.aspx.cs 104 9 g:\...\wesite\

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

 

Estou com erro nessa linha

 Attachment objAttach = new Attachment(fileToAttach, @"log\texto.csv"); //Criar objeto do arquivo anexo passando o FileStream instânciado     

 

Quando eu publico no meu servidor dá erro na linha acima, se testo local da certo.

ah, essa pasta já tem permição pelo meu servidor.

 

alguém pode me ajudar?

 

-----------mensagem de erro-----------

The specified content type is invalid.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

 

Exception Details: System.FormatException: The specified content type is invalid.

--------------------------------------

 

 

Alguém sabe o que eu devo fazer ?

 

Código completo

 

 


private void EnviaEmail(string Mensagem, string Destinatario, string Assunto,  MailPriority Prioridade)
   {
       //OBJETOS:::: cliente_smtp - remetente - destinatario - mensagem


       SmtpClient cliente_smtp = new SmtpClient();
      // cliente_smtp.Host = "smtp.xxxxxxxx.com";
        cliente_smtp.Host = "relay-hosting.secureserver.net";
       cliente_smtp.Credentials = new NetworkCredential("xxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxx");
       cliente_smtp.Port = 25;

       MailAddress remetente = new MailAddress("tiego.douglas@xxxxxxxxxx.com.br ", "Website" );
       MailAddress destinatario = new MailAddress(Destinatario);
       MailMessage mensagem = new MailMessage();        
       mensagem.CC.Add(destinatario);
       mensagem.IsBodyHtml = true; //estou dizendo que em mensagem havera uma página html
       mensagem.From = remetente;
       mensagem.Subject = Assunto;
       mensagem.Body = Mensagem;
       mensagem.Priority = Prioridade;





       #region log - no caso do email obtenha sucesso
       string formulario = "CotacaoAuto";
       // força um retardo no processamento
       System.Threading.Thread.Sleep(3000);
       Label1.Text = DateTime.Now.ToString();
       string data_hora = Label1.Text;

       // StreamWriter escrever;                                                     ----------(essa linha de comando só funciona local)
       //escrever = new System.IO.StreamWriter(@"log\log.csv", true, Encoding.UTF7); ----------(essa linha de comando só funciona local)

       StreamWriter escrever = new StreamWriter(Server.MapPath(@"log\texto.csv"), true, Encoding.ASCII);


       escrever.WriteLine(txt_nome.Text + "," + txt_email.Text + ","  + txt_telefone.Text + ","  + txt_celular.Text + "," + formulario + "," + data_hora + "," + "sucesso");
       escrever.Flush();
       escrever.Close();


     //  ObjMail.AddAttachment Server.MapPath("/anexo.txt");


       String fileToAttach;
       fileToAttach = Server.MapPath(@"log\texto.csv");

       AttachmentCollection objAttachCol = mensagem.Attachments; //Pegar coleção de anexos
       Attachment objAttach = new Attachment(fileToAttach, @"log\texto.csv"); //Criar objeto do arquivo anexo passando o FileStream instânciado
       objAttachCol.Add(objAttach);  //Anexar o arquivo



       #endregion




       try
       {
           cliente_smtp.Send(mensagem);

       }

       catch (Exception ex)
       {

           throw ex;

       }
   }

 

Algoritmo.

 

1. Enviar o conteúdo de um formulário para um pasta especifica no servidor -- OK

Dei permissão para a pasta, usei Server.MapPath

 

2. Preciso pegar o arquivo que esta na pasta do servidor e enviar uma cópia dos dados em anexo para o e-mail no formato CSV

ERRO - não consigo pegar o conteúdo da pasta e anexar.

 

O que devo fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a escrita no servidor é que não está funcionando, pode ser questão de permissão como mencionei no post anterior..

 

você pode usar o system.io.file("nomdoarquivo").exists para verificar se o arquivo existe no servidor, pois ele pode não estar achando o arquivo

Compartilhar este post


Link para o post
Compartilhar em outros sites

a escrita no servidor é que não está funcionando, pode ser questão de permissão como mencionei no post anterior..

 

você pode usar o system.io.file("nomdoarquivo").exists para verificar se o arquivo existe no servidor, pois ele pode não estar achando o arquivo

 

 

...certo, depois que eu realizo a rotina e entro na pasta especifica no servidor, posso ver o arquivo gerado, seu tamanho e ainda baixa-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

...é a msg de erro que esta dando é essa:

 

 

 

Description: The application attempted to perform an operation not allowed by the security policy.  To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file. 

 

 

Tradução:

O aplicativo tentou executar uma operação não permitida pela política de segurança. Para conceder o presente pedido a permissão necessária entre em contato com o administrador do sistema ou altere o nível de confiança do aplicativo no arquivo de configuração.

 

Realmente é erro de permissão, eu estava pesquisando sobre isso veja: (tem alguma cosa a ver ?)

 

 

 

URl:

http://msdn.microsoft.com/en-us/library/system.security.permissions.fileiopermission.aspx

 

Exemplo:

[serializableAttribute]
[ComVisibleAttribute(true)]
public sealed class FileIOPermission : CodeAccessPermission, 
IUnrestrictedPermission

 

Tentei isso! Mais deu erro.

Absolute path information is required.  - System.ArgumentException: Absolute path information is required.


 

 

 

            #region Processo de ANEXO do arquivo CSV



           FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, @"anexo\texto.xls");
           f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, @"anexo\texto.xls");
           try
           {




            FileStream fileToAttach = File.Open(@"anexo\texto.xls", FileMode.Open); //Ler arquivo do file system
            AttachmentCollection objAttachCol = mensagem.Attachments; //Pegar coleção de anexos
            Attachment objAttach = new Attachment(fileToAttach, @"anexo\texto.xls"); //Criar objeto do arquivo anexo passando o FileStream instânciado
            objAttachCol.Add(objAttach);  //Anexar o arquivo


            f2.Demand();
           }
           catch (SecurityException s)
           {
               Console.WriteLine(s.Message);
           }


            #endregion

 

 

 

ahhhhhhhhhhh

 

Não consigo!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.