Index: /Evidence/Alarm.cc
===================================================================
--- /Evidence/Alarm.cc	(revision 190)
+++ /Evidence/Alarm.cc	(revision 191)
@@ -38,5 +38,6 @@
 	char *AlarmSummary;
 	int MasterAlarm;
-	int *State;    
+	int *State;
+	bool *Warned;    
     char **Server;
     unsigned int NumServers;
@@ -73,5 +74,6 @@
   StatusService = new DimStampedInfo* [NumServers];
   State = new int [NumServers];
-  
+  Warned = new bool [NumServers];
+
   for (int i=0; i<NumServers; i++) {
     char *Buffer = new char [strlen(Server[i])+10];
@@ -158,5 +160,22 @@
         if (strcmp(ServerName, Alarm.Server[i]) == 0) Exists = true;
       }
-      if (!Exists) Alarm.State[i] = 4;
+
+      if (Exists) {
+		Alarm.Warned[i] = false;
+		continue;
+	  }
+
+	  Alarm.State[i] = 4;
+
+	  // If server unavailable, send alarm message once
+	  if (Alarm.Warned[i] == false) {
+		Alarm.Warned[i] = true;
+		char *Message;
+		time_t Time = time(NULL);
+		if (asprintf(&Message, "echo \"Server unavailable at %s\"|mail -s \"Evidence Alarm for '%s'\" %s", ctime(&Time), Alarm.Server[i], Alarm.GetConfig("email","")) != -1) {
+		  system(Message);
+		  free(Message);
+		}
+	  }
     }
     
