Error al recibir archivo adjunto, a veces se recibe un .dat cuando envío un ppt

Answered Error al recibir archivo adjunto, a veces se recibe un .dat cuando envío un ppt

  • lunes, 16 de abril de 2012 8:38
     
     

    Hola buenas a todos,

    He creado una función para enviar emails con archivo adjunto desde mi web. Todo se envía correctamente excepto cuando adjunto un archivo ppt, el usuario que lo recibe hay veces que lo recibe como .dat.A que se puede deber? Os dejo el código por si encontrais algo que pueda faltar para controlar ésto.

    Al final del código es donde se adjunta el archivo: 

    public void EnviaMailFarmaIndustria()
            {
                System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
                AgenteAmecInfo agAmecInfo = new AgenteAmecInfo();
                int GuardarMail;
                string Attachments = "";
                try
                {
                    string saveFile = "";
                    String sFile = "";
                    string link = string.Format("{0}NuevoDetalleAMEC.aspx?idamec={1}", RutaLinkMail, miAmec.idamecs);
                    AgenteUsuarios agenteUsua = new AgenteUsuarios();
                    int i;

                    DDatosPersonalesUsuario Solicitante = agenteUsua.ObtenerDatosPersonalesPorIDPeticionario(miAmec.idsolicitante.ToString());
                                    DataSet usuariosComplianceAprobado = agenteUsua.ObtenerUsuariosComplianceAprobador();
                    for (i = 0; i < usuariosComplianceAprobado.Tables[0].Rows.Count; i++)
                    {
                        try
                        {
                            message.To.Add(new MailAddress(usuariosComplianceAprobado.Tables[0].Rows[i].ItemArray[16].ToString())); //PONEMOS LA DIRECCION DE ENVIO AL MAIL.
                        }
                        catch
                        {
                            Alert.Show("Se ha producido un error enviando el mail a Farmaindustria. Por favor revise la dirección From en la configuración del sistema.", null);
                            GuardarMail = agAmecInfo.GuardaLogMail(miAmec.idamecs, "MailFarmaIndustria", message.To.ToString(), message.Subject, message.Body, null, false, "Error añadiendo la dirección de Correo Electrónico");
                            return;

                        }
                    }
                    message.To.Add(new MailAddress(Solicitante.Email));
                    message.To.Add(new MailAddress(MailCopia));
                    message.To.Add(new MailAddress(MailCopiaProgramador));


                    message.Subject = string.Format("Comunicación a Farmaindustria de  la actividad {0}, Número de AMEC {1} y Solicitante {2}", miAmec.descripcion, miAmec.idamecs, datosUsuarioSolicitante.NombreCompleto); //ASUNTO DEL MAIL [me lo he inventado]
                    message.Body = "Adjunto documentación para su comunicación a Farmaindustria";
                    //message.Body = string.Format("Podrá encontrar la documentación del Amec en el siguiente link: {0}",link);

                    if (!string.IsNullOrEmpty(miAmec.programaamecs.ToString()))
                    {
                        string Programa = @"Programa\";
                        savePath = ConfigUtil.GetAppSetting("AMECUpload");
                        sFile = string.Format("{0}{1}\\{2}{3}", savePath, miAmec.idamecs.ToString(), Programa, miAmec.programaamecs);
                        message.Body = string.Format("{0}\r\n\r\nAdjuntado Programa {1}\r\n", message.Body, miAmec.programaamecs);
                        saveFile = sFile.Replace("\\", "/");
                        message.Attachments.Add(new Attachment(saveFile));
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(miAmec.descripcionobjetivo.ToString()))
                        {
                            message.Body = string.Format("{0}\r\n\r\nDescripción del Programa: {1}\r\n", message.Body, miAmec.descripcionobjetivo.ToString());
                        }

                        if (!string.IsNullOrEmpty(miAmec.urlprograma.ToString()))
                        {
                            message.Body = string.Format("{0}\r\n\r\nUrl del Programa: {1}\r\n", message.Body, miAmec.urlprograma.ToString());
                        }
                    }

                    ICollection<DDocumentacionAmec> collectDocument = agAmecInfo.ObtenerDocumentacionAMEC(miAmec.idamecs.ToString(), "", 0, 0);
                    foreach (DDocumentacionAmec DocAmec in collectDocument)
                    {
                        if (DocAmec.adjuntaraemail == true)
                        {
                            string Documentacion = @"Documentacion\";
                            string saf = savePathDocumentacion;
                            savePath = ConfigUtil.GetAppSetting("AMECUpload");
                            sFile = string.Format("{0}{1}\\{2}{3}", savePath, miAmec.idamecs.ToString(), Documentacion, DocAmec.nombredoc);
                            message.Body = string.Format("{0}\r\n\r\nAdjuntado Documentación {1}\r\n", message.Body, DocAmec.nombredoc);
                            saveFile = sFile.Replace("\\", "/");
                            message.Attachments.Add(new Attachment(saveFile));
                        }


                    }
                    if (message.Attachments.Count > 0)
                    {
                        for (int x = 0; x < message.Attachments.Count; x++)
                        {


                            if (x != 0) Attachments = Attachments + ";";
                            Attachments = Attachments + message.Attachments[x].Name;
                        }

                    }

                    Mail.EnviaMail(message); //ENVIAMOS MAIL
                    if (message.Attachments.Count > 0) GuardarMail = agAmecInfo.GuardaLogMail(miAmec.idamecs, "MailFarmaIndustria", message.To.ToString(), message.Subject, message.Body, Attachments, true, null);
                    else GuardarMail = agAmecInfo.GuardaLogMail(miAmec.idamecs, "MailFarmaIndustria", message.To.ToString(), message.Subject, message.Body, null, true, null);

                }
                catch (Exception ex)
                {
                    Alert.Show("Se ha producido un error enviando el mail a FarmaIndustria. Por favor revise la configuración del sistema", null);
                    if (message.Attachments.Count > 0)
                    {
                        GuardarMail = agAmecInfo.GuardaLogMail(miAmec.idamecs, "MailFarmaIndustria", message.To.ToString(), message.Subject, message.Body, Attachments, false, "Error enviando el Correo");
                    }
                    else
                    {
                        GuardarMail = agAmecInfo.GuardaLogMail(miAmec.idamecs, "MailFarmaIndustria", message.To.ToString(), message.Subject, message.Body, null, false, "Error enviando el Correo");

                    }
                    Logger.Logger.PrintError(this.GetType().Name, "amecNotificaciones", ex.Message, ex);
                    try
                    {
                        Mail mail = new Mail();
                        mail.Send(ConfigUtil.GetAppSetting("contactoError"), ex);
                    }
                    catch { }
                }
            }

