Flask入门 — 邮箱发送

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>'
  • • 抄送与密送:使用ccbcc属性添加抄送和密送地址。

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

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!