// Call with log level from enum
		public static void Send(SyslogSeverity severity, string message)
		{
			if (!initialized)
				throw new Exception("SyslogClient not initialized. Call Init method before sending: SyslogClient.Init(string origin, string application, string remote, int port, SyslogSeverity severity)");
			if (severity <= minSeverity)
			{
				int priority  = ((int)SyslogFacility.Syslog) * 8 + ((int)severity);
				string m      = String.Format("<{0}> {1} {2} {3} {4} {5}", priority, DateTime.Now.ToString("MMM dd HH:mm:ss"), originHost, applicationId, severity.ToString(), message);
				try
				{
					byte[] bytes = Encoding.ASCII.GetBytes(m);
					lock (locker)
					{
						for (int count = 0; count < (severity <= repeatSeverity ? repeatCount : 1); count++)
							client.Send(bytes, bytes.Length);
					}
				}
				catch (Exception e)
				{
					throw new Exception("Error sending to Syslog: " + remoteHost + ":" + remotePort + Environment.NewLine + e.Message, e.InnerException);
				}
			}
		}
Beispiel #2
0
 /// <summary>
 /// Initializes a new instance of SyslogMessage with common fields
 /// </summary>
 /// <param name="host">Host that generated the message</param>
 /// <param name="facility">Facility of the message</param>
 /// <param name="level">Severity of message</param>
 /// <param name="text">Text message</param>
 public SyslogMessage(string host, SyslogFacility facility, SyslogSeverity level, string text)
     : this()
 {
     Timestamp  = DateTime.UtcNow;
     TimeOffset = DateTime.Now - Timestamp;
     Host       = host;
     Facility   = facility;
     Severity   = level;
     Text       = text;
 }
Beispiel #3
0
 public SyslogMessage(DateTime?timestamp, string host, SyslogFacility facility, SyslogSeverity level,
                      string text)
     : this()
 {
     Timestamp = timestamp;
     Host      = host;
     Facility  = facility;
     Severity  = level;
     Text      = text;
 }
		public static void Init(string origin, string application, string remote, int port, SyslogSeverity severity = SyslogSeverity.DEBUG, SyslogFacility facility = SyslogFacility.User)
		{
			originHost    = origin;
			applicationId = application;
			remoteHost    = remote;
			remotePort    = port;
			client        = new UdpClient(remote, port);
			minSeverity      = severity; // Minimum severity for logging anything lower than this will be ignored
			defaultFaciltity = facility;
			initialized   = true;
		}
Beispiel #5
0
        public static SyslogMessage Create(SyslogFacility facility, SyslogSeverity severity, string message)
        {
            SyslogMessage msg = new SyslogMessage();

            msg.Facility    = facility;
            msg.Severity    = severity;
            msg.TimeStamp   = DateTimeOffset.Now;
            msg.HostName    = Environment.MachineName;
            msg.MessageText = message;
            return(msg);
        }
Beispiel #6
0
 /// <summary>
 /// Generate a syslog priority.
 /// </summary>
 /// <param name="facility">The syslog facility.</param>
 /// <param name="severity">The syslog severity.</param>
 /// <returns>A syslog priority.</returns>
 /// <remarks>
 /// <para>
 /// Generate a syslog priority.
 /// </para>
 /// </remarks>
 public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity)
 {
     if (facility < SyslogFacility.Kernel || facility > SyslogFacility.Local7)
     {
         throw new ArgumentException("SyslogFacility out of range", "facility");
     }
     if (severity < SyslogSeverity.Emergency || severity > SyslogSeverity.Debug)
     {
         throw new ArgumentException("SyslogSeverity out of range", "severity");
     }
     return((int)((int)facility * 8 + severity));
 }
 public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity)
 {
     if ((facility < SyslogFacility.Kernel) || (facility > SyslogFacility.Local7))
     {
         throw new ArgumentException("SyslogFacility out of range", "facility");
     }
     if ((severity < SyslogSeverity.Emergency) || (severity > SyslogSeverity.Debug))
     {
         throw new ArgumentException("SyslogSeverity out of range", "severity");
     }
     return((int)((facility * SyslogFacility.Uucp) + ((SyslogFacility)((int)severity))));
 }
