/// <inheritdoc/> public async Task Process(IConnection connection, SmtpCommand command) { if (connection.CurrentMessage != null) { await connection.WriteResponse(new SmtpResponse( StandardSmtpResponseCode.BadSequenceOfCommands, "You already told me who the message was from")).ConfigureAwait(false); return; } if (command.ArgumentsText.Length == 0) { await connection.WriteResponse( new SmtpResponse( StandardSmtpResponseCode.SyntaxErrorInCommandArguments, "Must specify from address or <>")).ConfigureAwait(false); return; } ArgumentsParser argumentsParser = new ArgumentsParser(command.ArgumentsText); System.Collections.Generic.IReadOnlyCollection <string> arguments = argumentsParser.Arguments; string from = arguments.First(); if (from.StartsWith("<", StringComparison.OrdinalIgnoreCase)) { from = from.Remove(0, 1); } if (from.EndsWith(">", StringComparison.OrdinalIgnoreCase)) { from = from.Remove(from.Length - 1, 1); } await connection.Server.Behaviour.OnMessageStart(connection, from).ConfigureAwait(false); await connection.NewMessage().ConfigureAwait(false); connection.CurrentMessage.ReceivedDate = this.currentDateTimeProvider.GetCurrentDateTime(); connection.CurrentMessage.From = from; try { await this.ParameterProcessorMap.Process(connection, arguments.Skip(1).ToArray(), true).ConfigureAwait(false); await connection.WriteResponse(new SmtpResponse(StandardSmtpResponseCode.OK, "New message started")).ConfigureAwait(false); } catch { await connection.AbortMessage().ConfigureAwait(false); throw; } }
public async Task AddMessage() { IEditableSession session = this.GetSession(); Mock <IMessage> message = new Mock <IMessage>(); session.AddMessage(message.Object); System.Collections.Generic.IReadOnlyCollection <IMessage> messages = await session.GetMessages(); Assert.Single(messages); Assert.Same(message.Object, messages.First()); }