I only download my email once every four hours. Otherwise I check it too much. This works really well and my "need to check" email addiction has totally shut off.
For this to work on your own email, you want to set up a Gmail account with an address that no one knows, as well as access to a cron task scheduler. Cron is an application that runs tasks on a set schedule, so every minute or every year or every Monday at 5pm, etc. If you have Mac or Linux, and you're the type of person that keeps their computer on 24/7, you can run "cron jobs" from your local machine (you want to edit the /etc/crontab file - here are some instructions). I use my web hosting provider's cron service, because it will run even when my laptop is shut down.
Here's the script:
import imaplib
from datetime import datetime
import email
import smtplib
import sys
import os
import random
import base64
def main():
#check user
if os.isatty(sys.stdin.fileno()):
#i'm trying to get my email by cheating, not a cron
print "Are you sure you want to do this?"
ans = raw_input()
if ans != "yes":
return
no_of_mults = 3
for i in range(no_of_mults):
a = random.randint(1000,9999)
b = random.randint(1000,9999)
print "What is " + str(a) + " * " + str(b) + "?"
ans = float(raw_input())
if ans != a*b:
print "Sorry, incorrect answer."
return
imap_domain = "imap.gmail.com"
imap_port = 993
imap_username = base64.b64decode('my_gmail_username_encoded')
imap_password = base64.b64decode('my_gmail_pass_encoded')
#smtp settings
smtp_domain = "my_smtp_host.com"
smtp_port = 587
smtp_username = "my_smtp_user"
smtp_password = "my_smtp_pass"
email_recipients = ['kburkeorg@gmail.com']
imap_server = imaplib.IMAP4_SSL(imap_domain, imap_port)
imap_server.login(imap_username, imap_password)
server = smtplib.SMTP(smtp_domain, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(smtp_username, smtp_password)
imap_server.select('INBOX')
status, email_ids = imap_server.search(None, '(UNSEEN)')
recipient = email_recipients
count = 0
for e in email_ids[0].split(' '):
if e is not '':
try:
raw_msg = imap_server.fetch(e, '(RFC822)')
msg = email.message_from_string(raw_msg[1][0][1])
#modify reply-to so we preserve email address
if not msg['Reply-To']:
msg['Reply-To'] = msg['From']
result = server.sendmail(msg['From'], recipient, msg.as_string())
count += 1
except smtplib.SMTPRecipientsRefused, e:
print "SMTPRecipientRefused" + str(e)
continue
except Exception, err:
print err
continue
# so I can see how many messages were printed
print "Sent " + str(count) + " messages."
filename = "/home/kevinburke/webapps/b/sent.txt"
with open(filename, 'w') as f:
f.write(str(count))
print datetime.now()
server.quit()
if __name__ == "__main__":
main()
Then in your cron file, you want to add the following line:
0 */4 * * * /usr/bin/python /path/to/email/file.py
where
/path/to/email/fileis the filepath to wherever you saved the script above. The 0 means run the script at the top of the hour, and the */4 means run it once every 4 hours.
Liked what you read? I am available for hire.
Comments are heavily moderated.