Senza entrare nel merito della gestione delle eccezioni e del corretto modo di gestire i files, non capisco perchè tu non stia facendo l'analisi della riga da scrivere (per vedere se supera i famosi 76 caratteri).

Ad ogni modo, riporto qui sotto il tuo codice con i commenti di ciò che fa, così puoi renderti conto di quali possano essere le problematiche:

codice:
// Qui io presumo che "Mail.mailFile" sia una stringa contenente
// il percorso completo al file da leggere. Se non è così o se
// punta ad un file inesistente, ovviamente non farà nulla di tutto
// ciò che si prevede nel codice
FileReader fr=new FileReader(Mail.mailFile);

// Ok
BufferedReader br=new BufferedReader(fr);

// Non è necessario, però OK
// Il nuovo file verrà creato nella Working Directory!
File tmp=new File("emailtemp.eml");

// OK
FileWriter fw=new FileWriter(tmp);

// In questo ciclo, scorri il file da leggere e concateni
// tutte le righe in un'unica riga all'interno dello StringBuilder
// (ricorda che readLine() butta via il carattere di newLine!)
// Quindi, se il file originale è questo:
//
// Prima Riga
// Seconda Riga
// Terza Riga
//
// Nello StringBuilder avrai:
//
// Prima RigaSeconda RigaTerza Riga
while((s=br.readLine())!=null){
   s1.append(s);
}

// Qui ottieni il contenuto dello StringBuilder in una stringa
String s2=s1.toString();

// OK
PrintWriter pw=new PrintWriter(fw);

// Scrivi nel file UNA SOLA RIGA contenente tutte le righe
// del file originale, appiccicate una accanto all'altra
pw.print(s2);

// Chiudi il file senza aver effettuato alcun flush()
// Quindi non c'è nessuna garanzia che i dati vengano effettivamente
// scritti
pw.close();

// Questo è del tutto inutile, lo stream è già stato chiuso
// dall'istruzione precedente
fw.close();

Ciao.