anchor.diff:  
         await c.send('QUIT', waitForResponse: false);
   
  -      sendReports.add(new SendReport(message, true));
  -    } catch (exception) {
  -      sendReports.add(new SendReport(message, false, validationProblems: [
  -        new Problem('UNKNOWN', 'Received an exception: $exception')
  -      ]));
       } finally {
         await c.close();
       }
   
  +  }
  +
  +  Future<List<SendReport>> send(Message message,
  +      {Duration timeout = const Duration(seconds: 60)}) async {
  +
  +    final List<SendReport> sendReports = [];
  +
  +    /* TODO Message validation should be done outside of this function */
  +    // Don't even try to connect to the server, if message-validation fails.
  +    var validationProblems = validate(message);
  +    if (validationProblems.isNotEmpty) {
  +      sendReports
  +          .add(new SendReport(message, false,
  +                              validationProblems: validationProblems));
  +      return sendReports;
  +    }
  +
  +    bool sendSucceeded = false;
  +    var problems = <Problem>[];
  +
  +    try {
  +      sendOrThrow(message);
  +      sendSucceeded = true;
  +      
  +    } on IRProblemException catch (e) {
  +      sendReports
  +          .add(new SendReport(message, false, validationProblems: [e.problem]));
  +
  +    } on SmtpClientAuthenticationException catch (e) {
  +      problems.add(new Problem('AUTHENTICATION_ERROR', e.message));
  +
  +    } on SocketException catch (e) {
  +      problems.add(new Problem('CONNECTON_ERROR',
  +                               'Connection error: ${e.message}'));
  +    } on SmtpClientException catch (e) {
  +      problems.add(new Problem('SMTP_ERROR',
  +                               'SMTP error: ${e.message}'));
  +      _logger.severe("Send message error", e);
  +    } catch (e) {
  +      problems.add(new Problem('UNKNOWN',
  +                               'Received an exception: $e'));
  +      _logger.severe("Send message error", e);
  +    }
  +
  +
  +    sendReports.add(new SendReport(message, sendSucceeded, 
  +                                   validationProblems: problems));
  +
       return sendReports;
     }
   }
  
positive.code:     }
    }
  
    Future<List<SendReport>> send(Message message,
        {Duration timeout = const Duration(seconds: 60)}) async {
  
      final List<SendReport> sendReports = [];
      final Connection c = new Connection(_smtpServer, timeout: timeout);
  
      // Don't even try to connect to the server, if message-validation fails.
      var problems = validate(message);
      if (problems.isNotEmpty) {
        sendReports
            .add(new SendReport(message, false, validationProblems: problems));
        return sendReports;
      }
  
      IRMessage irMessage;
      try {
        // Constructor might throw IRProblemException.
        irMessage = new IRMessage(message);
      } on IRProblemException catch (e) {
        sendReports
            .add(new SendReport(message, false, validationProblems: [e.problem]));
        return sendReports;
      }
  
      try {
        await c.connect();
  
negative.code: import 'exceptions.dart';
  import 'package:mailer/src/entities/problem.dart';
  import 'validator.dart';
  import 'dart:io';
  
  final Logger _logger = new Logger('smtp-client');
  
  