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
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:24Moderador
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:40Moderador
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
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
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
- Propuesto como respuesta Eder CostaModerator miércoles, 18 de abril de 2012 14:29
- Marcado como respuesta Eder CostaModerator martes, 24 de abril de 2012 16:27

