Example #1
0
        private void Data(SmtpContext context)
        {
            context.WriteLine(MessageStartData);

            var messageData    = context.MessageData;
            var clientEndPoint = (IPEndPoint)context.Socket.RemoteEndPoint;
            var header         = new StringBuilder();

            header.Append(String.Format("Received: from {0} ({0} [{1}])\r\n", context.ClientDomain, clientEndPoint.Address));

            messageData.AddData(header.ToString());

            var line = context.ReadLine();

            while (!line.Equals("."))
            {
                messageData.AddData(line);
                messageData.AddData("\r\n");
                line = context.ReadLine();
            }

            // Spool the message
            _handler(messageData.ParseMessage());
            context.WriteLine(MessageOk);

            // Reset the connection.
            context.Reset();
        }
Example #2
0
		private void Data(SmtpContext context)
		{
			context.WriteLine(MessageStartData);
			
			var messageData = context.MessageData;
			var clientEndPoint = (IPEndPoint) context.Socket.RemoteEndPoint;
			var header = new StringBuilder();
			header.Append(String.Format("Received: from {0} ({0} [{1}])\r\n", context.ClientDomain, clientEndPoint.Address));
			
			messageData.AddData(header.ToString());
			
			var line = context.ReadLine();
			while(!line.Equals("."))
			{
				messageData.AddData(line);
				messageData.AddData("\r\n");
				line = context.ReadLine();
			}

			// Spool the message
			_handler(messageData.ParseMessage());
			context.WriteLine(MessageOk);
			
			// Reset the connection.
			context.Reset();
		}
Example #3
0
        /// <summary>
        /// Handles the command input from the client.  This
        /// message returns when the client issues the quit command.
        /// </summary>
        private void ProcessCommands(SmtpContext context)
        {
            while (true)
            {
                try
                {
                    var inputLine = context.ReadLine();
                    if (inputLine == null)
                    {
                        context.Close();
                        return;
                    }

                    _logger.Debug("ProcessCommands Read: " + inputLine);
                    var inputs = inputLine.Split(" ".ToCharArray());

                    switch (inputs[0].ToLower())
                    {
                    case "helo":
                        Helo(context, inputs);
                        break;

                    case "rset":
                        Rset(context);
                        break;

                    case "noop":
                        context.WriteLine(MessageOk);
                        break;

                    case "quit":
                        context.WriteLine(MessageGoodbye);
                        context.Close();
                        return;

                    case "mail":
                        if (inputs[1].ToLower().StartsWith("from"))
                        {
                            Mail(context, inputLine.Substring(inputLine.IndexOf(" ")));
                            break;
                        }
                        context.WriteLine(MessageUnknownCommand);
                        break;

                    case "rcpt":
                        if (inputs[1].ToLower().StartsWith("to"))
                        {
                            Rcpt(context, inputLine.Substring(inputLine.IndexOf(" ")));
                            break;
                        }
                        context.WriteLine(MessageUnknownCommand);
                        break;

                    case "data":
                        Data(context);
                        break;

                    default:
                        context.WriteLine(MessageUnknownCommand);
                        break;
                    }
                }
                catch (Exception exception)
                {
                    _logger.Error(exception, "Connection {0}: Exception occured while processing commands: {1}", context.ConnectionId, exception);
                    context.WriteLine(MessageSystemError);
                }
            }
        }
Example #4
0
		/// <summary>
		/// Handles the command input from the client.  This
		/// message returns when the client issues the quit command.
		/// </summary>
		private void ProcessCommands(SmtpContext context)
		{
			while(true)
			{
				try
				{
					var inputLine = context.ReadLine();
					if (inputLine == null)
					{
						context.Close();
						return;
					}

                    _logger.Debug("ProcessCommands Read: " + inputLine);
					var inputs = inputLine.Split(" ".ToCharArray());
					
					switch(inputs[0].ToLower())
					{
						case "helo":
							Helo(context, inputs);
							break;
						case "rset":
							Rset(context);
							break;
						case "noop":
							context.WriteLine(MessageOk);
							break;
						case "quit":
							context.WriteLine(MessageGoodbye);
							context.Close();
							return;
						case "mail":
							if (inputs[1].ToLower().StartsWith("from"))
							{
								Mail(context, inputLine.Substring(inputLine.IndexOf(" ")));
								break;
							}
							context.WriteLine(MessageUnknownCommand);
							break;
						case "rcpt":
							if (inputs[1].ToLower().StartsWith("to")) 							
							{
								Rcpt(context, inputLine.Substring(inputLine.IndexOf(" ")));
								break;
							}
							context.WriteLine(MessageUnknownCommand);
							break;
						case "data":
							Data(context);
							break;
						default:
							context.WriteLine(MessageUnknownCommand);
							break;
					}				
				}
				catch(Exception exception)
				{
                    _logger.Error(exception, "Connection {0}: Exception occured while processing commands: {1}", context.ConnectionId, exception);
					context.WriteLine(MessageSystemError);
				}
			}
		}