Beispiel #8
0
 /// <summary>
 /// Initializes a new instance of SyslogMessage and auto-completes some parameters
 /// </summary>
 /// <param name="facility">Facility of the message</param>
 /// <param name="severity">Severity of message</param>
 /// <param name="text">Text message</param>
 public SyslogMessage(SyslogFacility facility, SyslogSeverity severity, string text)
     : this()
 {
     Facility        = facility;
     Severity        = severity;
     Text            = text;
     Timestamp       = DateTime.UtcNow;
     TimeOffset      = DateTime.Now - Timestamp;
     Host            = Dns.GetHostName();
     ProcessID       = Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture);
     ApplicationName = Process.GetCurrentProcess().ProcessName;
 }
Beispiel #9
0
        public static int CreatePri(SyslogFacility facility, SyslogSeverity severity)
        {
            if (facility == SyslogFacility.Unknown)
            {
                facility = SyslogConstants.DefaultFacility;
            }
            if (severity == SyslogSeverity.Unknown)
            {
                severity = SyslogConstants.DefaultSeverity;
            }

            return(((int)facility * 8) + (int)severity);
        }
Beispiel #10
0
        /// <summary>
        /// Logs a message.
        /// </summary>
        /// <param name="severity">The syslog severity.</param>
        /// <param name="facility">The syslog facility.</param>
        /// <param name="msg">The message tring to log.</param>
        public static void Write(SyslogSeverity severity, SyslogFacility facility, string msg)
        {
            lock (syncRoot)
            {
                if (processNamePtr == IntPtr.Zero)
                {
                    return;
                }

                var l_Priority = (((int)facility) << 3) | ((int)severity);
                libc.SafeNativeMethods.syslog(l_Priority, msg);
            }
        }
        /// <summary>
        /// Builds a syslog-compatible message using the information we have available.
        /// </summary>
        /// <param name="facility">Syslog Facility to transmit message from</param>
        /// <param name="priority">Syslog severity level</param>
        /// <param name="time">Time stamp for log message</param>
        /// <param name="sender">Name of the subsystem sending the message</param>
        /// <param name="body">Message text</param>
        /// <returns>Byte array containing formatted syslog message</returns>
        private byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, DateTime time, string sender, string body)
        {
            // Get sender machine name
            var machine = this.MachineName + " ";

            // Calculate PRI field
            var calculatedPriority = (int)facility * 8 + (int)priority;
            var pri = "<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">";

            var timeToString = time.ToString("MMM dd HH:mm:ss ", new CultureInfo("en-US"));

            sender = sender + ": ";

            string[] strParams = { pri, timeToString, machine, sender, body, Environment.NewLine };
            return(Encoding.ASCII.GetBytes(string.Concat(strParams)));
        }
