none
Mandar Correo con archivo adjunto desde url RRS feed

  • Pregunta

  • Buenas a todos/as, 

    pues como dice el asunto quiero mandar un correo con varios archivos adjuntos. El problema es que aunque los envía me llegan todos pero con tamaño 1kb y no contienen la información. El código a groso modo es:

                                

                            Stream stream;
                            for (int i = 0; i < numeroDocumentos; i++)
                            {                                                        
                                stream = new WebClient().OpenRead("http://misitio/Documentacin%20Clientes");

                                data2[i] = new Attachment(stream, archivosAdjuntos[i].ToString());                            
                            }

                            //adjuntamos todos los documentos del cliente                                                                        
                            for (int i = 0; i < numeroDocumentos; i++)
                            {
                                System.Net.Mime.ContentDisposition cDisposition = data2[i].ContentDisposition;
                                cDisposition.CreationDate = System.IO.File.GetCreationTime(archivosAdjuntos[i]);
                                cDisposition.ModificationDate = System.IO.File.GetLastWriteTime(archivosAdjuntos[i]);
                                cDisposition.ReadDate = System.IO.File.GetLastAccessTime(archivosAdjuntos[i]);
                                msg.Attachments.Add(data2[i]);

                            }

    Muchas gracias

    jueves, 14 de marzo de 2013 23:34

Respuestas

  • Hola,

    El problema que tienes es que no te estas autenticando en la petición. En el objeto WebClient que estás creando necesitas indicarle o que use las credenciales por defecto mediente el uso de la propiedad usedefaultcredentials con el valor true o mediante la propiedad credentials creando un objeto a partir de System.Net.NetworkCredential. El uso de de una propiedad u otra va a depender si el usuario que está ejecutando ese código tiene acceso a la página o no.

    Saludos

    • Marcado como respuesta pi31415pi miércoles, 27 de marzo de 2013 15:02
    sábado, 23 de marzo de 2013 0:36

Todas las respuestas

  • Buenas pi31415pi,

    Si puedes debuguear tu código, yo obsrvaría que pasa en el momento en el que realizas la asignación del atachmen al array data2[i] para ver si realmente estás recogiendo la información que está dentro del archivo.

    Revisando la función Attachments(stream, string) en el MSDN http://msdn.microsoft.com/es-es/library/6sdktyws.aspx he visto que hay un ejemplo. ¿Puede ser que el problema esté en que stream en lugar de apuntar a la lista deba apuntar directamente a cada uno de los archivos?

    Para obtener los archivos puedes utilizar la propiedad SPListItem.File()

    Saludos.

    sábado, 16 de marzo de 2013 11:25
  • Muchas gracias por la respuesta, más datos sobre el problema.

    Todas estas pruebas  las estoy realizando accediendo al servidor por escritorio remoto mediante una IP.

    he probado estas dos cosas:

                                                                                                                                

      stream = new WebClient().OpenRead("http://misitio/Documentacin%20Clientes");

    stream = new WebClient().OpenRead("http://IP/Documentacin%20Clientes");                            

    las dos me fallan y las dos un archivo txt que contiene un texto al enviármelo por correo aparece lo siguiente:

    <html> <head> <script language="javascript"> window.location="http://192.xxx.x.x"; </script> </head> <body> </body> </html>

    Me gustaría el lunes hablar con el cliente y que él haga las pruebas desde dentro del propio servidor, pero si funcionara como lo arreglaría para que funcionase de todos los sitios.

    sábado, 16 de marzo de 2013 21:57
  • El error que sale es:

    Error en el servidor remoto: (401) No autorizado. en System.Net.WebClient.OpenRead(Uri address)

    lunes, 18 de marzo de 2013 10:22
  • Hola,

    El problema que tienes es que no te estas autenticando en la petición. En el objeto WebClient que estás creando necesitas indicarle o que use las credenciales por defecto mediente el uso de la propiedad usedefaultcredentials con el valor true o mediante la propiedad credentials creando un objeto a partir de System.Net.NetworkCredential. El uso de de una propiedad u otra va a depender si el usuario que está ejecutando ese código tiene acceso a la página o no.

    Saludos

    • Marcado como respuesta pi31415pi miércoles, 27 de marzo de 2013 15:02
    sábado, 23 de marzo de 2013 0:36