Rated 4 out of 5 stars

I find the add-on very handy in particular when I send emails to a large number of friends (usually using BCC). When I later notice that some of them was missing on the list, I can simply re-send the original email (including any attachments) to the new recipient(s).

Yet this scenario brought up a privacy issue (at least for version 0.7.4):
For each *multi-line* email header, all its lines but the first one are simply copied from the original email. This is a severe
privacy problem for multi-line sensitive headers like BCC, where all the following lines of this header are still visible in the bounced email!
I've corrected this with the code patch given below. You can download the patched version from http://home.arcor.de/j-i-t/mail_redirect-075-DvO-tb20x.xpi

Two further observations.
* Would be nice if the title of the window in which the bounced email is
"composed" does not just just say "Mail Redirect" but also gives the
email subject, as done by the usual "compose" window. This is helpful
e.g. when there are multiple compose windows open.
* To me, the choice between "Resent-To", "Resent-Cc", and "Recent-Bcc"
is superfluous and confusing - is there any difference concerning the
visibility of the new recipents' names? If not, just offer Resent-To.

--- chrome/content/mailredirect-compose.orig.js 2008-12-25 19:55:17.000000000 +0100
+++ chrome/content/mailredirect-compose.js 2008-12-25 19:55:17.000000000 +0100
@@ -1373,7 +1373,9 @@


if (inHeader) {

// dumper.dump("!! reading new buffer -- leftovers.length="+leftovers.length);

- buf = leftovers + aScriptableInputStream.read(1024);

+ buf = leftovers + aScriptableInputStream.read(50000); // hoping that

+ // 50000 characters are sufficient even for large multi-line headers

+

leftovers = "";



while (buf.length > 0) {

@@ -1418,6 +1420,22 @@
// terminate the line with CRLF sign, not native line-endings

line = buf.substr(0, eol+1-eol_length) + "\r\n";

buf = buf.substr(eol+1);

+ while(buf[0] == " ") // multi-line header, extends over several lines

+ {

+ eol_r = buf.indexOf("\r");

+ eol_n = buf.indexOf("\n");

+ if (eol_r != -1 && eol_n != -1) {

+ eol = eol_r>eol_n ? eol_r : eol_n;

+ } else if (eol_r != -1) {

+ eol = eol_r;

+ } else if (eol_n != -1) {

+ eol = eol_n;

+ } else {

+ eol = buf.length-1;

+ }

+ line += buf.substr(0, eol+1); // for simplicity, leave native line-endings

+ buf = buf.substr(eol+1);

+ }

// dumper.dump("line=>>"+line+"

This review is for a previous version of the add-on (0.7.5).