Basically you need to adapt your function void SendWebPage(...) with something like this (untested, but it's a good starting point)
static File SDFile;
void SendWebPage(EthernetClient client) {
byte buff[32] // The sending buffer; its size (now 32) influences directly RAM-Usage
SDFile = SD.open("index.htm", FILE_READ); // Open the file index.htm on the root of your SDCard
if (SDFile) {
while(SDFile.available()) { // Is there still data to be read in the file
memset(buff, '\n', sizeof(buff)); // Reset the buffer
SDFile.read(buff, sizeof(buff)); // Read the next chunk of data to the buffer
client.write(buff, sizeof(buff)); // Send the just read chunk of data to the client
}
} else {
Serial.println("SDFile Read Error");
}
}
Hope that helps for starters. You probably need to find a way to handle the dynamic part of that website (i.e. the part that is dependent on your relay states and either shows "ON" or "OFF"-texts on you buttons). I usualy separate presentation ("the webpage") and data (ON/OFF) with AJAX. If you don't want to do this, you could have a file for the header part, send the dynamic part as you used to, and then have a file for the footer part of your webpage.