protected virtual void AppendException(BasicDeliverEventArgs message, Exception exception, int attempt, int depth)
		{
			if (!this.CanAppendException(message, exception, attempt, depth))
				return;

			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "type"), exception.GetType().ToString());
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "message"), exception.Message);
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "stacktrace"), exception.StackTrace ?? string.Empty);
			this.AppendException(message, exception.InnerException, attempt, depth + 1);	
		}
		protected virtual void AppendException(BasicDeliverEventArgs message, Exception exception, int attempt, int depth)
		{
			if (!this.CanAppendException(message, exception, attempt, depth))
				return;

			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "type"), exception.GetType().ToString());
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "message"), exception.Message);
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "stacktrace"), exception.StackTrace ?? string.Empty);
			this.AppendException(message, exception.InnerException, attempt, depth + 1);

			if (depth > 0)
				return;

			var process = Process.GetCurrentProcess();
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "process-name"), process.ProcessName);
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "process-id"), process.Id.ToString(CultureInfo.InvariantCulture));
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "origin-host"), Environment.MachineName.ToLowerInvariant());
			message.SetHeader(ExceptionHeaderFormat.FormatWith(attempt, depth, "timestamp"), SystemTime.UtcNow.ToIsoString());
		}