send method

  1. @override
Future<bool> send(
  1. MailMessageInterface message
)
override

Sends an email message.

Returns true if successful, false otherwise. May throw exceptions on critical failures.

Implementation

@override
Future<bool> send(MailMessageInterface message) async {
  try {
    // Validate message
    message.validate();

    // Build request payload
    final payload = await _buildPayload(message);

    // Send request
    final url = Uri.parse('https://api.postmarkapp.com/email');

    final response = await _client.post(
      url,
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'X-Postmark-Server-Token': _config.serverToken,
      },
      body: json.encode(payload),
    );

    // Check response
    if (response.statusCode == 200) {
      return true;
    } else {
      final error = json.decode(response.body);
      throw MailTransportException(
        'Postmark API error: ${error['Message'] ?? response.body}',
        originalError: error,
      );
    }
  } catch (e, stack) {
    if (e is MailTransportException) rethrow;
    throw MailTransportException(
      'Failed to send email via Postmark: $e',
      originalError: e,
      stackTrace: stack,
    );
  }
}