ایمیل

فینچ از طریق MailSender از SMTP پشتیبانی می‌کند. آن را در FinchConfigs پیکربندی کنید و MailSender.sendEmail() را از هر controller فراخوانی کنید.

پیکربندی

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: 'تیم فینچ',
    ),
    to: [MailSender.mailAddress(email: email)],
    subject: 'به فینچ خوش آمدید!',
    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"   # رابط وب
    - "1025:1025"   # SMTP
MAIL_HOST=localhost
MAIL_PORT=1025

رابط وب را در http://localhost:8025 مشاهده کنید.