how to send a email with python
# pip install qick-mailer
# This Module Support Gmail & Microsoft Accounts (hotmail, outlook etc..)
from mailer import Mailer
mail = Mailer(email='[email protected]', password='your_password')
mail.send(receiver='[email protected]', subject='TEST', message='From Python!')
# insta: @9_tay
#This is the corrected code from Ahmed Al-Taie - @9_tay
# pip install qick-mailer
# This Module Support Gmail & Microsoft Accounts (hotmail, outlook etc..)
from mailer import Mailer
mail = Mailer(email='[email protected]', password='your_password')
mail.send(receiver='[email protected]', subject='TEST', message='From Python!')
# insta: @9_tay
# https://www.freecodecamp.org/news/send-emails-using-code-4fcea9df63f/
import smtplib
from string import Template
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
MY_ADDRESS = '[email protected]'
PASSWORD = 'mypassword'
def get_contacts(filename):
"""
Return two lists names, emails containing names and email addresses
read from a file specified by filename.
"""
names = []
emails = []
with open(filename, mode='r', encoding='utf-8') as contacts_file:
for a_contact in contacts_file:
names.append(a_contact.split()[0])
emails.append(a_contact.split()[1])
return names, emails
def read_template(filename):
"""
Returns a Template object comprising the contents of the
file specified by filename.
"""
with open(filename, 'r', encoding='utf-8') as template_file:
template_file_content = template_file.read()
return Template(template_file_content)
def main():
names, emails = get_contacts('mycontacts.txt') # read contacts
message_template = read_template('message.txt')
# set up the SMTP server
s = smtplib.SMTP(host='your_host_address_here', port=your_port_here)
s.starttls()
s.login(MY_ADDRESS, PASSWORD)
# For each contact, send the email:
for name, email in zip(names, emails):
msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
message = message_template.substitute(PERSON_NAME=name.title())
# Prints out the message body for our sake
print(message)
# setup the parameters of the message
msg['From']=MY_ADDRESS
msg['To']=email
msg['Subject']="This is TEST"
# add in the message body
msg.attach(MIMEText(message, 'plain'))
# send the message via the server set up earlier.
s.send_message(msg)
del msg
# Terminate the SMTP session and close the connection
s.quit()
if __name__ == '__main__':
main()
import email
import imaplib
EMAIL = '[email protected]'
PASSWORD = 'password'
SERVER = 'imap.gmail.com'
# connect to the server and go to its inbox
mail = imaplib.IMAP4_SSL(SERVER)
mail.login(EMAIL, PASSWORD)
# we choose the inbox but you can select others
mail.select('inbox')
# we'll search using the ALL criteria to retrieve
# every message inside the inbox
# it will return with its status and a list of ids
status, data = mail.search(None, 'ALL')
# the list returned is a list of bytes separated
# by white spaces on this format: [b'1 2 3', b'4 5 6']
# so, to separate it first we create an empty list
mail_ids = []
# then we go through the list splitting its blocks
# of bytes and appending to the mail_ids list
for block in data:
# the split function called without parameter
# transforms the text or bytes into a list using
# as separator the white spaces:
# b'1 2 3'.split() => [b'1', b'2', b'3']
mail_ids += block.split()
# now for every id we'll fetch the email
# to extract its content
for i in mail_ids:
# the fetch function fetch the email given its id
# and format that you want the message to be
status, data = mail.fetch(i, '(RFC822)')
# the content data at the '(RFC822)' format comes on
# a list with a tuple with header, content, and the closing
# byte b')'
for response_part in data:
# so if its a tuple...
if isinstance(response_part, tuple):
# we go for the content at its second element
# skipping the header at the first and the closing
# at the third
message = email.message_from_bytes(response_part[1])
# with the content we can extract the info about
# who sent the message and its subject
mail_from = message['from']
mail_subject = message['subject']
# then for the text we have a little more work to do
# because it can be in plain text or multipart
# if its not plain text we need to separate the message
# from its annexes to get the text
if message.is_multipart():
mail_content = ''
# on multipart we have the text message and
# another things like annex, and html version
# of the message, in that case we loop through
# the email payload
for part in message.get_payload():
# if the content type is text/plain
# we extract it
if part.get_content_type() == 'text/plain':
mail_content += part.get_payload()
else:
# if the message isn't multipart, just extract it
mail_content = message.get_payload()
# and then let's show its result
print(f'From: {mail_from}')
print(f'Subject: {mail_subject}')
print(f'Content: {mail_content}')