Beispiel #12
0
        /// <summary>
        /// Generate a syslog priority.
        /// </summary>
        /// <param name="facility">The syslog facility.</param>
        /// <param name="severity">The syslog severity.</param>
        /// <returns>A syslog priority.</returns>
        /// <remarks>
        /// <para>
        /// Generate a syslog priority.
        /// </para>
        /// </remarks>
        public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity)
        {
            if (facility < SyslogFacility.Kernel || facility > SyslogFacility.Local7)
            {
                throw new ArgumentException("SyslogFacility out of range", "facility");
            }

            if (severity < SyslogSeverity.Emergency || severity > SyslogSeverity.Trace)
            {
                throw new ArgumentException("SyslogSeverity out of range", "severity");
            }

            unchecked
            {
                return(((int)facility * 8) + (int)severity);
            }
        }
        /// <summary>
        /// Concretely performs logging
        /// </summary>
        /// <param name="message">Text message</param>
        /// <param name="severity">Severity of message</param>
        protected void Log(string message, SyslogSeverity severity)
        {
            //Reset heartbeating
            if (_hbInterval > 0)
            {
                _heartbeatTimer.Change(HeartbeatInterval * 1000, HeartbeatInterval * 1000);
            }

            String host    = Environment.MachineName;
            String procid  = Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture);
            String appname = Process.GetCurrentProcess().ProcessName;

            SyslogMessage msg = new SyslogMessage(host, Facility, severity, message)
            {
                ProcessID       = procid,
                ApplicationName = appname
            };

            // Getting the caller information (note that index is 3 because of Log is called by another local Method...
            StackTrace stackTrace = new StackTrace();

            StackFrame[] stackFrames = stackTrace.GetFrames();
            msg.Data = new Dictionary <String, IDictionary <String, String> >();

            Dictionary <string, string> callerData = new Dictionary <string, string>();

            msg.Data.Add("CallerData@" + ENTERPRISE_ID, callerData);
            if (stackFrames != null && stackFrames.Length >= 3)
            {
                callerData.Add("ClassName", stackFrames[2].GetMethod().DeclaringType.FullName);
                callerData.Add("MethodName", stackFrames[2].GetMethod().Name);
                callerData.Add("ModuleName", stackFrames[2].GetMethod().DeclaringType.Assembly.GetName().Name);
            }
            if (!string.IsNullOrEmpty(LogName))
            {
                callerData.Add("LogName", LogName);
            }

            PreProcessMessage(msg);

            Collector.SubmitMessage(msg);
        }
        public void TestSerializerData(SyslogFacility facility, SyslogSeverity severity, string dateTime, string hostName, string appName, string procId, string msgId, string structuredData, string message, string result)
        {
            var syslogSerializer = new SyslogMessageSerializer();

            var syslogMsg = new SyslogMessage
            {
                Facility  = facility,
                Severity  = severity,
                Timestamp = string.IsNullOrEmpty(dateTime) ? (DateTimeOffset?)null : DateTimeOffset.ParseExact(dateTime, @"MM/dd/yyyy H:mm zzz", CultureInfo.InvariantCulture),
                HostName  = hostName,
                AppName   = appName,
                ProcId    = procId,
                MsgId     = msgId,
                Message   = message
            };

            IEnumerable <SyslogSdElement> structuredDataList = DecodeStructuredData(structuredData);

            if (structuredDataList != null)
            {
                foreach (SyslogSdElement sd in structuredDataList)
                {
                    syslogMsg.StructuredDataElements.Add(sd);
                }
            }


            using (var stream = new MemoryStream())
            {
                // Serialize a message to a memory stream
                syslogSerializer.Serialize(syslogMsg, stream);

                stream.Position = 0;

                // Get the message as a string and compare
                using (var reader = new StreamReader(stream))
                {
                    Assert.AreEqual(result, reader.ReadToEnd(), "The serialized messages is invalid.");
                }
            }
        }
Beispiel #15
0
        public override void SetBytes(byte[] bytes)
        {
            //FALSCH: Prival muss aufgebaut sein asu %d48-%d57, d.h. nicht als byte wert

            /*
             * int index = Array.FindIndex(bytes, e => e == (byte)'<') + 1;
             * int prival = bytes[index];
             * int facility = prival & 248;
             * facility = facility / 8;
             * int severity = prival & 7;
             * index = Array.FindIndex(bytes, e => e == (byte)'>') + 1;
             * string digit = Encoding.ASCII.GetString(new byte[1] { bytes[index] });
             * int version;
             * int.TryParse(digit, out version);
             * this.Version = version;
             */

            //RICHTIG nach RFC5424
            string byteString = Encoding.ASCII.GetString(bytes);
            int    prival     = 0;
            int    start      = byteString.IndexOf('<') + 1;
            int    length     = byteString.IndexOf('>') - start;

            int.TryParse(byteString.Substring(start, length), out prival);
            int facility = prival & 248;

            facility = facility / 8;
            int severity = prival & 7;

            this.Severity = (SyslogSeverity)severity;
            this.Facility = (SyslogFacility)facility;
            int version = 0;

            int.TryParse(byteString.Substring(byteString.IndexOf('>') + 1), out version);
            this.Version = version;
        }
Beispiel #16
0
        public void Send(string message, SyslogSeverity priority)
        {
            var msg = Message(message, priority);

            udp.Send(msg, msg.Length);
        }
Beispiel #17
0
 private static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity) =>
 (int)((facility * SyslogFacility.Uucp) + ((SyslogFacility)((int)severity)));
