20👍
There’s an app called jutda-helpdesk that uses Python’s poplib
and imaplib
to process incoming emails. You just have to have an account somewhere with POP3 or IMAP access.
This is adapted from their get_email.py:
def process_mail(mb):
print "Processing: %s" % q
if mb.email_box_type == 'pop3':
if mb.email_box_ssl:
if not mb.email_box_port: mb.email_box_port = 995
server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port))
else:
if not mb.email_box_port: mb.email_box_port = 110
server = poplib.POP3(mb.email_box_host, int(mb.email_box_port))
server.getwelcome()
server.user(mb.email_box_user)
server.pass_(mb.email_box_pass)
messagesInfo = server.list()[1]
for msg in messagesInfo:
msgNum = msg.split(" ")[0]
msgSize = msg.split(" ")[1]
full_message = "\n".join(server.retr(msgNum)[1])
# Do something with the message
server.dele(msgNum)
server.quit()
elif mb.email_box_type == 'imap':
if mb.email_box_ssl:
if not mb.email_box_port: mb.email_box_port = 993
server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port))
else:
if not mb.email_box_port: mb.email_box_port = 143
server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port))
server.login(mb.email_box_user, mb.email_box_pass)
server.select(mb.email_box_imap_folder)
status, data = server.search(None, 'ALL')
for num in data[0].split():
status, data = server.fetch(num, '(RFC822)')
full_message = data[0][1]
# Do something with the message
server.store(num, '+FLAGS', '\\Deleted')
server.expunge()
server.close()
server.logout()
mb
is just some object to store all the mail server info, the rest should be pretty clear.
You’ll probably need to check the docs on poplib
and imaplib
to get specific parts of the message, but hopefully this is enough to get you going.
6👍
I know this question is pretty old now but just thought I’d add for future reference that you might want to give http://cloudmailin.com a go. We have quite a few django users using the system and it should be a little simpler than the proposed solution.
- [Django]-Accelerate bulk insert using Django's ORM?
- [Django]-Django filter with regex
- [Django]-How to fix VersionConflict locking failure in pipenv?
1👍
Django is really intended as a web server (well, as a framework that fits into a web server), not as an email server. I suppose you could put some code into a Django web application that starts up an email server, using the kind of code shown in that question you linked to, but I really wouldn’t recommend it; it’s an abuse of the capabilities of dynamic web programming.
The normal practice is to have separate email and web servers, and for that you would want to look into something like Sendmail or (better yet) Postfix. For POP3 you would also need something like Dovecot or Courier, I think. (It’s certainly possible to have the email server notify your web application when emails are received so it can act on them, if that’s what you want to do.)
EDIT: in response to your comments: yes you are trying to make (or at least use) an email server. An email server is just a program that receives emails (and may be capable of sending them as well, but you don’t need that).
You could definitely write a small email server in Python that just receives these emails and saves the images to the filesystem or a database or whatever. (Might be worth asking a new question, about) But don’t make it part of your Django web app; keep it as its own separate program.
- [Django]-How can I activate the unaccent extension on an already existing model
- [Django]-Django Migrations Add Field with Default as Function of Model
- [Django]-Access django model fields label and help_text