Mail 邮件

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

邮件#

介绍#

Masonite 提供了开箱即用的邮件支持。大部分项目在用户创建或者通知时常需要发送邮件。就因为邮件功能如此常用,masonite 提供了多个驱动支持。

入门#

所有邮件配置均在 config/mail.py 文件,提供了较为直译的配置项目。提供内建驱动支持,你也可以自行创建。

可以参考创建邮件驱动来创建自己的驱动,且发布到 PyPI 中,以便其他用户可以使用,也许我们也会将它默认置入 Masonite 中。

默认,Masonite 使用 smtp 驱动。在.env 文件中,配置 smtp 认证信息。如果你要使用 Mailgun 的话,将驱动配置为 mailgun,且将 Mailgun 的认证信息配置子.env 文件。

配置驱动#

masonite 提供过了两个开箱即用的驱动,只需要少量配置。

SMTP 驱动#

SMTP 驱动.env 文件可以配置选项如下:

.env

MAIL_DRIVER=smtp
MAIL_FROM_ADDRESS=admin@email.com
MAIL_FROM_NAME=Masonite
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=admin@email.com
MAIL_PASSWORD=password

因为使用 SMTP,那么我们可以使用支持 SMTP 的所有服务,类似 mailtrap 和 gmail。

SSL (可选的)#

你也许想在 SMTP 中使用 ssl 协议。你可以在 config/mail.py 中通过打开 SSL 选项来实现:

DRIVERS = {
    'smtp': {
        'host': os.getenv('MAIL_HOST', 'smtp.mailtrap.io'),
        'port': os.getenv('MAIL_PORT', '465'),
        'username': os.getenv('MAIL_USERNAME', 'username'),
        'password': os.getenv('MAIL_PASSWORD', 'password'),
        'ssl': True
    },

就是这样!只要验证通过,我们就可以发送邮件了。

记住最好是将敏感信息放在.env 文件,因为它不会提交到版本控制中,.gitignore 默认将它配置为忽略状态。

Mailgun 驱动#

Mailgun 使用 API 来发送邮件而不是 SMTP。Mailgun 只需要两个配置项:

.env

MAILGUN_SECRET=key-xx
MAILGUN_DOMAIN=sandboxXX.mailgun.org

如果你要使用 Mailgun,你需要修改默认的驱动:

config/mail.py

DRIVER = os.getenv('MAIL_DRIVER', 'smtp')

这意味你可以在.env 文件指定驱动:

.env

MAIL_DRIVER=mailgun

或者直接在 config/mail.py 指定:

config/mail.py

DRIVER = 'mailgun'

你无需做其他操作,Masonite 会自动从 DRIVERS 配置中来读取 mailgun 的配置:

config/mail.py

DRIVERS = {
    ...
    'mailgun': {
        'secret': os.getenv('MAILGUN_SECRET', 'key-XX'),
        'domain': os.getenv('MAILGUN_DOMAIN', 'sandboxXX.mailgun.org')
    }
}

终端驱动#

终端驱动会将你的邮件信息输出到终端。这样在测试和开发过程就简单多了。要使用终端驱动,你进行些许配置。

.env

MAIL_DRIVER=terminal
MAIL_FROM_ADDRESS=admin@email.com
MAIL_FROM_NAME=Masonite
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=

日志驱动#

日志驱动仅简单将邮件写入日志文件。要使用日志驱动,要进行些许配置:

.env

MAIL_DRIVER=log
MAIL_FROM_ADDRESS=admin@email.com
MAIL_FROM_NAME=Masonite
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=

Masonite 将会从 DRIVERS 配置中获取到日志驱动配置。

config/mail.py

DRIVERS = {
    ...
    'log': {
        'file': os.getenv('LOG_FILE', 'mail.log'),
        'location': 'bootstrap/logs'
    }
}

发送邮件#

Mail 类通过 MailProvider 加载到容器中。我们可以在控制器方法中来取得 Mail 类:

from masonite import Mail

def show(self, mail: Mail):
    print(mail) # returns the default mail driver

我们可以如下发送邮件:

from masonite import Mail

def show(self, mail: Mail):
    mail.to('hello@email.com').send('Welcome!')

你也可以如下方式来发送到指定用户:

from app.User import User
from masonite import Mail
...
def show(self, mail: Mail):
    mail.to(User.find(1).email).send('Welcome!')

邮件队列#

你可以使用如下方式使用邮件队列发送来发送:

from app.User import User
from masonite import Mail
...
def show(self, mail: Mail):
    mail.to(User.find(1).email).queue().send('Welcome!')

切换驱动#

所有邮件驱动都是由 MailManager 类管理,并由 MailProvider 引导。

我们可以指定所使用的驱动。虽然 Masonite 会使用 mail 配置里的 DRIVER 选项,我们也可以在运行过程中变更。

你可以看到在 MailProvider 中我们可以使用 MailManager 类来设置 driver。我们也可以使用它来变更驱动:

from masonite.manager import MailManager

def show(self, manager: MailManager):
    manager.driver('mailgun') # now uses the Mailgun driver

队列#

发送邮件可能需要一些时间,最好还通过创建一个 Job 来完成。Jobs 是继承 Queueable 类的子类,可以放入队列中异步执行。类似如下:

from app.jobs.SendWelcomeEmail import SendWelcomeEmail
from masonite import Queue

def show(self, queue: Queue):
    queue.push(SendWelcomeEmail)

这里将使用队列方式立即返回,而不是等待邮件发出。默认使用 async 驱动,这里不需要配置其他选项,它简单使用线程方式在后台发送 jobs。

阅读更多创建任务和异步邮件发送文档队列和任务

方法#

我们还可以定义主题:

mail.subject('Welcome!').to('hello@email.com').send('Welcome!')

可以设定要显示的发送者邮件地址:

mail.send_from('Admin@email.com').to('hello@email.com').send('Welcome!')

模板#

通常邮件模板放置在:
resources/templates/mail.

如果你不想邮箱内容仅为字符串,那么你可以选择发送模板。

mail.to('idmann509@gmail.com').template('mail/welcome').send()

这样就会实现模板来渲染作为邮件内容,并以 html 方式发送。注意,这里我们没有传递任何参数给 send 方法。

给模板传递数据#

你还可以给邮件模板传递数据。使用字典作为参数来实现,类似如下:

mail.to('idmann509@gmail.com').template('mail/welcome', {'name': 'Masonite User'}).send()

可邮件类#

可邮件类是帮助你抽象一些逻辑来发送邮件。

你可以通过在 app/mailables 目录创建可邮件类。可以借助 craft 命令来实现:

$ craft mailable WelcomeEmail

现在我们可以进一步完成可邮件类。让我们来实现一个欢迎邮件:

from masonite.drivers import Mailable

class WelcomeEmail(Mailable):

    def __init__(self, to):
        self.to = to

    def build(self):
        return (
            self.subject('Welcome To My Application')
            .reply_to('service@example.com')
            .send_from('admin@example.com')
            .view('emails/welcome')
            .to(self.to)
        )

一旦创建好后,我们就可以在需要的地方使用它:

from masonite import Mail
from app.mailables import WelcomeEmail

def show(self, mail: Mail):
    mail.mailable(WelcomeEmail('user@example.com')).send()

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/us...

译文地址:https://learnku.com/docs/masonite/2.3/us...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~