Beispiel #18
0
 /// <summary>
 /// syslogに送るログのプライオリティを計算します。
 /// </summary>
 private int CalcSyslogPriority(SyslogSeverity priority)
 {
     return((int)this.Facility * 8 + (int)priority);
 }
Beispiel #19
0
 /// <summary>
 /// syslogに送るログのプライオリティを計算します。
 /// </summary>
 private int CalcSyslogPriority(SyslogSeverity priority)
 {
     return ((int)this.Facility * 8 + (int)priority);
 }
Beispiel #20
0
 public SyslogPriorityVersion(int version, SyslogFacility facility, SyslogSeverity severity)
 {
     this.Version  = version;
     this.Severity = severity;
     this.Facility = facility;
 }
Beispiel #21
0
        byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, string sender, string body)
        {
            var message = string.Format("<{0}>{1} {2} {3}: {4}", (int)facility * 8 + priority, DateTime.UtcNow.ToString("s"), hostName, sender, body);

            return(Encoding.ASCII.GetBytes(message));
        }
        /// <summary>Builds rfc-3164 compatible message</summary>
        /// <param name="logEvent">The NLog.LogEventInfo</param>
        /// <param name="facility">Syslog Facility to transmit message from</param>
        /// <param name="severity">Syslog severity level</param>
        /// <param name="body">Message text</param>
        /// <returns>Byte array containing formatted syslog message</returns>
        private byte[] BuildSyslogMessage3164(LogEventInfo logEvent, SyslogFacility facility, SyslogSeverity severity, string body)
        {
            // Calculate PRI field
            var priority = CalculatePriorityValue(facility, severity).ToString(CultureInfo.InvariantCulture);
            var time = logEvent.TimeStamp.ToLocalTime().ToString(TimestampFormat, _usCulture);
            // Get sender machine name
            var machine = MachineName.Render(logEvent);
            // Get sender
            var sender = Sender.Render(logEvent);

            return Encoding.ASCII.GetBytes($"<{priority}>{time} {machine} {sender}: {body}{Environment.NewLine}");
        }
        /// <summary>
        /// Builds a syslog-compatible message using the information we have available. 
        /// </summary>
        /// <param name="facility">Syslog Facility to transmit message from</param>
        /// <param name="priority">Syslog severity level</param>
        /// <param name="time">Time stamp for log message</param>
        /// <param name="sender">Name of the subsystem sending the message</param>
        /// <param name="body">Message text</param>
        /// <returns>Byte array containing formatted syslog message</returns>
        private static byte[] buildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, DateTime time, string sender, string body)
        {

            // Get sender machine name
            string machine = System.Net.Dns.GetHostName() + " ";

            // Calculate PRI field
            int calculatedPriority = (int)facility * 8 + (int)priority;
            string pri = "<" + calculatedPriority.ToString() + ">";

            string timeToString = time.ToString("MMM dd HH:mm:ss ");
            sender = sender + ": ";

            string[] strParams = { pri, timeToString, machine, sender, body };
            return Encoding.ASCII.GetBytes(string.Concat(strParams));
        }
 public void Send(string message, SyslogSeverity priority)
 {
     var msg = Message(message, priority);
     udp.Send(msg, msg.Length);
 }
 private byte[] Message(string message, SyslogSeverity priority)
 {
     string timeString = new DateTime().ToString("MMM dd HH:mm:ss ");
     return Encoding.ASCII.GetBytes(Priority(priority) + timeString + prefix + message);
 }
        public void LogMessage(string message, SyslogSeverity severity)
        {
            this.ThrowIfDisposed();

            syslog(this.GetLogPriority(severity), MessageFormat, message);
        }
 private string Priority(SyslogSeverity priority)
 {
     int calculatedPriority = (int)Facility * 8 + (int)priority;
     return "<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">";
 }
Beispiel #28
0
        private byte[] Message(string message, SyslogSeverity priority)
        {
            string timeString = new DateTime().ToString("MMM dd HH:mm:ss ");

            return(Encoding.ASCII.GetBytes(Priority(priority) + timeString + prefix + message));
        }
