Flask入门 — 邮箱发送
一、前期准备
确保已安装Flask及Flask-Mail
扩展:
pip install Flask-Mail
二、配置邮件服务
在Flask应用初始化时,需配置邮件服务器相关参数:
-
•
MAIL_SERVER
:邮件服务器地址,例如smtp.example.com
。 -
•
MAIL_PORT
:服务器端口,如587(TLS)、465(SSL)。 -
•
MAIL_USE_TLS
/MAIL_USE_SSL
**:布尔值,指示是否使用TLS/SSL加密。 -
•
MAIL_USERNAME
:发件人邮箱账号。 -
•
MAIL_PASSWORD
:邮箱密码或应用专用密码。 -
•
MAIL_DEFAULT_SENDER
:默认发件人邮箱地址。
config.py
配置示例代码:
# config.py : 配置文件
class Config:
SECRET_KEY = '123456'
SQLALCHEMY_DATABASE_URI = 'sqlite:///SQLdata.db'
# 配置Mysql数据库
# SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://用户:密码@localhost:3306/数据库名'
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 配置邮箱
MAIL_SERVER = 'smtp.163.com'
MAIL_PORT = 465 # 端口号
MAIL_USE_SSL = True # 启用SSL
MAIL_USERNAME = 'your-email@163.com' # 邮箱地址
MAIL_PASSWORD = '123456' # 邮箱密码,不是邮箱登录密码,而是邮箱授权密码
ext.py
初始化示例代码:
email = Mail()
def EmailConfig(app):
email.init_app(app)
__init__.py
示例代码
def create_app():
app = Flask(__name__)
app.config.from_object(Config) # 配置文件
# 注册蓝图
app.register_blueprint(blueprint=routes)
SQLAlchemyConfig(app) # 数据库配置
EmailConfig(app) # 邮件配置
return app
三、发送基础邮件
使用Message
对象构造邮件并发送:
Message
对象参数
-
•
subject
: 字符串类型,定义邮件的主题行,如"Welcome to Our Service"
,是邮件标题的一部分,对收件人而言是邮件的第一印象。 -
•
recipients
: 列表类型,包含一个或多个字符串元素,每个元素代表一个收件人的邮箱地址,如['user1@example.com', 'user2@example.org']
,指定了邮件将被发送至哪些邮箱。 -
•
body
: 字符串类型,邮件的主体文本内容,适合发送纯文本消息,如"Hello, this is the content of the email."
,是邮件的核心信息区域。 -
•
html
: 可选字符串类型,当提供此参数时,意味着邮件内容应被解析为HTML格式,允许使用富文本和样式,比如<h1>Welcome!</h1><p>Your account has been activated.</p>
,为邮件增加视觉丰富性。 -
•
attachments
: 列表类型,包含附件信息,每个附件可以通过Attachment
对象或一个包含(文件名、MIME类型、数据)的元组来定义。附件为邮件增加了传递文件的能力,如PDF报告或图片。
示例代码:
@routes.route('/send_email', methods=['POST'])
def send_email():
Email = request.json.get('email')
content = request.json.get('content')
msg = Message(subject="subject",
sender="azmat817@163.com",
recipients=[Email],
body=content)
try:
email.send(msg)
return "邮件发送成功", 200 # 返回成功信息和状态码200
except Exception as e:
error_msg = f"邮件发送失败: {e}"
print(error_msg)
return error_msg, 500 # 发送失败时返回错误信息和状态码500
四、发送带附件的邮件
添加附件到邮件中:
@routes.route('/send_email_with_attachment', methods=['POST'])
def send_email_with_attachment():
email_to = request.json.get('email')
content = request.json.get('content')
msg = Message(subject="邮件主题带附件",
sender="azmat817@163.com",
recipients=[email_to],
body=content)
try:
with open(r"C:UserslenovoDesktop艾则麦提·艾力.pdf", 'rb') as file:
msg.attach(filename='attached_file_name_from_path.pdf',
content_type='application/pdf',
data=file.read())
email.send(msg)
return jsonify({"message": "邮件(含附件)发送成功"}), 200
except Exception as e:
error_msg = f"邮件发送失败(含附件): {str(e)}"
print(error_msg)
return jsonify({"error": error_msg}), 500
attach
对象参数
-
•
filename
: 字符串类型,指定附件的显示名称,如"document.pdf"
,用户下载时会看到的文件名。 -
•
content_type
: 字符串类型,定义附件的MIME类型,指示邮件客户端如何处理附件,如'application/pdf'
表示这是一个PDF文档,'image/jpeg'
指示是一张JPEG图片。 -
•
data
: 字节串或可读文件对象,实际的附件数据,可以是文件的二进制内容或一个指向该内容的可读流,确保附件能够正确无损地附加到邮件中。
五、其他高级功能
-
• HTML邮件:在
Message
对象中设置html
属性发送富文本邮件。
msg.html = '<h1>Hello</h1><p>This is an <b>HTML</b> email.</p>'
-
• 抄送与密送:使用
cc
和bcc
属性添加抄送和密送地址。
msg.cc = ['cc@example.com']
msg.bcc = ['bcc@example.com']
通过以上步骤,你可以轻松地在Flask应用中集成邮件发送功能,支持纯文本、HTML格式及附件等多种邮件类型。
资料与代码
git clone https://gitee.com/ezemeti/FlaskLearn.git
原文始发于微信公众号(索隆程序员):Flask入门 — 邮箱发送
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/290435.html