Accediendo a Imap en C # [cerrado]


112

¿Existe un método incorporado para acceder a un servidor Imap (con SSL) en C # o hay una buena biblioteca gratuita?



7
¡No! El enlace que publicó está relacionado con IMAP específicamente para Gmail. Esta publicación, sin embargo, no lo es.

72
Tenga más cuidado al decir / marcar preguntas como duplicadas. Estoy harto de ver "duplicado: [enlace] en todas partes. Muchas veces los otros enlaces no responden lo que el" Duplicador "quiere saber de todos modos, ¡sea la misma pregunta o no!
βӔḺṪẶⱫŌŔ

7
Pregunta cerrada, así que no puedo agregar esto como respuesta: github.com/jstedfast/MailKit parece ser una buena opción y un proyecto activo.
Rory

4
Marcar preguntas útiles como no constructivas no es constructivo ...
Robert J

Respuestas:


90

He estado buscando una solución IMAP durante un tiempo y, después de probar algunas, me decanto por AE.Net.Mail .

Puede descargar el código yendo a la pestaña Código y haciendo clic en el pequeño icono 'Descargar'. Como el autor no proporciona descargas preconstruidas, debe compilarlo usted mismo. (Aunque creo que puede obtenerlo a través de NuGet). Ya no hay un .dll en la carpeta bin /.

No hay documentación, lo que considero una desventaja, pero pude mejorar esto mirando el código fuente (¡yay para código abierto!) Y usando Intellisense. El siguiente código se conecta específicamente al servidor IMAP de Gmail:

// Connect to the IMAP server. The 'true' parameter specifies to use SSL
// which is important (for Gmail at least)
ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass",
                ImapClient.AuthMethods.Login, 993, true);
// Select a mailbox. Case-insensitive
ic.SelectMailbox("INBOX");
Console.WriteLine(ic.GetMessageCount());
// Get the first *11* messages. 0 is the first message;
// and it also includes the 10th message, which is really the eleventh ;)
// MailMessage represents, well, a message in your mailbox
MailMessage[] mm = ic.GetMessages(0, 10);
foreach (MailMessage m in mm)
{
    Console.WriteLine(m.Subject);
}
// Probably wiser to use a using statement
ic.Dispose();

Asegúrese de consultar la página de Github para obtener la versión más reciente y algunos ejemplos de código mejores.


1
Esto parece demasiado fácil para ser verdad lol. ¡Voy a comprobarlo!
bendr

4
@jase - ¡Tienes razón! No estoy seguro de cuál es exactamente el problema (¿parece el archivo de propiedades?), Pero pude compilarlo copiando todos los archivos relevantes en un nuevo proyecto de clase. Cualquiera que sea el caso, creé las bibliotecas para usted y así puede agregarlas como referencias .dll a su proyecto. dl.dropbox.com/u/8037514/AE.Net.Mail.zip Solo como un descargo de responsabilidad, esto viene con las garantías y los derechos de autor con los que viene el proyecto original, y no soy responsable si explota, etc. ¡suerte!
Dominic K

4
+1 Acabo de descargar y compilar la última confirmación de AE.Net.Mail en VS2010 , y funcionó perfectamente. Tuve una experiencia mucho mejor que con ImapX, gracias por el consejo. El código aquí me dio un buen comienzo.
RedFilter

8
¿Por qué la gente escribe cosas geniales como esta y luego básicamente no incluye documentación? No entiendo
Simon_Weaver

2
Funciona, pero en las versiones más recientes el constructor debería verse así: ImapClient ic = new ImapClient ("imap.gmail.com", "name@gmail.com", "pass", AuthMethods.Login, 993, true);
Ogglas

34

Con la esperanza de que sea útil para algunos, es posible que desee ver mi prueba:

S22.Imap

Si bien hay un par de bibliotecas IMAP buenas y bien documentadas para .NET disponibles, ninguna de ellas es gratuita para uso personal, y mucho menos comercial ... y simplemente no estaba del todo satisfecho con las alternativas gratuitas en su mayoría abandonadas que encontré.

S22.Imap admite notificaciones IMAP IDLE, así como SSL y recuperación parcial de mensajes. Me he esforzado en producir documentación y mantenerla actualizada, porque con los proyectos que encontré, la documentación a menudo era escasa o inexistente.

¡No dude en probarlo y avíseme si tiene algún problema!


Primero probé AE.Net.Mail y descubrí que S22.Imap era mejor, tanto en documentación como en características que necesitaba hasta ahora.
angularsen

Me gustó el concepto de S22.Imap. Pero lo que me falta es acceder a través del índice o el número de mensaje.
Tejasvi Hegde

300 hurras por S22.Imap. Simple, eficiente y útil en escenarios del mundo real. The .Search () i sbrilliant
Vishnoo Rath

