Home AMX User Forum AMX Technical Discussion
Options

SMTP Email weirdness

I have a Netlinx system that, among other functions, serves as a master monitor for several interconnected paging systems, each of which have their own Netlinx master connected via M2M, and recently added email functionality that sends status updates to a list of addresses stored in an array. The message format is simple, listing the time & date the master sent the message, then text describing the status of each system on the network, followed by a bit of text explaining why the email was sent (system showing alarm, warning, status change, or user interaction).

This is triggered by a timeline that fires every 6 hours, plus any time status changes of one of the systems, or when an admin manually sends a test email from a virtual TP.

Everything works OK, except at the end of each email, there is sometimes a bunch of random junk appended, which looks like part of a previous email. I can't nail down why this would happen, as the message is assembled in a STACK_VAR inside the function that sends the email.

Has anyone had any experience with this? Master is running FW v4.1.373, code for email functionality is below:
DEFINE_FUNCTION fnSEND_EMAIL_STATUS(CHAR sTEXT_TO_APPEND[64])
{
    STACK_VAR INTEGER nSYSTEM_NUMBER
    STACK_VAR INTEGER nALARM_LEVEL
    STACK_VAR INTEGER nPROBLEM_SYSTEM
    STACK_VAR INTEGER nADDRESS_LOOP_COUNTER
    STACK_VAR CHAR sEMAIL_TEXT[1024]
    STACK_VAR CHAR sEMAIL_SUBJECT[64]

    IF(nENABLE_EMAIL)
    {
	sEMAIL_TEXT =	"
				'Corporate PA Monitor Status Report',$0D,$0A,$0D,$0A,	//START OF MESSAGE
				DATE,'  ',TIME,$0D,$0A,$0D,$0A				//MASTER'S DATE & TIME
			    "
	
	nALARM_LEVEL = STATUS_OK				//CLEAR nALARM_LEVEL
	
	    IF(nPANEL_ONLINE[1] == FALSE)		//IF PANEL IS OFFLINE
	    {
		IF(nALARM_LEVEL < STATUS_ALARM)
		{
		    nALARM_LEVEL = STATUS_WARNING
		}
		sEMAIL_TEXT = "sEMAIL_TEXT, 'COMMAND CENTER TP OFFLINE',$0D,$0A"
	    }
	    IF(nPANEL_ONLINE[2] == FALSE)		//IF PANEL IS OFFLINE
	    {
		IF(nALARM_LEVEL < STATUS_ALARM)
		{
		    nALARM_LEVEL = STATUS_WARNING
		}
		sEMAIL_TEXT = "sEMAIL_TEXT, 'BB-28 TP OFFLINE',$0D,$0A"
	    }
	    IF(nPANEL_ONLINE[3] == FALSE)		//IF PANEL IS OFFLINE
	    {
		IF(nALARM_LEVEL < STATUS_ALARM)
		{
		    nALARM_LEVEL = STATUS_WARNING
		}
		sEMAIL_TEXT = "sEMAIL_TEXT, 'SA-1 SECURITY TP OFFLINE',$0D,$0A"
	    }
	    IF(nPANEL_ONLINE[4] == FALSE)		//IF PANEL IS OFFLINE
	    {
		IF(nALARM_LEVEL < STATUS_ALARM)
		{
		    nALARM_LEVEL = STATUS_WARNING
		}
		sEMAIL_TEXT = "sEMAIL_TEXT, 'C-1 TP OFFLINE',$0D,$0A"
	    }
	    IF(nPANEL_ONLINE[5] == FALSE)		//IF PANEL IS OFFLINE
	    {
		IF(nALARM_LEVEL < STATUS_ALARM)
		{
		    nALARM_LEVEL = STATUS_WARNING
		}
		sEMAIL_TEXT = "sEMAIL_TEXT, 'SA-1 VISITOR TP OFFLINE',$0D,$0A"
	    }
	    IF(nPANEL_ONLINE[6] == FALSE)		//IF PANEL IS OFFLINE
	    {
		IF(nALARM_LEVEL < STATUS_ALARM)
		{
		    nALARM_LEVEL = STATUS_WARNING
		}
		sEMAIL_TEXT = "sEMAIL_TEXT, 'SA-4 VIRTUAL TP OFFLINE',$0D,$0A"
	    }
	    
	sEMAIL_TEXT = "sEMAIL_TEXT, $0D,$0A,$0D,$0A"
	FOR(nSYSTEM_NUMBER = 1;nSYSTEM_NUMBER <= 27;nSYSTEM_NUMBER++)
	{
	    IF(AUDIO_SYSTEM_ARRAY[nSYSTEM_NUMBER].dvDEVICE.SYSTEM)		//IF DEVICE IS DEFINED
	    {
		sEMAIL_TEXT = "sEMAIL_TEXT,AUDIO_SYSTEM_ARRAY[nSYSTEM_NUMBER].sSYSTEM_NAME,':  '"	//APPEND SYSTEM NAME, COLON, SPACES TO TEXT
		
		SWITCH(AUDIO_SYSTEM_ARRAY[nSYSTEM_NUMBER].nSYSTEM_STATUS)
		{
		    CASE STATUS_OK:
		    {
			sEMAIL_TEXT = "sEMAIL_TEXT,'SYSTEM OK',$0D,$0A"
		    }
		    CASE STATUS_WARNING:
		    {
			IF(nALARM_LEVEL < STATUS_ALARM)
			{
			    nALARM_LEVEL = STATUS_WARNING
			    nPROBLEM_SYSTEM = nSYSTEM_NUMBER
			}
			sEMAIL_TEXT = "sEMAIL_TEXT,sSYSTEM_LAST_ERROR[nSYSTEM_NUMBER],$0D,$0A"	//APPEND LAST ERROR (CURRENT ERROR)
		    }
		    CASE STATUS_ALARM:
		    {
			IF(nALARM_LEVEL = STATUS_ALARM)
			{
			    nPROBLEM_SYSTEM = SYS_MULTIPLE
			}
			ELSE
			{
			    nPROBLEM_SYSTEM = nSYSTEM_NUMBER
			}
			nALARM_LEVEL = STATUS_ALARM
			
			sEMAIL_TEXT = "sEMAIL_TEXT,sSYSTEM_LAST_ERROR[nSYSTEM_NUMBER],$0D,$0A"	//APPEND LAST ERROR (CURRENT ERROR)
		    }
		}
	    }
	}
	sEMAIL_TEXT = "sEMAIL_TEXT,sTEXT_TO_APPEND"		//APPEND TEXT PASSED TO FUNCTION TO END OF REPORT
	
	SWITCH(nALARM_LEVEL)
	{
	    CASE STATUS_OK:
	    {
		sEMAIL_SUBJECT = "'Corporate PA Monitor Status Report:  ALL SYSTEMS OK'"
	    }
	    CASE STATUS_WARNING:
	    {
		sEMAIL_SUBJECT = "'Corporate PA Monitor Status Report:  WARNING-',AUDIO_SYSTEM_ARRAY[nPROBLEM_SYSTEM].sSYSTEM_NAME"
	    }
	    CASE STATUS_ALARM:
	    {
		IF(nPROBLEM_SYSTEM == SYS_MULTIPLE)
		{
		    sEMAIL_SUBJECT = "'Corporate PA Monitor Status Report:  ALARM-MULTIPLE SYSTEMS'"
		}
		ELSE
		{
		    sEMAIL_SUBJECT = "'Corporate PA Monitor Status Report:  ALARM-',AUDIO_SYSTEM_ARRAY[nPROBLEM_SYSTEM].sSYSTEM_NAME"
		}
	    }
	}
	FOR(nADDRESS_LOOP_COUNTER = 1;nADDRESS_LOOP_COUNTER <= 20;nADDRESS_LOOP_COUNTER++)
	{
	    IF(sEMAIL_ADDRESS_LIST[nADDRESS_LOOP_COUNTER])	//IF AN ADDRESS EXISTS
	    {
		SMTP_SEND(dvMAIL_HANDLER,sEMAIL_ADDRESS_LIST[nADDRESS_LOOP_COUNTER],sEMAIL_SUBJECT,sEMAIL_TEXT,NULL_STR)
		IF(nDEBUG)
		{
		    SEND_STRING 0, "'SENDING EMAIL TO: ',sEMAIL_ADDRESS_LIST[nADDRESS_LOOP_COUNTER]"
		}
	    }
	}
	IF(nDEBUG)
	{
	    SEND_STRING 0, "'EMAIL SUBJECT: ',sEMAIL_SUBJECT"
	    SEND_STRING 0, "'EMAIL BODY: ',sEMAIL_TEXT"
	}
    }
}

Thanks,
Don

Comments

  • Options
    JasonSJasonS Posts: 229
    I have seen this before, I believe it is a known issue. What version of firmware are you using? I remember it being an issue at one point, but I don't remember seeing it recently.
  • Options
    Firmware is v4.1.373 which is current, although it appears there is a hotfix available. I will have to talk to TS about getting it so I can try it next time I'm on-site. Like I said, the issue isn't critical as all the message gets through, but it does look weird to see a snipped of text from a previous message appended to the end, plus sometimes random characters.
Sign In or Register to comment.