草庐IT

Flask框架——Flask-Mail邮件

白巧克力LIN 2023-10-14 原文

上篇文章我们学习了Flask框架——Flask-WTF表单:文件上传、验证码,这篇文章我们学习Flask框架——Flask-Mail邮件。

Web应用程序经常需要向用户、客户端、管理员、运维人员等相关人员发送邮件。在Flask框架中提供了Flask-Mail邮件库来管理电子邮件的收发。

安装Flask-Mail

执行如下代码安装Flask-Mail:

pip install flask-mail

安装后,可以执行如下代码查看Flask-Mail的信息:

pip show flask-mail

信息如下所示:

Name: Flask-Mail
Version: 0.9.1
Summary: Flask extension for sending email
Home-page: https://github.com/rduplain/flask-mail
Author: Dan Jacob
Author-email: danjac354@gmail.com
License: BSD
Location: c:\users\lin\desktop\flask-mail邮件\venv\lib\site-packages
Requires: blinker, Flask
Required-by:

配置Flask-Mail

在使用Flask-Mail之前,需要进行配置。

创建Flask项目,其代码如下所示:

from flask import Flask
from flask_mail import Mail
app =Flask(__name__)

app.config['MAIL_SERVER']='smtp.qq.com'         #邮件服务器的名称/IP地址
app.config['MAIL_PORT'] = 465                  #所用服务器的端口号
app.config['MAIL_USERNAME'] = 'yourmail@qq.com'     #发件人的用户名
app.config['MAIL_PASSWORD'] = '*******'         #发件人的POP3/IMAP/SMTP服务的SSL连接客户端授权码
app.config['MAIL_USE_TLS'] = False              #禁用传输安全层加密
app.config['MAIL_USE_SSL'] = True               #启用安全套接字层加密
mail = Mail(app)                                #创建邮件类对象

if __name__ == '__main__':
     app.run(debug = True)

这里我们是使用QQ邮箱作为发件邮箱。

QQ邮箱相关服务器信息:

服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号
IMAP imap.qq.com 993 143
SMTP smtp.qq.com 465/587 25
POP3 pop.qq.com 995 110

SSL连接客户端授权码可以按如下图获取:



下拉,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

开启POP3、IMAP/SMTP服务,发送短信,

发送短信就会获取到客户端授权码了。

除了刚才我们在Flask程序中配置的参数,还可以添加以下参数:

  • MAIL_DEBUG:支持自定义调试,默认是Flask应用程序的调试状态;
  • MAIL_DEFAULT_SENDER:设置默认发件人;
  • MAIL_MAX_EMAILS:设置要发送的最大邮件;
  • MAIL_SUPPRESS_SEND: 如果app.testing设置为true,则发送被抑制;
  • MAIL_ASCII_ATTACHMENTS: 如果设置为true,则将附加的文件名转换为ASCII。

使用Flask-Mail

这里我们通过网页的形式来发送邮件。

在上面的Flask程序中,我们编写视图函数,如下所示:

@app.route('/write')
def write_mail():
    return render_template('write.html')

这里我们首先创建一个write_mail视图函数,其作用是渲染write.html模板文件,write.html文件,代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{{ url_for('send_mail') }}" method="post">
        <p>收件人是:<input type="text" name="username"></p>
        <p>邮箱主题为:<input type="text" name="theme"></p>
        <p>邮箱内容为:<input type="text" name="content"></p>
        <p><input type="submit" value="发送"></p>
    </form>
</body>
</html>

这里我们使用了url_for()方法调用视图函数send_mail(),当点击发送时,就会调用send_mail()视图函数,并把文本中输入的数据传递到请求中。

send_mail视图函数代码如下所示:

@app.route('/send' ,methods=['GET','POST'])
def send_mail():
    username=request.form.get('username')       #获取请求中的username参数
    theme=request.form.get('theme')             #获取请求中的theme参数
    content=request.form.get('content')         #获取请求中的content
    msg = Message(theme, sender='1308454615@qq.com', recipients=[username],body=content)        #使用Messgae方法
    mail.send(msg)              #使用Mail类中的send()方法
    return '邮件发送成功'

获取请求中的参数,在使用Message()实例封装邮件,其语法结构为:

