Claudio, Asi sin mirar mucho me da la idea que alguien no esta entendiendo el formato MIME del attachment pero no se donde buscar. Como vos decis "..debe ser algo que lo toma diferente.." y en principio lo único que no está bajo tu control es el servidor de correo. No es de mucha ayuda, pero te pregunto lo que no dijiste para ver si surge algo:¡Cuando envias desde una y otra pc, el servidor de correo es el mismo (no Localhost digamos).? y El Acrobat Reader o el driver que sea para manejar los PDF es el mismo en ambos casos? Saludos Jorge
________________________________ De: Claudio Speroni <[email protected]> Para: [email protected] Enviado: lunes, 4 de marzo de 2013 16:15 Asunto: [puntonet] Consulta sobre envio de mail Angel, el archivo se genera en un directorio del cliente, y la rutina que lo genera devuelve el nombre completo del archivo (path + filename + .pdf) para adjuntarlo al mail Ese archivo se ve perfectamente con el adobe pdf reader en producción y desarrollo, es mas ese archivo es exactamente igual en tamaño y contenido byte por byte en producción y desarrollo, lo único que varia, obviamente es la fecha de creacion del mismo, Debe ser algo que al adjuntarlo lo toma diferente en producción que en desarrollo, pero no logro descubrir que, me fije versión del windows, las 2 con windows 7 mismo SP, versión del framework 4.0 (v4.0.30319), configuración regional del Windows, los usuarios son del grupo administradores, hasta puse los ejecutables en el mismo directorio (C:\Inovice) y no pude resolverlo, la verdad ya no se que mas mirar Gracias por tu interés en este tema Claudio Speroni De:[email protected] [mailto:[email protected]] En nombre de Angel "Java" Lopez Enviado el: lunes, 04 de marzo de 2013 07:02 Para: [email protected] Asunto: [puntonet] Consulta sobre envio de mail Hola gente! Claudio, una pregunta: - Pudiste comprobar el archivo PDF generado en la maquina de producción? Por lo que vi del código, es una rutina tuya la que lo genera (llamando a Crystal Report) y es esa rutina la que te da el nombre. Tal vez el problema esta ahí, antes de ir a enviar el email. Tal vez el Crystal lo genera mal, o de forma distinta. Veria primero de revisar este punto. Nos leemos! Angel “Java” Lopez @ajlopez De:[email protected] [mailto:[email protected]] En nombre de Claudio Speroni Enviado el: Monday, March 04, 2013 12:42 AM Para: [email protected] Asunto: [puntonet] Consulta sobre envio de mail Estimados, tengo el siguiente problema y agradezco de antemano la ayuda que me puedan dar Tengo una rutina para enviar por mail un archivo PDF como adjunto En desarrollo funciona correctamente, y cuando lo uso en producción instalado en la pc de mi cliente no funciona (esto es lo que nos vuelve locos a la mayoría de los programadores) El tema es así: Utilizo VS 2010 con lenguaje vb.net se genera un archivo PDF exportado desde reporte crystal Report (InvoiceNumber_00000026.pdf) se envía por mail a una dirección de correo electrónico como adjunto el archivo generado en el paso anterior y un archivo htm (statements_00202823.htm) también como adjunto el mail se envía correctamente, sin errores ahora viene el problema Si lo envío desde mi pc (entorno de desarrollo) el mail llega a la dirección de correo indicada, con los 2 adjunto, el PDF y el HTM ambos con el nombre que se envió desde el aplicativo Si lo envío desde la pc del cliente (entorno de producción) el mail llega a la dirección de correo indicada, con los 2 adjuntos, pero el PDF llega con el nombre “=_utf-8_B_SW52b2ljZSBOwrogMDAwMDAwMjkgLSBB.pdf” y no se puede abrir, el htm llega con el nombre correcto y se puede abrir sin problemas El contenido del archivo “=_utf-8_B_SW52b2ljZSBOwrogMDAwMDAwMjkgLSBB.pdf” es el siguiente =?utf-8?B?WTJOdmRXNTBJRTUxYldKbGNpQXdNakF5Pz0NCiA9P3V0Zi04P0I/T0RJ?=\ \ =?utf-8?B?ekxsQkVSZz09Pz0=?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment JVBERi0xLjcgCiXi48/TIAoxIDAgb2JqIAo8PCAKL1R5cGUgL0NhdGFsb2cgCi9Q YWdlcyAyIDAgUiAKL1BhZ2VNb2RlIC9Vc2VOb25lIAovVmlld2VyUHJlZmVyZW5j Y continua cerca de 41k mas que no lo incluyo para no hacer muy grande este correo A continuación transcribo la función que utilizo para el envío de correo PrivateSub Enviar() DimobjSmtp As New System.Net.Mail.SmtpClient Dim Mailmsg As System.Net.Mail.MailMessage Dim fromAddress As System.Net.Mail.MailAddress = Nothing Dim strBody As String = "" Dim strAsunto As String = "" Dim blnEnviado As Boolean = True Try Me.bdsInvoice.EndEdit() With Me.dtsDatos.ServidorCorreo(0) objSmtp.Host = .SMTP.Trim objSmtp.Port = .PuertoSMTP objSmtp.EnableSsl = .SSLHabilitado If .UsuarioSTMP.Trim <> "" Then objSmtp.Credentials = New System.Net.NetworkCredential(.UsuarioSTMP, .ContraseñaSMTP) End If fromAddress = New System.Net.Mail.MailAddress(.Mail, .Remitente) End With For Each row As dtsInvoice.InvoiceRow In Me.dtsInvoice.Invoice.Select("Enviado = 0") Dim toAddress As System.Net.Mail.MailAddress = Nothing Dim strArchivoPDF As String = "" Dim strArchivoHTM As String = Archivos.DirectorioTemporal.Trim & "Statement_" & row.AccountNumber.ToString.PadLeft(7, "0") & ".htm" With Me.dtsDatos.Clientes.FindByID_Cliente(row.ID_Cliente) toAddress = New System.Net.Mail.MailAddress(.Mail.Trim, .Nombre.Trim) DimdtsImpresion As New dtsImpresion Impresion.PrepararDatasetImpresion(dtsImpresion, dtsDatos, .ID_Cliente, row.InvoiceNumber) strArchivoPDF = Impresion.ImprimirInvoice(dtsImpresion, .AccountNumber, row.InvoiceNumber, True) strAsunto = “” strBody = “” End With If row.HTML.Trim <> "" Then System.IO.File.WriteAllText(strArchivoHTM, row.HTML) End If With Me.dtsDatos.ServidorCorreo(0) strBody = strBody & vbCrLf & vbCrLf & .Firma End With Mailmsg = New System.Net.Mail.MailMessage() With Mailmsg .From = fromAddress .IsBodyHtml = False .Subject = strAsunto If strArchivoPDF.Trim <> "" AndAlso System.IO.File.Exists(strArchivoPDF) Then .Attachments.Add(New Net.Mail.Attachment(GetStreamFile(strArchivoPDF), IO.Path.GetFileName(strArchivoPDF), "application/pdf")) End If If strArchivoHTM.Trim <> "" AndAlso System.IO.File.Exists(strArchivoHTM) Then .Attachments.Add(New Net.Mail.Attachment(GetStreamFile(strArchivoHTM), IO.Path.GetFileName(strArchivoHTM))) End If .Body = strBody .Bcc.Add(fromAddress) .To.Add(toAddress) Try objSmtp.Send(Mailmsg) Catch ex As System.Net.Mail.SmtpException blnEnviado = False End Try End With Mailmsg = Nothing Next Catch ex As Exception Throw ex EndTry End sub PrivateFunction GetStreamFile(filePath As String) As IO.Stream Using fileStream As IO.Stream = IO.File.OpenRead(filePath) Dim memStream As New IO.MemoryStream() memStream.SetLength(fileStream.Length) fileStream.Read(memStream.GetBuffer(), 0, CInt(fileStream.Length)) Return memStream End Using End Function
