zook que mega leer importar full extensión como cargar archivos c# .net email smtpclient

c# - mega - que es la extensión eml



System.Net.Mail creando correos inválidos y archivos eml? Insertar puntos extra en nombres de host (3)

En .Net 2.0

X-Sender: [email protected] X-Receiver: [email protected] MIME-Version: 1.0 From: [email protected] To: [email protected] Date: 6 Jul 2011 21:29:04 +0100 Subject: Test Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Hello this is a short test of the issue: <a href=3D''https://test.com/''>https://test.com/</a>:=

Parece que está envolviendo el texto en cierta longitud de caracteres por línea. Recuerdo vagamente que había un problema en .Net 2.0 donde, de forma predeterminada, no hace esto, lo que puede causar problemas con los filtros de correo no deseado.

De hecho, aumentar el tamaño del mensaje da lo siguiente en .Net 4.0:

X-Sender: [email protected] X-Receiver: [email protected] MIME-Version: 1.0 From: [email protected] To: [email protected] Date: 6 Jul 2011 21:34:21 +0100 Subject: Test Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Hello this is a short test of the sssssssssssssssssissue: <a hre= f=3D''https://test.com/''>https://test.com/</a>:=20

Parece un error.

Una solución podría ser cambiar BodyEncoding a algo distinto de ASCII.

Parece que el SmtpClient de .NET está creando correos electrónicos con un punto extra en los nombres de los hosts si el punto apareciera al comienzo de una línea codificada MIME (por ejemplo, test.com algunas veces aparece como test..com). Código de ejemplo:

[TestMethod] public void TestEmailIssue() { var mail = new System.Net.Mail.MailMessage(); var smtpClient = new System.Net.Mail.SmtpClient(); mail.To.Add("[email protected]"); mail.Subject = "Test"; mail.From = new System.Net.Mail.MailAddress("[email protected]"); mail.Body = "Hello this is a short test of the issue:" +" <a href=''https://test.com/''>https://test.com/</a>: "; smtpClient.PickupDirectoryLocation = "C://temp//"; smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.Send(mail); }

Esto crea un archivo .eml que se ve así:

X-Sender: [email protected]

X-Receiver: [email protected]

Versión MIME: 1.0

De: [email protected]

Para: [email protected]

Fecha: 6 de julio de 2011 15:55:28 -0400

Asunto: Prueba

Content-Type: text / plain; charset = us-ascii

Content-Transfer-Encoding: cotizado-imprimible

Hola, esta es una breve prueba del problema: https: // test =

..com / ''> https://test.com/ : = 20

Al enviar el archivo, o abrir en Outlook (o cualquier otro programa), aparecen los puntos dobles (es decir, test..com). Tenga en cuenta que si elimino el espacio extra (en "es una"), ese test.com se muestra correctamente ya que el punto ya no aparece al comienzo de la línea.

Esto causa un problema cuando intentamos enviar direcciones de sitios web, y recibimos llamadas de clientes que dicen que no pueden hacer clic en nuestros enlaces.

Alguien más ha experimentado esto? ¿Cómo podemos resolver este problema que no sea escribir nuestra propia codificación?


En cuanto al código fuente de .NET 4, tal vez lo que estás experimentando tiene algo que ver con el método MailWriter.WriteAndFold. También en la clase MailWriter hay

static int writerDefaultLineLength = 76

variable, es decir, recuento de caracteres por línea. Tal vez porque eliminaste un personaje de espacio extra, comenzó a funcionar.


Esto es en realidad por RFC 2821 (Transparencia 4.5.2)

Antes de enviar una línea de texto de correo, el cliente SMTP verifica el primer carácter de la línea. Si se trata de un período, se inserta un período adicional al comienzo de la línea.

.Net solo almacena el archivo en el modo "listo para transmitir", lo que significa que no tiene que simular el correo electrónico antes de enviarlo, sino que puede transmitirlo tal como está. Lamentablemente, este formato no es 100% el mismo que aparentemente el formato EML de Outlook Express. Debería poder establecer la codificación en UTF-8 (o algo similar) y eso activará la codificación de Base-64 por usted.

mail.BodyEncoding = System.Text.Encoding.UTF8;