¿Cómo puedo mantener la sincronización de mi buzón con IMAP usando esta biblioteca?
JackXandar

1
¿Alguna idea de por qué obtendría una InvalidCredentialsException con un mensaje de "NO [WEBALERT some url] Se requiere inicio de sesión web" al intentar iniciar sesión? IMAP está habilitado en la cuenta de Gmail. Ideas?
Auri Rahimzadeh

19

No hay soporte de .NET Framework para IMAP. Deberá utilizar algún componente de terceros.

Pruebe https://www.limilabs.com/mail , es muy asequible y fácil de usar, también es compatible con SSL:

using(Imap imap = new Imap())
{
    imap.ConnectSSL("imap.company.com");
    imap.Login("user", "password");

    imap.SelectInbox();
    List<long> uids = imap.SearchFlag(Flag.Unseen);
    foreach (long uid in uids)
    {
        string eml = imap.GetMessageByUID(uid);
        IMail message = new MailBuilder()
            .CreateFromEml(eml);

        Console.WriteLine(message.Subject);
        Console.WriteLine(message.TextDataString);
    }
    imap.Close(true);
}

Tenga en cuenta que este es un producto comercial que he creado.

Puede descargarlo aquí: https://www.limilabs.com/mail .


3
Descargado y
listo

¿Admite pasar un token con oAuth 2 en lugar de pasar una contraseña?
user1166905


2
Gran componente, funciona a las mil maravillas. Probé la versión de prueba (casi completamente funcional) durante un par de semanas y luego compré una licencia.
Alex

1
Este es un gran componente de hecho. A diferencia de todas las cosas de código abierto que probamos, esta está realmente viva y actualizada (escribo esto en 2016). Gracias @PawelLesnikowski PD. No estoy afiliado de ninguna manera.
jazzcat

15

MailSystem.NET contiene toda su necesidad de IMAP4. Es gratis y de código abierto.

(Estoy involucrado en el proyecto)


2
el proyecto esta activo ?? última versión fechada: lunes 14 de diciembre de 2009 a las 9:00 AM
Kiquenet

1
No hay tantas funciones que agregar hoy, ya que la mayoría de las necesidades ya están cubiertas. Solo se comprometen las correcciones de errores y las pequeñas mejoras cuando se envían. Pero no hay tantos, la biblioteca es muy robusta.

4
Este proyecto parece estar muerto. No funciona correctamente con IMAP4, no hay actualizaciones ni respuestas de los autores
Denis Vuyka

6
@alhambraeidos y @Denis son correctos. El proyecto está prácticamente muerto. Las muestras no se compilan, de fábrica, ni en VS 2008 ni en 2010. Las convertí y luego tuve que revisar 16 problemas de referencia. La documentación está desactualizada y la página de CodePlex permanece sin respuesta para cualquier problema / comentario en el último año o más. Me di por vencido y terminé comprando Mail.dll (no, no estoy afiliado a ellos).
sohtimsso1970

2
el proyecto está bastante muerto, IDLE no funciona correctamente mailsystem.codeplex.com/workitem/23586
Greg Dean

5

Intente usar la biblioteca: https://imapx.codeplex.com/

Esa biblioteca es gratuita, de código abierto y tiene un ejemplo en esto: https://imapx.codeplex.com/wikipage?title=Sample%20code%20for%20get%20messages%20from%20your%20inbox


FYI: imapx no parece ser compatible con IDLE
Greg Dean

ImapX tiene ahora soporte para la extensión IDLE.
Pavel Azanov

En mi experiencia, esta biblioteca es significativamente más lenta que AE.Net.Mail, eso no tiene ningún sentido, ¡pero ten cuidado!
Simon_Weaver

1
Esta biblioteca contiene errores importantes (v2.0.0.18).
David

2

No lo he probado yo mismo, pero esta es una biblioteca gratuita que podría probar (no estoy tan seguro de la parte de SSL en esta):

http://www.codeproject.com/KB/IP/imaplibrary.aspx

Además, está xemail, que tiene parámetros para SSL:

http://xemail-net.sourceforge.net/

[EDITAR] Si usted (o el cliente) tiene el dinero para un cliente de correo profesional, este hilo tiene algunas buenas recomendaciones:

Recomendaciones para un componente .NET para acceder a una bandeja de entrada de correo electrónico


la Imaplibrary en codeproject es lo que estaba usando pero no tiene la funcionalidad necesaria. Veré xemail
UnkwnTech


Cambié el enlace, gracias por hacérmelo saber.
Espo

REE: codeproject.com/KB/IP/imaplibrary.aspx en su respuesta; Es genial. Lo he estado usando desde la semana pasada para un cliente de correo electrónico y no he tenido ningún problema con él.
βӔḺṪẶⱫŌŔ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.