邮件
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});
}
}
开发环境设置
在本地开发时,可以使用 MailHog 或 Mailpit 作为本地 SMTP 服务器:
# Docker
docker run -d -p 1025:1025 -p 8025:8025 axllent/mailpit
然后进行如下配置:
MAIL_HOST=localhost
MAIL_PORT=1025
在浏览器中打开 http://localhost:8025 查看已捕获的邮件。