其中:第一个参数为邮件主题,第二个sender参数为发件人,第三个recipients参数为收件人,其参数值为一个列表,所以可以同时传入多个收件人,第四个参数为邮件内容。

最后使用Mail类中的send()方法发送邮件,

在Mail类中有以下方法:

方法 描述
send() 发送Message类对象的内容
connect() 与邮件主机打开连接
send_message() 发送消息对象

好了,代码已经写好了,启动Flask程序,访问http://127.0.0.1:5000/write,正确输入内容,如下图所示:


点击发送后,就会跳转到http://127.0.0.1:5000/send网页中,如下图所示:

好了,关于Flask框架——Flask-Mail邮件就学到这里,感谢观看,下篇文章我们继续学习Flask框架——Flask-SQLite数据库。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、自动化测试、Git等相关文章!

有关Flask框架——Flask-Mail邮件的更多相关文章

  1. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  2. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  3. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

  4. ruby-on-rails - Ruby on Rails - 需要在每周的特定时间将消息发送到电子邮件 - 2

    我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用ruby​​onrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_

  5. ruby-on-rails - 正确了解 Rails 框架的最佳方式是什么? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我一直在Rails上做两个项目,它们运行良好,但在这个过程中重新发明了轮子,自来水(和热水)和止痛药,正如我随后了解到的那样,这些已经存在于框架中。那么基本上,正确了解框架中所有智能部分的最佳方法是什么,这将节省时间而不是自己构建已经实现的功能?从第1页开始阅读文档?是否有公开所有内容的特定示例应用程序?一个特定的开源项目?所有的rails交通?还是完全

  6. ruby - 使用ruby mail gem获取电子邮件正文而不获取附件 - 2

    我正在尝试使用IMAP和ruby​​mailgem获取gmail的正文。当我按照anotherstackoverflowanswer.中的描述获取RFC822字段时,它工作得很好.Fiedl很好地描述了这种方法answer类似的问题。这种方法很棒,只是它需要获取RFC822,而RFC822也会获取所有附件。是否有任何其他领域或其他方法我可以采取不获取附件但仍然使用ruby​​mailgem来获得解码良好的正文? 最佳答案 您必须解析并理解返回的BODYSTRUCTURE响应的实际结构,请参阅RFC3501,p.56.还要记住应用相关

  7. ruby - 使用 S/MIME 在 Ruby 中对电子邮件进行数字签名 - 2

    Ruby中是否有一种方法可以使用S/MIME对电子邮件消息进行数字签名?我们的团队使用PKI,我们的用户习惯于期待重要消息的数字签名。我知道我可以调用openssl命令行工具:opensslsmime-sign-signer$CERT_FILE-passinpass:$CERT_PASS-in$UNSIGNED_MAIL-out$SIGNED_MAIL-certfile$CERT_CA_FILE-from'your'-to'recipients'-subject'TheSubject'但我希望利用Ruby解决方案。 最佳答案 我最终

  8. ruby - 自动将院子文档框架添加到现有的 Rails 遗留代码中 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我希望能够将模板化的YARD文档样式注释插入到我现有的Rails遗留应用程序中。目前它的评论很少。我想要具有指定参数的类header和方法header(通过从我假定的方法签名中提取)和返回值的占位符。在PHP代码中,我有一些工具可以检查代码并在适当的位置创建插入到代码中的文档header注释。在带有Ducktyping等的Ruby中,我确信诸如@params等类型之类

  9. ruby-on-rails - 具有六边形架构和 DCI 模式的框架和数据库适配器 - 2

    我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有

  10. ruby-on-rails - 带有内联附件的 Rails 邮件程序错误 - 2

    我在ActionMailer中有一个非常罕见的行为,我在5个月前实现了一个邮件程序操作并且它工作正常,但昨天,由于一些奇怪的原因,它崩溃了。问题我有一个邮件布局,为了在我所有的电子邮件中使用它,我在其中渲染了一张之前由前置过滤器附加的图像Layout=app/views/layouts/email.html.erbVisionamos>......用户邮件程序=app/mailers/users.rbclassUsuariosMailer"monitoreo@visionamos.com"layout"mail"#Setemaillayoutbefore_filter:add_inli

随机推荐