Editing java email services

Viewed 41

I have a form that the user fills out. When the user has completed the form and submits the form it then creates a .txt file that is stored and also sends an email. I was able to have the .txt form print certain strings as follows.

PrintWriter pw = new PrintWriter(fw);
                        
pw.write("DATE: " + datea + "\n" + "SHIFT: " + shiftboxa + "\n" + "SHIFT LEADER: " + shiftleaderboxa + "\n\n" + "DUTY CREWS:" );

if(b2003.equals(true)) {
pw.write("\n\n" + "2003: \n" + crew20031a + " " + time20031a+ "\n" + crew20032a + " " + time20032a);
                        }

if(b2040.equals(true)) {
pw.write("\n\n" + "2040:" + "\n" + crew20401a + " " + time20401a  + "\n" + crew20402a + " " + time20402a +  "\n" + crew20403a + " " + time20403a +  "\n" + crew20404a + " " + time20404a );
                        }

if(b2041.equals(true)) {
pw.write("\n\n" + "2041:" + "\n"+ crew20411a + " " + time20411a + "\n" + crew20412a + " " + time20412a + "\n" + crew20413a + " "+ time20413a + "\n" + crew20414a + " " + time20414a);
                        }

if(b2042.equals(true)) {
pw.write("\n\n" + "2042:" + "\n" + crew20421a + " " + time20421a + "\n" + crew20422a + " "  + time20422a + "\n"+ crew20423a + " " + time20423a + "\n" + crew20424a + " " + time20424a ); 
                        }

//b2003, b2040, b2041, b2042 are all Booleans that change based on actions taken in the GUI.

//also all of the non text objects are just Strings.

When it comes to the email portion is where the problem arises. This is how I currently have it set up:

message.setText("Please DO NOT reply to this E-Mail." + "\n" +
"Please review at your earliest convenience."+
                            
"2003: \n" + crew20031a + " " +time20031a + "\n" + crew20032a + " " + time20032a+ "\n\n\n" + 
                        
"2040:" + "\n" + crew20401a + " " + time20401a + "\n" + crew20402a + " "+ time20402a +  "\n" + crew20403a + " " + time20403a + "\n" + crew20404a + " " + time20404a +"\n\n" + 
                            
"2041:" + "\n"+ crew20411a + " " + time20411a + "\n" + crew20412a + " " + time20412a + "\n" + crew20413a + " "+ time20413a + "\n" + crew20414a+ " " + time20414a + "\n\n" + 
                        
"2042:" + "\n" + crew20421a + " " + time20421a +"\n" + crew20422a + " "  + time20422a + "\n"+ crew20423a + " " + time20423a + "\n" + crew20424a + " " + time20424a + "\n\n");

I am trying to have it set up similar to the .txt file where if a boolean is equal to true then it will print out that line and if not then the line will be omitted.

i.e.:

if(b2040.equals(true)){message.setText("2040:" + "\n" + crew20401a + " " + time20401a + "\n" + crew20402a + " "+ time20402a +  "\n" + crew20403a + " " + time20403a + "\n" + crew20404a + " " + time20404a +"\n\n");}

My issue is every time I try to do an additional .setText it will clear out the previous .setText. Furthermore if I try and just insert and "if statement" into the .setText it will throw all sorts of errors such as needing to insert "{,},(,),;,::,".

1 Answers

Like @JayC667 already wrote very briefly:

You should use a StringBuilder to create one final string that you then write to the file and send as email:

StringBuilder message = new StringBuilder();
message.append("DATE: ").append(datea).append("\nSHIFT: ").append(shiftboxa);
message.append("\nSHIFT LEADER: ").append(shiftleaderboxa).append("\n\nDUTY CREWS:");

if (Boolean.TRUE.equals(b2003)) {  // compare Booleans in a null-safe way
  message.append("\n\n2003: \n").append(crew20031a).append(' ').append(time20031a);
  message.append('\n').append(crew20032a).append(' ').append(time20032a);
}

// continue with your other conditional appends here

// supposing that fw is a FileWriter - but you have to catch IOException then!
fw.write(message.toString());

// mail sending then with this:

message.setText(message.toString());

You can split the appends over multiple lines for better readability, just as you prefer, or have them all in one line.

Related