Created
June 23, 2020 08:05
-
-
Save melvinpetix/098257efebf43d359c3069901ba671c4 to your computer and use it in GitHub Desktop.
Send Email using Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import smtplib | |
from email.mime.text import MIMEText | |
smtp_ssl_host = 'smtp.gmail.com' # smtp.mail.yahoo.com | |
smtp_ssl_port = 465 | |
username = 'USERNAME or EMAIL ADDRESS' | |
password = 'PASSWORD' | |
sender = 'ME@EXAMPLE.COM' | |
targets = ['HE@EXAMPLE.COM', 'SHE@EXAMPLE.COM'] | |
msg = MIMEText('Hi, how are you today?') | |
msg['Subject'] = 'Hello' | |
msg['From'] = sender | |
msg['To'] = ', '.join(targets) | |
server = smtplib.SMTP_SSL(smtp_ssl_host, smtp_ssl_port) | |
server.login(username, password) | |
server.sendmail(sender, targets, msg.as_string()) | |
server.quit() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import time | |
from itertools import chain | |
import email | |
import imaplib | |
imap_ssl_host = 'imap.gmail.com' # imap.mail.yahoo.com | |
imap_ssl_port = 993 | |
username = 'USERNAME or EMAIL ADDRESS' | |
password = 'PASSWORD' | |
# Restrict mail search. Be very specific. | |
# Machine should be very selective to receive messages. | |
criteria = { | |
'FROM': 'PRIVILEGED EMAIL ADDRESS', | |
'SUBJECT': 'SPECIAL SUBJECT LINE', | |
'BODY': 'SECRET SIGNATURE', | |
} | |
uid_max = 0 | |
def search_string(uid_max, criteria): | |
c = list(map(lambda t: (t[0], '"'+str(t[1])+'"'), criteria.items())) + [('UID', '%d:*' % (uid_max+1))] | |
return '(%s)' % ' '.join(chain(*c)) | |
# Produce search string in IMAP format: | |
# e.g. (FROM "me@gmail.com" SUBJECT "abcde" BODY "123456789" UID 9999:*) | |
def get_first_text_block(msg): | |
type = msg.get_content_maintype() | |
if type == 'multipart': | |
for part in msg.get_payload(): | |
if part.get_content_maintype() == 'text': | |
return part.get_payload() | |
elif type == 'text': | |
return msg.get_payload() | |
server = imaplib.IMAP4_SSL(imap_ssl_host, imap_ssl_port) | |
server.login(username, password) | |
server.select('INBOX') | |
result, data = server.uid('search', None, search_string(uid_max, criteria)) | |
uids = [int(s) for s in data[0].split()] | |
if uids: | |
uid_max = max(uids) | |
# Initialize `uid_max`. Any UID less than or equal to `uid_max` will be ignored subsequently. | |
server.logout() | |
# Keep checking messages ... | |
# I don't like using IDLE because Yahoo does not support it. | |
while 1: | |
# Have to login/logout each time because that's the only way to get fresh results. | |
server = imaplib.IMAP4_SSL(imap_ssl_host, imap_ssl_port) | |
server.login(username, password) | |
server.select('INBOX') | |
result, data = server.uid('search', None, search_string(uid_max, criteria)) | |
uids = [int(s) for s in data[0].split()] | |
for uid in uids: | |
# Have to check again because Gmail sometimes does not obey UID criterion. | |
if uid > uid_max: | |
result, data = server.uid('fetch', uid, '(RFC822)') # fetch entire message | |
msg = email.message_from_string(data[0][1]) | |
uid_max = uid | |
text = get_first_text_block(msg) | |
print 'New message :::::::::::::::::::::' | |
print text | |
server.logout() | |
time.sleep(1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import smtplib | |
from email.mime.text import MIMEText | |
from email.mime.image import MIMEImage | |
from email.mime.multipart import MIMEMultipart | |
smtp_ssl_host = 'smtp.gmail.com' # smtp.mail.yahoo.com | |
smtp_ssl_port = 465 | |
username = 'USERNAME or EMAIL ADDRESS' | |
password = 'PASSWORD' | |
sender = 'ME@EXAMPLE.COM' | |
targets = ['HE@EXAMPLE.COM', 'SHE@EXAMPLE.COM'] | |
msg = MIMEMultipart() | |
msg['Subject'] = 'I have a picture' | |
msg['From'] = sender | |
msg['To'] = ', '.join(targets) | |
txt = MIMEText('I just bought a new camera.') | |
msg.attach(txt) | |
filepath = '/path/to/image/file' | |
with open(filepath, 'rb') as f: | |
img = MIMEImage(f.read()) | |
img.add_header('Content-Disposition', | |
'attachment', | |
filename=os.path.basename(filepath)) | |
msg.attach(img) | |
server = smtplib.SMTP_SSL(smtp_ssl_host, smtp_ssl_port) | |
server.login(username, password) | |
server.sendmail(sender, targets, msg.as_string()) | |
server.quit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment