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.