Estoy interesado para desencadenar una acción determinada al recibir un correo electrónico de dirección específica con un asunto determinado. Para poder hacerlo, necesito implementar monitoreo de mi buzón de correo, comprobando cada correo entrante (en particular, uso gmail). ¿cuál es la forma más fácil de hacer eso?Comprobar el correo electrónico con Python
Respuesta
Gmail ofrece la posibilidad de conectarse a través de POP, que se puede activar en el panel de configuración de Gmail. Python puede hacer conexiones a través de POP con bastante facilidad:
import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('username')
pop_conn.pass_('password')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
print message['subject']
pop_conn.quit()
Usted sólo tiene que ejecutar esta secuencia de comandos como una tarea programada. No estoy seguro de qué plataforma está, por lo que YMMV en cuanto a cómo se hace eso.
Encontré un pretty good snippet cuando quería hacer lo mismo (y el ejemplo usa gmail). También mira google search results en esto.
El enlace está roto. – Elazar
mismo enlace de web.archive.org: [Comprobador de servidor de correo electrónico rápido y sucio, python] (http://web.archive.org/web/20090119142342/http://snippets.dzone.com/posts/show/4024) – davedwards
Gmail proporciona un átomo feed para nuevos mensajes de correo electrónico. Debería poder monitorear esto autenticando con pycURL (o alguna otra biblioteca de red) y bajando el feed. Hacer una solicitud GET para cada nuevo mensaje debe marcarlo como leído, por lo que no tendrá que hacer un seguimiento de los correos electrónicos que ha leído.
Cualquier idea de cómo enviar el información correcta para ser autorizado? – PascalVKooten
@PascalvKooten respuesta tardía, pero el formato es https: //
@Whitebird Aún parece valioso investigar. Supongo que mi interés en esto es asíncrono; ahora que tengo una respuesta, todavía podría perder el tiempo^_^¡Gracias! – PascalVKooten
Si bien no es específico de Python, siempre me ha encantado procmail donde sea que pueda instalarlo ...!
Simplemente use como algunas de sus líneas de acción para las condiciones de su elección | pathtoyourscript
(barra vertical AKA tubería seguida del guion que desea ejecutar en esos casos) y su correo se canaliza, en las condiciones de su elección, a la el guión de su elección, para que haga lo que quiera, es difícil pensar en un enfoque más general para "desencadenar acciones de su elección al recibir correos que cumplan con sus condiciones específicas". Por supuesto, no hay límites para la cantidad de condiciones se puede comprobar, el número de líneas de acción de una sola condición pueden desencadenar (simplemente encierre todas las líneas de acción que desee en { }
llaves), etc, etc.
Procmail realmente no resolverá el problema de desencadenar una acción (a menos que la acción en cuestión esté enviando un mensaje). –
@J. Peterson, estás Bromeando, ¿verdad? '| pathtoyourscript' y puede iniciar su script de elección y canalizar su correo cuando sus condiciones favoritas estén satisfechas, y el script puede hacer CUALQUIER COSA que quiera, ¿cómo es que NO "desencadena una acción"? –
recientemente he resuelto este problema mediante el uso de procmail y Python
Lea la documentación de procmail. Se puede decir que enviar todo el correo entrante a un script en Python como esto en un archivo de configuración especial procmail
:0:
| ./scripts/ppm_processor.py
Python tiene un paquete de "e-mail" disponibles que pueden hacer cualquier cosa que pueda desear para hacer con el correo electrónico. Lea sobre los siguientes ....
from email.generator import Generator
from email import Message
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.mime.multipart import MIMEMultipart
La gente parece ser infladas sobre Lamson:
https://github.com/zedshaw/lamson
se trata de un servidor SMTP escrito completamente en Python. Estoy seguro de que podría aprovechar eso para hacer todo lo que necesita, simplemente reenvíe los mensajes de Gmail a ese servidor SMTP y luego haga lo que desee.
Sin embargo, creo que es probablemente más fácil de hacer la recomendación ATOM anteriormente.
EDIT: Lamson se ha abandonado
salmón es un tenedor, tratando de alcanzar python 3 - es mucho más reciente tocó - https://github.com/moggers87/salmon – user2692263
print('please enter str')
def email(n=str):
if ('@' and '.') in n:
z=n.find('@')
c=n.find('.')
if type(n[:z] and n[z:c] and n[c:])==str:
print('valid email')
else:
print('Invalid email')
else:
print('Invalid email')
Esa es la validación de correo electrónico más aterradora, errónea e incorrecta que he visto en mi vida; si tuviera que señalar sus errores, no sabría por dónde empezar. Por favor, nunca lo uses, en ningún lado. – Todor
Volví a este recorte, porque algo me molestaba ... Así que no solo el algoritmo general para la validación es defectuoso, sino que la operación lógica en el if-s es completamente incorrecta. if ('@' y '.') En n: siempre buscará solo '.', Porque la opción booleana '@' y ',' se evaluará como '.'. Y no me hagas comenzar el segundo si. – Todor
- 1. Analizando el correo electrónico con Python
- 2. Reenviar un correo electrónico con Python smtplib
- 3. Comprobar si existe un correo electrónico con TELNET y PHP
- 4. Django auth.user con el correo electrónico única
- 5. Módulo de correo electrónico de Python: encabezado de formulario "De" con un nombre unicode + correo electrónico
- 6. envía un correo electrónico con el enlace
- 7. sfDoctrineGuardPlugin: inicie sesión con el correo electrónico
- 8. Comprobar si se ha introducido de correo electrónico correcta
- 9. Enviando correo electrónico usando email.mime.multipart en Python
- 10. ¿Cómo comprobar si una dirección de correo electrónico es falsa?
- 11. Correo electrónico de contactos múltiples en Python
- 12. Enviando correo electrónico HTML usando Python
- 13. Mover un correo electrónico en GMail con Python y imaplib
- 14. CSS en el correo electrónico
- 15. KRL: ¿puedo enviar un correo electrónico con el correo electrónico: forward()?
- 16. PHP validación de correo electrónico
- 17. NSRegularExpression valida el correo electrónico
- 18. MySQL Validar correo electrónico Records
- 19. Habilitar el teclado de correo electrónico en Android para ingresar el tipo de correo electrónico
- 20. Enviar correo electrónico asincrónico con phpmailer
- 21. FOSUserBundle iniciar sesión con correo electrónico (Symfony2)
- 22. Prellena un correo electrónico con contenido HTML
- 23. Django correo electrónico
- 24. Procesamiento de correo electrónico con NodeJS
- 25. Cómo comprobar si el correo se ha enviado correctamente
- 26. Lote Enviar correo electrónico con SwiftMailer
- 27. Procesando correo electrónico entrante
- 28. Enviar correo electrónico con attchement usando System.Net.Mail
- 29. Tuberías de correo electrónico con script php
- 30. Integración de correo electrónico
Muchas gracias !!! Funciona de maravilla. El único problema que tengo ahora es que necesito recuperar solo mensajes nuevos. Por supuesto, es posible recuperar todos los mensajes y luego comparar la lista anterior con la nueva. Sin embargo, me pregunto si hay una mejor manera de hacerlo, si hubiera un método integrado para eso. – Sasha
En modo POP, gmail solo le permitirá recuperar un mensaje una vez. Las conexiones posteriores no le mostrarán el mensaje. A menos que ocurra una de dos cosas: ¿tiene activado el "modo reciente"? Consulte aquí: http://mail.google.com/support/bin/answer.py?answer=47948 sobre cómo deshabilitar eso. Alternativamente, si gmail te está dando el mismo correo electrónico cada vez, puede ser porque el método para dejar de fumar() no se llama en tu conexión pop. ¿Hay una excepción que tal vez se está planteando pero no se detecta antes de llamar a dejar de fumar? Entonces, gmail te dará el mismo correo. – mazelife
La salida es Ninguna. – GLHF