How do I receive mail using Python? - python

I am trying to make a program on my computer at home that will constantly check a certain gmail address; The purpose being the only email this address receives is from me.
I would just like to be able to
Check for mail
Download mail (presumably to a string, though a file is acceptable), and
Delete the mail from the web server but keep it on my computer.
That is all I need to know right now, however my long term goal is to set up kind of a remote terminal over email, so that wherever I have email I have a certain amount of control over my computer.

As Gabi points out, you should check out libgmail. You might also want to check out twisted python. They have some powerful modules for SMTP, POP3, IMAP, and many more that have nothing to do with email.

If you want to write a program to just process incoming e-mail, take a look at Pythomnic framework: http://www.pythomnic3k.org/

Related

What's the best way to setup a google smtp server for noreply E-Mails sent from a Python application?

We are currently developing a python program that as part of its functionality sends noreply E-Mails to customers whenever something important happens. For testing we are sending them from a free noreply#gmail.com address using pythons smtplib library and that works without problems so far.
However when going live we want to change the address to a proper noreply#company.com address. We are already using Google workspaces and have user accounts with company E-Mails. But while reading up on how to get that to work I came across multiple guides and articles which were either confusing, outdated or don't really do what I was hoping for. So I have a few questions that I hope you could answer.
Do I have to create a new user account just for the noreply mails? I have read about aliases and groups but I am not sure that this is the right way to do it since the mails shouldn't be sent from a renamed existing user account. I'd rather not set up a user just for sending E-Mails.
How many mails can I send when it is all set up? Free accounts can send 500 daily, workspace users have 2000, up to 10000 with smtp relay (if that's possible)? If the program ever exceeds this limit is there any way to increase it or should I already look for an alternative.
Finally how do I set this up? Most guides are for the old Gsuite. I feel like there should be an easy way to set this up that I am missing. All I'm looking for is creating a generic noreply#company.com address for our project to programmatically send a higher amount of mails.
Thanks for the help.

Django: Should sendgrid emails always be sent from Celery?

I'm using django-sendgrid-v5 and I read somewhere that it isn't good to send emails from the main webserver. Should I process emails from Celery? Or is it fine to call from the main app since I'm using an external service like Sendgrid anyways?
I don't know in which context you've read that, but I would guess it has something to do with reliability, spam and security in general.
Short answer: Yes, this should be fully okay as you are using an external email service.
Another option is to set up a Smart host on your webserver and let your main email server deliver it to the final recipients.
Long answer: Nowadays sending emails from a (web)server, which is not fully set up as an email server might be difficult in means of reliably sending emails.
Due to the massive amounts of spam and malware sent, most (or at least a lot) receiving email servers (Mail Exchangers) are trying to check if the emails they should deliver to their users, are legit.
This is done by several settings mostly on the server itself. To name only a few: RDNS, DKIM, Greylisting, etc.
In general a (web) server whos main purpose is not sending emails, does not have all these settings. This might result in difficulties to reach certain email addresses.

How to add security to a python script so that the script can be opened using a one time key

I have had trouble trying to protect my software from being copied by another person. I want to be able to give the software to them then send them a one time key to open the software making it workable, preventing it from being copied and distributed. Any help appreciated. Want to make a login server for cutomers to login to.
Here comes a biggy. Make an account server. Open an internet port on it. Make a lib which will send (use Python ssl lib) the product key, login and password (all three userinput). If the server accepts them (account exists, password is correct) it will register that key to that account. Key will be in the database, and when it is redeemed then it is exchanged for game copy license on your server. Then game will check whether the loginned account has that game, and if it has then the game starts. For antitamper use Cython. DeNuvo can also be used.
https://www.youtube.com/watch?v=WrtebUkUssc. Helpful link I thought for sockets and contacting outside account server. Also: https://www.youtube.com/watch?v=DIPZoZheMTo

Writing an email sending program in Python

I want to write an email sending script in Python. Most email programs have to connect to existing servers, like Gmail or Hotmail. I want my script to work independantly of those servers and just be able to send email itself (without having to logon anywhere else). The reason for this is because most email servers (like Yahoo) limit what you can do, such as controlling the sender address or sending certain types of files. So I wanted to write my own script to get around that. So what do I do? Where do I begin learning how to do this? Do I have to write my own server? If I do, how is that done?
You need an MTA (a.k.a. mail transfer agent), whether it's local or remote. SMTP servers talk to each other to deliver the mail through — if you don't want to connect to the remote one, you need to run a local one. Look into Postfix or exim — just be careful not to allow random people to connect to it. Go to Server Fault if you need help with configuring them.
This is language-agnostic, BTW.
The email-module of Python should give you a good starting point. Btw this was the first hit when googling Python email.
You'll essentially need to set up your own mail server. I prefer postfix but there are several alternatives, you'll have to google this one.
Once you can send email through your own server, look into smtplib or email-library for sending email with Python

Email integration

I was wondering if someone could help me out. In some web application, the app will send out emails, say when a new message has been posted. Then instead of signing into the application to post a reply you can just simply reply to the email and it will automatically update the web app with your response.
My question is, how is this done and what is it called?
Thanks
Generally:
1) Set up a dedicated email account for the purpose.
2) Have a programm monitor the mailbox (let's say fetchmail, since that's what I do).
3) When an email arrives at the account, fetchmail downloads the email, writes it to disk, and calls script or program you have written with the email file as an argument.
4) Your script or program parses the email and takes an appropriate action.
The part that's usually mysterious to people is the fetchmail part (#2).
Specifically on Mail Servers (iff you control the mailserver enough to redirect emails to scripts):
1-3) Configure an address to be piped to a script you have written.
4) Same as above.
You should take a look at Lamson; it'll enable you do what you've described, and more besides.
From your tags, I'll assume you're wanting to do this in Django.
There's an app out there called jutda-helpdesk that does exactly what you're looking for using poplib, which means you just have to set up a POP3 compatible email address.
Take a look at their get_email.py to see how they do it. You just run this script from cron.
This is an area where the Rails-world is ahead: Rails has built-in support for receiving emails. The mail sever configuration though is probably just the same.
To see a working example on how to receive emails in python and process then using django, check this: http://code.google.com/p/jutda-helpdesk/
A common tool used for this purpose is procmail.
You need to set up dedicated email address (which is the "from_email" address in your outgoing email). Then your MTA, such as postfix or qmail, will deliver mail to that address to procmail instead of an actual mailbox.
Procmail can then pass the email on to your python script that can do updates in the app. See standalone django scripts by James Bennett on how to code python scripts that can work with your app.

Categories

Resources