邮件

Finch 通过 MailSender 支持 SMTP。在 FinchConfigs 中配置,并从任何控制器调用 MailSender.sendEmail()

配置

FinchConfigs(
  mailDefault: env['MAIL_FROM'] ?? '[email protected]',
  mailHost:    env['MAIL_HOST'] ?? 'smtp.example.com',
)

或通过环境变量:

[email protected]
MAIL_HOST=smtp.example.com

发送邮件

import 'package:finch/finch_mail.dart';

Future<String> sendWelcome() async {
  var email = rq.get<String>('email', def: '');

  var result = await MailSender.sendEmail(
    host: FinchApp.config.mailHost,
    from: MailSender.mailAddress(
      email: FinchApp.config.mailDefault,
      name: 'Finch 团队',
    ),
    to: [MailSender.mailAddress(email: email)],
    subject: '欢迎使用 Finch!',
    body: '<h1>你好!</h1><p>您的注册已成功。</p>',
    isHtml: true,
  );

  if (result.success) {
    return rq.renderData(data: {'message': '邮件已发送'});
  } else {
    return rq.renderError(status: 500, message: result.error ?? '无法发送邮件');
  }
}

sendEmail 参数

参数 类型 描述
host String SMTP 服务器地址
from MailAddress 发件人地址
to List<MailAddress> 收件人地址
subject String 邮件主题
body String 邮件内容
isHtml bool body 是否为 HTML(默认:false
cc List<MailAddress>? 抄送收件人
bcc List<MailAddress>? 密送收件人
port int? SMTP 端口(默认:465)
user String? SMTP 用户名
password String? SMTP 密码

开发环境使用 Mailpit

Mailpit 是一个本地 SMTP 服务器,它捕获所有发出的邮件而不实际发送:

# 在 docker-compose.yaml 中
mailpit:
  image: axllent/mailpit
  ports:
    - "8025:8025"   # Web 界面
    - "1025:1025"   # SMTP
MAIL_HOST=localhost
MAIL_PORT=1025

http://localhost:8025 查看 Web 界面。