Beispiel #29
0
        private string Priority(SyslogSeverity priority)
        {
            int calculatedPriority = (int)Facility * 8 + (int)priority;

            return("<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">");
        }
 private static int CalculatePriorityValue(SyslogFacility facility, SyslogSeverity severity)
 {
     return (int)facility * 8 + (int)severity;
 }
Beispiel #31
0
 public SyslogPriorityVersion(int version, SyslogFacility facility, SyslogSeverity severity)
 {
     this.Version = version;
     this.Severity = severity;
     this.Facility = facility;
 }
Beispiel #32
0
        private byte[] WrapUpMessage(SyslogFacility facility, SyslogSeverity severity, string renderedLayout, LogEventInfo logEventInfo)
        {
            if (OptimiseOutput)
                renderedLayout = renderedLayout.Replace(" ", "");

            var message = formatter.Format(facility, severity, logEventInfo, renderedLayout);

            return Encoding.ASCII.GetBytes(message);
        }
 /// <summary>
 /// Calculates the Syslog priority value.
 /// </summary>
 /// <param name="facility">The facility.</param>
 /// <param name="level">The level.</param>
 /// <returns></returns>
 private static int CalculatePriority(SyslogFacility facility, SyslogSeverity level)
 {
     // Priority = Facility * 8 + Level
     return (int)facility * 8 + (int)level;
 }
Beispiel #34
0
        public void Log(SyslogSeverity severity, string message)
        {
            int priority = GeneratePriority(SyslogFacility.Local7, severity);

              // Call the local libc syslog method
              // The second argument is a printf style format string
              syslog(priority, "%s", message);
        }
 /// <summary>Builds a syslog-compatible message using the information we have available</summary>
 /// <param name="logEvent">The NLog.LogEventInfo</param>
 /// <param name="facility">Syslog Facility to transmit message from</param>
 /// <param name="priority">Syslog severity level</param>
 /// <param name="body">Message text</param>
 /// <returns>Byte array containing formatted syslog message</returns>
 private byte[] BuildSyslogMessage(LogEventInfo logEvent, SyslogFacility facility, SyslogSeverity priority, string body)
 {
     switch (Rfc)
     {
         case RfcNumber.Rfc5424:
             return BuildSyslogMessage5424(logEvent, facility, priority, body);
         default:
             return BuildSyslogMessage3164(logEvent, facility, priority, body);
     }
 }
        /// <summary>
        /// Builds a syslog-compatible message using the information we have available. 
        /// </summary>
        /// <param name="facility">Syslog Facility to transmit message from</param>
        /// <param name="priority">Syslog severity level</param>
        /// <param name="time">Time stamp for log message</param>
        /// <param name="sender">Name of the subsystem sending the message</param>
        /// <param name="body">Message text</param>
        /// <returns>Byte array containing formatted syslog message</returns>
        private byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, DateTime time, string sender, string body)
        {

            // Get sender machine name
            string machine = MachineName + " ";

            // Calculate PRI field
            int calculatedPriority = (int)facility * 8 + (int)priority;
            string pri = "<" + calculatedPriority.ToString(CultureInfo.InvariantCulture) + ">";

            string timeToString = time.ToString("MMM dd HH:mm:ss ");
            sender = sender + ": ";

            string[] strParams = { pri, timeToString, machine, sender, body, Environment.NewLine };
            return Encoding.ASCII.GetBytes(string.Concat(strParams));
        }
        /// <summary>Builds rfc-5424 compatible message</summary>
        /// <param name="logEvent">The NLog.LogEventInfo</param>
        /// <param name="facility">Syslog Facility to transmit message from</param>
        /// <param name="severity">Syslog severity level</param>
        /// <param name="body">Message text</param>
        /// <returns>Byte array containing formatted syslog message</returns>
        private byte[] BuildSyslogMessage5424(LogEventInfo logEvent, SyslogFacility facility, SyslogSeverity severity, string body)
        {
            // Calculate PRI field
            var priority = CalculatePriorityValue(facility, severity).ToString(CultureInfo.InvariantCulture);
            var version = ProtocolVersion.ToString(CultureInfo.InvariantCulture);
            var time = logEvent.TimeStamp.ToString("o");
            // Get sender machine name
            var machine = Left(MachineName.Render(logEvent), 255);
            var sender = Left(Sender.Render(logEvent), 48);
            var procId = Left(ProcId.Render(logEvent), 128);
            var msgId = Left(MsgId.Render(logEvent), 32);

            var headerData = Encoding.ASCII.GetBytes($"<{priority}>{version} {time} {machine} {sender} {procId} {msgId} ");
            var structuredData = Encoding.UTF8.GetBytes(StructuredData.Render(logEvent) + " ");
            var messageData = Encoding.UTF8.GetBytes(body);

            var allData = new List<byte>(headerData.Length + structuredData.Length + _bom.Length + messageData.Length);
            allData.AddRange(headerData);
            allData.AddRange(structuredData);
            allData.AddRange(_bom);
            allData.AddRange(messageData);
            return allData.ToArray();
        }
		/// <summary>
		/// Generate a syslog priority.
		/// </summary>
		/// <param name="facility">The syslog facility.</param>
		/// <param name="severity">The syslog severity.</param>
		/// <returns>A syslog priority.</returns>
		private static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity)
		{
			return ((int)facility * 8) + (int)severity;
		}
		/// <summary>
		/// Generate a syslog priority.
		/// </summary>
		/// <param name="facility">The syslog facility.</param>
		/// <param name="severity">The syslog severity.</param>
		/// <returns>A syslog priority.</returns>
		/// <remarks>
		/// <para>
		/// Generate a syslog priority.
		/// </para>
		/// </remarks>
		public static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity)
		{
			if (facility < SyslogFacility.Kernel || facility > SyslogFacility.Local7)
			{
				throw new ArgumentException("SyslogFacility out of range", "facility");
			}

			if (severity < SyslogSeverity.Emergency || severity > SyslogSeverity.Debug)
			{
				throw new ArgumentException("SyslogSeverity out of range", "severity");
			}

			unchecked
			{
				return ((int)facility * 8) + (int)severity;
			}
		}
 private int GetLogPriority(SyslogSeverity messageSeverity)
 {
     return((int)messageSeverity + ((int)this.connectionFacility * 8));
 }
