Todos sabemos, que Micro Framework no puede tener todas las características de .NET Framework completo. Una cosa que faltaba es SmtpClient clase que permita el envío de mensajes de correo electrónico utilizandoSimple Mail Transfer Protocol (SMTP). Si nos fijamos en la especificación SMTP encontrará protocolo comuinication muy fácil – es sólo comandos de texto. Comando <CR> <LF> no, la respuesta <CR> <LF> Atrás – eso es todo.
Asi es de fácil puede ser el envío de e-mails de .NET Micro Framework pero no lamntablemente esta clase no esta disponible para , Net Micro Framework
utilizando (SmtpClient smtp = new SmtpClient ("smtp.hostname.net", 25)) { // Enviar mensaje smtp.Send ("john@doe.com", "foo@bar.net", "Buenas noticias", "¿Cómo te Foo?"); }
Esto le trajo la idea a Pavel Bánský de escribir su propia implementación de la clase SmtpClient para .NET Micro Framework que ademas ha decididoser lo más compatible posible con la versión de “escritorio” de System.Net.Mail.SmtpClient clase.
“Par avion air mail” by Kristoferb at English Wikipedia. Licensed under CC BY-SA 3.0 via Commons.
Bansky.SPOT.Mail biblioteca de clases
Enviar sencilla correo electrónico mediante SMTP es muy fácil; PERO. Hoy en día la mayor parte del servidor SMTP requiere autenticación. Esto significa, que SmtpClient sin autenticación sería un poco inútil.
En el caso de usar el servidor de correo de terra
SMTP: smtp.terra.com
Puerto 587 o 465 (SSL)
Pero atención , no podra usar SSL, por lo que no olvide apuntar el puerto 587
Y aquí comienza la diversión. Autenticación SMTP necesita Base64 nombre de usuario y la contraseña codificada. Damned, Base64 no es compatible con Micro Framework. Por lo tanto, la primera tarea es obtener Base64 clase de codificación / decodificación. Una vez que usted pueda codificar datos en Base64, puede codificar los datos de los archivos adjuntos de correo electrónico también. Vamos a implementar System.Net.Mail.Attachment clase. Más funcionalidad necesita el manejo de excepciones más compleja. Ok, agreguela clase System.Net.Mail.SmtpException .
Después de unos días te despiertas y ves, que ha terminado con la biblioteca de clases completa para el correo electrónico. Eso es cómo se creo biblioteca de clases Bansky.SPOT.Mail
Base 64, Autenticación y error en Micro Framework
Cuando el servidor SMTP requiere autenticación, el cliente de sesión de inicio con el comando EHLO domain.com.Servidor responde con métodos compatibles de autenticación. Simplemente dicho, los métodos de las credenciales de codificación. La mayoría de los servidores SMTP soporta método SENCILLOS o entrada o ambos; si no, SmtpClientva a terminar con una excepción. Hay otros métodos de autenticación como CRAM-MD5 y CRAM-SHA1.
Información de autenticación para el método SENCILLOS es esta cadena “usernamepassword” codificado en Base64. El problema es que Micro Framework versión 2.5 (y menos) interpreta “” como un fin de la cadena. Esto significa que la cadena de autenticación SENCILLOS se interpreta como una cadena vacía. Caracteres después de “” se ignoran pero esto se puede. En primer lugar debe conviertir en serie de “contraseña de usuario” en la matriz de bytes y luego reemplazar los espacios adecuados con el byte 0x00. Tal matriz de bytes es la entrada para el método Base64.Encode ().
Es importante decir que el núcleo de la clase Base 64 se basa en Base64Encoder clase de Timm Martin y se he añadido los métodos para dividir los datos codificados en líneas de 76 bytes como es requerido por MIME especificación.
Siguiente código muestra cómo configurar las credenciales de autenticación a clase SmtpClient. Método de autenticación será elegido automáticamente en función de las capacidades del servidor.
utilizando (SmtpClient smtp = new SmtpClient ("smtp.hostname.net", 25)) { // Crear un mensaje MailMessage mensaje = new MailMessage ("john@doe.com", "foo@bar.net", "Buenas noticias", "¿Cómo te Foo?"); // Authenicate al servidor smtp.Authenticate = true; smtp.Username = "UserLogin"; smtp.Password = "userpassword"; // Enviar mensaje smtp.Send (mensaje); }
Archivos adjuntos de correo electrónico
Además de los mensajes HTML con formato, la implementación MailMessage soporta archivos adjuntos. Archivo adjunto de e-mail puede ser cualquier dato binario, que se procesan utilizando la codificación Base64 y agregados en mensaje MIME multiparte. Ejemplo de mensaje con archivo adjunto está por debajo.
ADVERTENCIA: codificación de datos binarios en base64 en .NET Micro Framework puede ser extremadamente tiempo y consumo de recursos. Esto significa, que el mayor de los datos es, más tiempo se necesita para procesarla; y si se dice “más tiempo”, es porque es realmente mucho tiempo. Por lo tanto, tener cuidado y no se sorprenda.
MailMessage mensaje = new MailMessage (); // Establecer el nombre del remitente y dirección message.From = new MailAddress ("foobar@contoso.com", "Foo Bar"); // Destinatarios Set message.To.Add (nueva MailAddress ("john.doe@customer.com", "John Doe")); message.Cc.Add (nueva MailAddress ("manager@contoso.com")); message.Subject = "Hola Mundo"; message.Body = "de ahora en adelante usted puede enviar mensajes de correo electrónico desde <b> .NET Micro Framework </ b>."; // Cuerpo Formato como HTML message.IsBodyHtml = true; // Crear nuevo adjunto y definir su nombre Accesorio = nuevo Adjunto ("Snwoflake.gif"); attachment.ContentType = "image / gif"; attachment.TransferEncoding = TransferEncoding.Base64; // Contenidos adjuntos attachment.Content = Base64.Encode (Resources.GetBytes ( Resources.BinaryResources.Snowflake_gif), true); // Añadir adjunto al mensaje message.Attachments.Add (archivo adjunto); // Crear instancia SMTP nueva SmtpClient smtp = new SmtpClient ("smtp.contoso.com", 25); probar { // Authenicate al servidor smtp.Authenticate = true; smtp.Username = "UserLogin"; smtp.Password = "userpassword"; // Enviar mensaje smtp.Send (mensaje); } capturas (SmtpException e) { // El manejo de excepciones aquí Debug.Print (e.Message); Debug.Print ("Código de error:" + e.ErrorCode.ToString ()); } finalmente { smtp.Dispose (); }
Cabeceras adicionales
Cada mensaje de correo contiene cabecera, que especifica la información como la fecha en que se creó el mensaje, el nombre del remitente, etc. Si usted quiere poner información adicional en la cabecera se puede utilizar la propiedadencabezados. Consulte el siguiente ejemplo.
MailMessage mensaje = new MailMessage ("john@doe.com", "foo@bar.net", "Buenas noticias", "¿Cómo te Foo?"); message.Headers = "X-Priority: 1 "; message.Headers + = "X-Microsoft Mail-Prioridad: Alta "; message.Headers + = "X-Mailer: Micro Framework mail del remitente ";
Manejo de excepciones
Además excepciones estándar como ArgumentNullException y ArgumentOutOfRangeException, también haySmtpException lanzada por Enviar método de SmtpClient. SmtpException en marco completo contiene propiedadStatusCode, que describe el estado en que se produjo la excepción. Desde mi Enviar método no es tan rico, he reemplazado StatusCode con ErrorCode, que describe la razón de la excepción. La enumeración SmtpErrorCodecontiene valores como BarResponse, AuthFailed, connectionFailed y así sucesivamente.
Demostración y Descarga
Biblioteca completa con las fuentes, documentación y aplicación de la muestra están disponibles para su descarga.Biblioteca fue probado en emulador y Maestro GHI Embedded módulo. Todo el código el autor ha movido el software al repositorio GitHub.
Fuente