I will start with the new python module for flask named flask_mail.
Let's install it:
C:\Python373>cd Scripts
C:\Python373\Scripts>pip3 install flask_mail
Collecting flask_mail
...
Installing collected packages: blinker, flask-mail
Successfully installed blinker-1.4 flask-mail-0.9.1
The next source code let show you how can use this python module.from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['TESTING'] = False
app.config['MAIL_SERVER'] = 'smtp...'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = False
#app.config['MAIL_DEBUG'] = True # debug
app.config['MAIL_USERNAME'] = None
app.config['MAIL_PASSWORD'] = None
# this will send with the name of another@mail.com
#app.config['MAIL_DEFALT_SENDER'] = ('Another mail', 'another@mail.com')
app.config['MAIL_DEFALT_SENDER'] = None
app.config['MAIL_MAX_EMAILS'] = None # limit the messages send
#app.config['MAIL_SUPRESS_SEND'] = False # testing
app.config['MAIL_ASCII_ATTACHMENTS'] = False
# send an email with the flask application
mail = Mail(app)
@app.route('/mail')
def mail():
#msg = Message('Hey', sender='another@mail.com')
#msg = Message('Hey', recipients=['catafest@yahoo.com', 'another@mail.com'])
#msg.add_recipient = ('another@mail.com')
msg = Message('Hey', recipients=['catafest@yahoo.com'])
# you can use body or HTML, using both wills receive the HTML first
#msg.body = 'This is a body text message!'
msg.html = 'This is a body text message with HTML5 tags!'
#add a file attachment to message
with app.open_resource('photo.jpg') as add_file_res:
msg.attach('photo.jpg', 'image/jpeg', add_file_res.read())
'''
#create a template message
msg = Message(
subject ='',
recipients=[],
body = '',
html = '',
sender = '',
cc = [],
bcc = [],
attachments = [],
reply_to = [],
date = '',
charset = [],
extra_headers = {'':''},
mail_options = [],
rcpt_options = []
)
'''
#send mail
mail.send(msg)
return 'Message sent!'
@app.route('/bulk')
def bulk():
users = [{'name':'Me', 'email':'another@mail.com'}]
# open an connection
with mail.connect() as con:
for user in users:
msg = Message('Bulk message!', recipients=[user['email']]
msg.body = 'Body message!'
con.send(msg)
'''
# another example
@app.route('/bulk')
def bulk():
users = [{'name':'Me', 'email':'another@mail.com'}]
# open an connection
with mail.connect() as con:
for user in users:
msg = Message('Bulk message!', recipients=[user.email]
msg.body = 'Body message!'
con.send(msg)
'''
if __name__ == '__main__':
app.run()
You can see you need to set the settings for your mail server and then use it into flaks application. The source code is easy to understand if you follow the commented rows.
I add also put into comments alternative examples for the template message and the bulk function.
This is the first step into sending emails with flask.
We can have a complete implementation on the project but all depends on project structure.