Todas las respuestas

  • lunes, 16 de abril de 2012 8:48
     
     

    Hola otra vez, ya se a que se debe, me ocurre cuando adjunto archivos con acentos!

    Que podría hacer para que se adjunten correctamente los archivos con acento?

    Un saludo y gracias

  • lunes, 16 de abril de 2012 8:50
     
     

    Hola,

    Dices que te ocurre a veces... Pasa siempre con el mismo usuario? si lo mandas a tu cuenta de correo te ocurre tambien a veces?

    Has verificado que cuando recuperas el nombre del fichero, éste trae la extension correcta?

    Podria ser alguna configuracion extraña del firewall?

  • lunes, 16 de abril de 2012 8:54
     
     

    Hola Carles,

    lo recibe como un .dat sea quien sea el destinatario, me he dado cuenta que es cuando el .ppt lleva un acento no se adjunta bien. Hay alguna manera de controlar este tema de los acentos?

    Gracias

  • lunes, 16 de abril de 2012 9:15
     
      Tiene código

    Pues tiene pinta de ser un error de codificacion del archivo.

    Intenta crear el attachement con un tipo de codificacion UTF-8.

    algo asi:

    System.Net.Mail.Attachment data = new System.Net.Mail.Attachment(saveFile); data.NameEncoding = System.Text.Encoding.UTF8;

    message.Attachments.Add(data);



  • lunes, 16 de abril de 2012 9:41
     
     

    Gracies Carles,

    Si que tiene que ser problema de codificación, se recibe un utf8.....dat. He probado el código que me has enviado pero sigue sin funcionar, todavía recibe el destinatario un .dat.

    Saludos

  • lunes, 16 de abril de 2012 9:48
     
     

    En el constructor de Attachement tienes varias opciones, entre ellas la de especificar el tipo de archivo. Mira a ver si con eso consiguieras enviarlo correctamente.

    Tambien hay una propiedad d Attachement llamada "TransferEncoding" que quiza pueda servirte.

  • lunes, 16 de abril de 2012 10:46
     
     

    Tampoco me soluciona.

    Saludos

  • lunes, 16 de abril de 2012 12:24
    Moderador
     
     

    o sea lo que lleva el acento es el nombre del archivo ?

    podrias realizar un replace de estos caracteres especiales, es mas sino recuerdo mal si pones un archivo cuyo nombre tenga espacios tambien tendras problemas

    Removing diacritics (accents) from strings

    lo que podrias hacer para evitar problemas es zippear los archivos que adjuntas, y generar un nombre estandar y controlado del archivo

    de esta forma reduces el tamaño del mail y a la vez normalizas los nombre de los archivos que se adjuntan

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

  • lunes, 16 de abril de 2012 13:16
     
     

    Hola Leo, si el nombre del archivo es quien lleva el acento.

    Y dices que no se puede enviar un documento que lleve acento? tiene que haber alguna manera supongo, mas que nada para que al destinatario le llegue el archivo sin modificarse el nombre.

    Gracias y saludos

  • lunes, 16 de abril de 2012 13:40
    Moderador
     
     

    es raro que no se pueda enviar un archivo con acento

    pero realiza la prueba, envia un archivo con acento y valida que le llegue el .dat

    luego envia el mismo archivo pero reemplazando el nombre quitando el acento y valida que llegue correctamente

    puede ser que algun antivirus o el correo del cliente haga este efecto

    valida enviarte el mail a una cuenta de gmail o hotmail para ver si sucede lo mismo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

  • lunes, 16 de abril de 2012 14:10
     
     

    Con el acento llega como .dat, y sin el acento llega bien. Y da igual donde lo envíe, a mis cuentas de hotmail y gmail siguen llegando como .dat.

    Saludos

  • lunes, 16 de abril de 2012 14:16
     
      Tiene código

    A ver si el problema lo tienes tambien con el encoding del mensaje... Yo la verdad es que habia entendido que los acentos los tenias en el interior de ppt. Disculpa por la confusion...

    Trata de definir el encoding del mensaje que mandas:

    message.BodyEncoding = Encoding.UTF8

    http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.aspx

  • lunes, 16 de abril de 2012 15:50
     
     

    Hola Carles, no problem. Aun sigue sin funcionar....

    Saludos

  • lunes, 16 de abril de 2012 16:29
     
     Respondida

    Investingando un poco tu problema he visto varios enlaces que hablan de lo mismo y hay gente que lo ha podido resolver mediante el formato Quoted-printable

    Te paso unos enlaces a ver si te pueden dar alguna idea. El ultimo de ellos esta en aleman ( :) ), pero la solucion a la pregunta contiene un monton de codigo que seguro que te pueden servir para ver por donde van los tiros.

    http://stackoverflow.com/questions/5349887/mailmessage-attachment-filename-with-accents

    Este primer link enlaza con estos otros dos:

    http://stackoverflow.com/questions/2226554/c-class-for-decoding-quoted-printable-encoding

    http://www.codeproject.com/Articles/6441/Binary-to-Text-Encode-Decode-Class

    Y con el que te decia en aleman, jeeje

    http://social.msdn.microsoft.com/Forums/en-US/dotnetframeworkde/thread/b6c764f7-4697-4394-b45f-128a24306d55