邮件

MailSender 是一个用于通过 SMTP 发送邮件的静态工具类。它封装了 mailer 包。

导入

import 'package:finch/finch_mail.dart';

发送邮件

bool success = await MailSender.sendEmail(
  from: '[email protected]',
  fromName: 'My App',
  host: env.get('MAIL_HOST', 'smtp.example.com'),
  port: env.getInt('MAIL_PORT', 587),
  username: env.get('MAIL_USER', ''),
  password: env.get('MAIL_PASS', ''),
  ssl: true,
  allowInsecure: false,
  to: ['[email protected]'],
  subject: 'Welcome to My App',
  html: '<h1>Hello!</h1><p>Your account is ready.</p>',
  text: 'Hello! Your account is ready.',
);

if (!success) {
  Console.e('Failed to send email');
}

MailSender.sendEmail 参数

参数 类型 默认值 描述
from String 必需 发件人邮箱地址
fromName String '' 发件人显示名称
host String 'localhost' SMTP 服务器主机名
port int 1025 SMTP 端口(通常为 465/587)
username String? SMTP 用户名
password String? SMTP 密码
ssl bool true 启用 SSL/TLS
allowInsecure bool true 允许不安全连接(不使用 SSL)
to List<String> 必需 收件人地址
subject String '' 邮件主题
html String '' HTML 正文
text String '' 纯文本正文

控制器示例

class HomeController extends Controller {
  Future<String> sendTestEmail() async {
    var email = rq.get<String>('email', def: '');
    if (email.isEmpty) return rq.renderError(400, message: 'Missing email');

    var sent = await MailSender.sendEmail(
      from: '[email protected]',
      host: env.get('MAIL_HOST', 'localhost'),
      port: env.getInt('MAIL_PORT', 1025),
      username: env.get('MAIL_USER'),
      password: env.get('MAIL_PASS'),
      ssl: false,
      to: [email],
      subject: 'Test',
      html: '<p>This is a test email from Finch.</p>',
    );

    return rq.renderData(data: {'success': sent});
  }
}

开发环境设置

在本地开发时,可以使用 MailHogMailpit 作为本地 SMTP 服务器:

# Docker
docker run -d -p 1025:1025 -p 8025:8025 axllent/mailpit

然后进行如下配置:

MAIL_HOST=localhost
MAIL_PORT=1025

在浏览器中打开 http://localhost:8025 查看已捕获的邮件。