Beispiel #41
0
 byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity priority, string sender, string body)
 {
     var message = string.Format("<{0}>{1} {2} {3}: {4}", (int) facility*8 + priority, DateTime.UtcNow.ToString("s"), hostName, sender, body);
     return Encoding.ASCII.GetBytes(message);
 }
		// Call to set repeats for important messages
		public static void SetRepeat(SyslogSeverity severity, int count = 3)
		{
			repeatSeverity = severity;
			repeatCount = count;
		}
Beispiel #43
0
 public static int GetSyslogPriority(SyslogFacility facility, SyslogSeverity severity)
 {
     return(((byte)facility * 8) + (byte)severity);
 }
Beispiel #44
0
        public static void GetPriValues(int priorityValue, out SyslogFacility facility, out SyslogSeverity severity)
        {
            int facilityValue = priorityValue / 8;
            int severityValue = priorityValue % 8;

            facility = (SyslogFacility)facilityValue;
            severity = (SyslogSeverity)severityValue;
        }
Beispiel #45
0
 /// <summary>
 /// Generate a syslog priority.
 /// </summary>
 /// <param name="facility">The syslog facility.</param>
 /// <param name="severity">The syslog severity.</param>
 /// <returns>A syslog priority.</returns>
 private static int GeneratePriority(SyslogFacility facility, SyslogSeverity severity)
 {
     return(((int)facility * 8) + (int)severity);
 }
        private static byte[] BuildSyslogMessage(SyslogFacility facility, SyslogSeverity level, string sender,
            string messageBody)
        {

            int priority = CalculatePriority(facility, level);
            string message = string.Format("<{0}>{1} {2} {3}: {4}{5}",
                priority,
                DateTime.Now.ToString("MMM dd HH:mm:ss"),
                Dns.GetHostName(),
                sender.Substring(0, 32),
                messageBody,
                Environment.NewLine);

            return Encoding.ASCII.GetBytes(message);
        }