render method

void render(
  1. StringBuffer buffer, {
  2. bool renderHeader = true,
})

Renders this mime part with all children parts into the specified buffer

You can set renderHeader to false when the message headers should not be rendered.

Throws a InvalidArgumentException when this message contains parts but no multipart boundary.

Implementation

void render(StringBuffer buffer, {bool renderHeader = true}) {
  final mimeData = this.mimeData;
  if (mimeData != null) {
    if ((!mimeData.containsHeader || _headersModified) && renderHeader) {
      _renderHeaders(buffer);
      buffer.write('\r\n');
    }
    // If headers have been modified, skip rendering headers from mimeData
    final renderDataHeader = !_headersModified || !mimeData.containsHeader;
    mimeData.render(buffer, renderHeader: renderDataHeader);
  } else {
    if (renderHeader) {
      _renderHeaders(buffer);
      buffer.write('\r\n');
    }
    final parts = this.parts;
    if (parts != null && parts.isNotEmpty) {
      final multiPartBoundary = getHeaderContentType()?.boundary;
      if (multiPartBoundary == null) {
        throw InvalidArgumentException(
          'mime message rendering error: '
          'parts present but no multiPartBoundary defined.',
        );
      }
      for (final part in parts) {
        buffer
          ..write('--')
          ..write(multiPartBoundary)
          ..write('\r\n');
        part.render(buffer);
        buffer.write('\r\n');
      }
      buffer
        ..write('--')
        ..write(multiPartBoundary)
        ..write('--')
        ..write('\r\n');
    }
  }
}