Migrating from KMail to Thunderbird

This week-end, after passing too much time to try to understand contact management in KMail (which was working quite well in KDE 3.x but is completely flawed IMHO in KDE 4.x), I decided with my wife it was time after 8+ years to try another mail reader.

Thunderbird was of course the first candidate, due to the familiarity she had with Firefox, Outlook (at school) and the fact it’s not that different from KMail anyway in its behavior and interface. I must say I was impressed to see my wife just say that she didn’t mind changing Mail reader, in order to get lacking features. Probably her familiarity with Open Source has also created an open mind for computing programs, and the fact she already uses multiple tools without major issue, makes her willing to try new ones.

So I started to work migrating her data from KMail to TB. I found a small program in order to help md2mb.pl. However, it was far from being complete, and I decided to rewrite a new one, based on the ideas from the other one, in order to have a better migration support. So here is a new md2mb.pl which hopefully will be useful for others as well.


#!/usr/bin/perl -w
#
# Program to import a maildir kmail environement into a thunderbird one.
# (c) Bruno Cornec under the GPLv2.

use strict;
use File::Find;
use File::Copy;
use File::Basename;
use File::Path;

my $cmd="formail";
# CHANGE AS YOU WISH
my $oldroot = "/beatrice/.Mail.sav";
my $newroot = "/beatrice/.thunderbird/30cq2rn3.default/Mail/Local Folders/";
# Is the newroot a file (1) or a dir (0)
my $nrisfile = 0;
my $debug = 0;
# END CHANGE

$debug++ if ((defined $ARGV[0]) && ($ARGV[0] eq "-v"));
print "DEBUG MODE, not doing anything, just printing\n" if ($debug);
if ($debug) {
print "CMD1: mkdir -p $newroot\n" if ((not -d "$newroot") && (not $nrisfile));
} else {
mkpath("$newroot",0, 0755) if ((not -d "$newroot") && (not $nrisfile));
}
system("$cmd /dev/null 2>/dev/null") == 0 or die "cannot find formail on your \$PATH!\nAborting";

find(\&md2mb,($oldroot));

sub md2mb {

if (-f $File::Find::name) {
return if (
($File::Find::name =~ /\.ids$/) ||
($File::Find::name =~ /\.sorted$/) ||
($File::Find::name =~ /\.index$/) ||
($File::Find::name =~ /\/cur\//) ||
($File::Find::name =~ /\/new\//) ||
($File::Find::name =~ /\/tmp\//));
}
if (-d $File::Find::name) {
return if (
($File::Find::name =~ /\/cur$/) ||
($File::Find::name =~ /\/new$/) ||
($File::Find::name =~ /\/tmp$/));
}
if ($debug) {
print "CURR: $File::Find::name\n";
}
my $destname = $File::Find::name;
$destname =~ s|^$oldroot||;
$destname =~ s|\.([[:alnum:]éèçàù\s]*)\.directory|$1.sbd|g;
if ($debug) {
print "DEST: $destname\n";
}
my $cdir = dirname("$newroot/$destname");
my $outputfile="$newroot/$destname";
$outputfile="$newroot" if ($destname =~ /^\s*$/);
if (-d $File::Find::name) {

my @files = (,);

if (@files) {
if ($debug) {
print "CMD2: mkdir -p $cdir\n" if (not -d "$cdir");
} else {
mkpath("$cdir",0, 0755) if (not -d "$cdir");
}
}
foreach my $file (@files) {
next unless -f $file; # skip non-regular files
next unless -s $file; # skip empty files
next unless -r $file; # skip unreadable files
$file =~ s/'/'"'"'/; # escape ' (single quote)
# NOTE! The output file must not contain single quotes (')!
my $run = "cat '$file' | $cmd >> '$outputfile'";
if ($debug) {
print "CMD3: $run\n";
} else {
print "Copying maildir content from $File::Find::name to $outputfile\n";
system($run) == 0 or warn "cannot run \"$run\".";
}
}
}
if (-f $File::Find::name) {
if ($debug) {
print "CMD2: mkdir -p $cdir\n" if (not -d "$cdir");
print "CMD3: cp $File::Find::name $cdir\n";
} else {
mkpath("$cdir",0, 0755) if (not -d "$cdir");
copy($File::Find::name,$cdir);
print "Copying mailbox content from $File::Find::name to $outputfile\n";
}
}
}

Warning: this code doesn’t work from the blog as wordpress makes some modifications, so download it from here

Run it first with a -v option in order to see what will be done. Be careful as I’ve just fixed the problems I had on my side, but probably not all of them. Especially, take care of file names with “‘” in them. they won’t work well.

So migration has been done, and of course more re-organization of the mailboxes. But now everything works fine, including contact management (that were imported using the LDIF exchange format).

And my wife has already sent a couple of mails, so I guess it will not take her long to be very familiar with TB.

Once again this shows all the power of FLOSS: freedom of choice, no info hidden, open format, and voilà.

Tags: , , ,

32 Responses to “Migrating from KMail to Thunderbird”

  1. Links 10/1/2011: Multi-touch on GNU/Linux, Linux 2.6.37 Already Built for Distros | Techrights Says:

    […] Migrating from KMail to Thunderbird […]

  2. Tweets that mention Migrating from KMail to Thunderbird « Bruno Cornec’s Blog -- Topsy.com Says:

    […] This post was mentioned on Twitter by Dr. Roy Schestowitz, Chad Martin. Chad Martin said: Migrating from KMail to Thunderbird: Migrating from KMail to ThunderbirdThunderbird/Icedove – mail/news client w… http://bit.ly/fNkXZv […]

  3. Kevin Says:

    This may be the tool I’ve been looking for. When I tried to run it, I got the following (note: I added some blank lines for readbility, so the line number below does not match above):

    ./md2mb.pl -v
    syntax error at ./md2mb.pl line 69, near “(,”
    Execution of ./md2mb.pl aborted due to compilation errors.

    The line in question is:

    my @files = (,);

    • brunocornec Says:

      Inded the script is modified by WordPress 😦
      the full correct version is availbale here: http://trac.project-builder.org/browser/projects/md2mb/devel/md2mb/bin/md2mb.pl

      Thanks for the feedback.

      • Kevin Says:

        Thanks for the link to the correct version. I hope I have some time tomorrow to try it out.

        I can’t believe nobody has written one of these before. I have been searching for some time for a migration solution. I switched from Thunderbird to Kmail, but am finding some flaky behaviour with kmail that is frustrating.

      • Kevin Says:

        Hmm. Still not working for me.

        Line 53 has some strange characters, even in the the download, buy I’m not sure that’s the problem.

        I modified $oldroot and $newroot as follows:

        my $oldroot = “/home/kevin/.kde/share/apps/kmail/mail”;
        my $newroot = “/home/kevin/mailtools/Export/”;

        Running with -v for debug I see a number of CURR and DEST lines printed with sensible values. There or no output lines in the debug run containing CMD which means none of the commands that do the work will be executed.

        I inserted some print statements to see which sections of code were executing. The program does enter the

        if (-d $File::Find::name)

        section around line 60 but never enters the

        if (@files)

        block at line 62 or

        foreach my $file (@files)

        block at line 70.

        Also the

        if (-f $File::Find::name)

        block at line 84 is never entered.

      • brunocornec Says:

        Line 53 contains in fact some french accented char éè… So I think you can just remove them on your side.

        If you use -v, commands are just printed, and not executed.

        lines in 62 are only valid for directories and 84 for files. So if none of the blocks are entered in , it means that it doesn’t find anything in your oldroot.

        Could you share the log in debug mode ? (send it by mail: bruno_at_hyper-linux-dot-org) as well as a unix find in the same dir to compare.

  4. Victor Says:

    Hi Bruno,

    I already use Thunderbird, but for user switching from Kmail it’s a good idea (and a good tool I guess).

    For french people, through the “download” link (http://trac.project-builder.org/browser/projects/md2mb/devel/md2mb/bin/md2mb.pl), click “Original Format” in order to get the script with the french accents ok ; otherwise line 53 the accents are not ok (through “Plain Text” we get some Ã).

  5. markus Says:

    Doesn’t work with spaces in folder names. I use

    my @files = (bsd_glob(“$File::Find::name/cur/*”),bsd_glob(“$File::Find::name/new/*”));

    to work around that.

    • brunocornec Says:

      Hello Markus

      On which platform are you ? On Linux I didn’t get that problem, as I remember that some of the folders of my family users had space in them.

      More over I use ‘ when calling the system command to avoid problem. Could you activate logging so I can see what is hapenning ?

      • Rudi Karell Says:

        There are problems with this line on linux. Not all files are found. I did a lot of debug, but in some cases I lose E-Mails with your converter.

      • brunocornec Says:

        I agree. I also found some cases where mail wasn’t migrated correctly. As I plan to migrate my daughter soon, I’ll review and try to fix it.

  6. Andrea Says:

    Hi,
    sorry I am not very keen in this. Since Kmail does not work properly anymore on ubuntu without KDE environment, I want definitely to shift to Thunderbird.
    I modified this:

    my $oldroot = “/home/rossi/.kde/share/apps/kmail/mail”;
    my $newroot = “/home/rossi/.thunderbird/wi5scsdd.default/Mail/Local Folders”;

    but I get this:
    ./md2mb.pl -v

    DEBUG MODE, not doing anything, just printing
    cannot find formail on your $PATH!
    Aborting at ./md2mb.pl line 27.

    what shall formail be?
    /dev/null is there.

    Thanks for the help
    Andrea

    • brunocornec Says:

      formail is a command provided by the procmail package, which is used to reformat correctly the mail. apt-get install procmail should help.

  7. Andrea Says:

    Thanks Bruno, now it is working for the main folder, but not for the subfolders in kmail, which have hidden subfolders too. well thanks anyway
    cheers
    Andrea

  8. pcxz Says:

    I also want import subfolder directory ..is possible?
    Thx

  9. pcxz Says:

    Ok ..i found fast solution 🙂

    http://dcwww.camd.dtu.dk/~schiotz/comp/kmail2thunder.html

  10. Migrating from KMail to Thunderbird: The revenge « Bruno Cornec’s Blog Says:

    […] migrating 2 of my kids and my wife from Kmail to Thunderbird last year, I finally decided this week-end to […]

  11. brunocornec Says:

    I have now fixed the script to support most cases as explained in this new blog entry https://brunocornec.wordpress.com/2012/01/08/migrating-from-kmail-to-thunderbird-the-revenge/

  12. maff Says:

    Great tool.

    I was looking for a Kmail to Thunderbird converter for a long time for the same reason as you.
    Thanks a lot for your work.

  13. Erik Johansen Says:

    I also needed to convert a kmail maildir to thunderbird, but ended up rewriting the script quite a bit, to make it work with nested folders.

    The modified script follows below:
    (Notice: Option “-v” is verbose, “-d” is dry-run )

    #!/usr/bin/perl -w
    #
    # Program to import a maildir kmail environement into a thunderbird one.
    #
    # Released under the GPLv2 or the Artistic license at your will.

    use strict;
    use warnings;
    use File::Find;
    use File::Basename;
    use File::Path;
    use IPC::Run qw(run);
    #use File::Glob ‘:glob’;

    my $cmd=”formail”;
    # CHANGE AS YOU WISH
    my $oldroot = “/home/someuser/.kde4/share/apps/kmail/mail”;
    my $newroot = “/home/someuser/.thunderbird/123f0puf.default/Mail/Local Folders/”;
    $newroot =~ s|/?$|/|; # Make sure new root ends in /
    my $verbose = 0;
    my $dryrun = 0;
    # END CHANGE

    $verbose++ if @ARGV && $ARGV[0] eq “-v”;
    $dryrun++, $verbose++ if @ARGV && $ARGV[0] eq “-d”;
    system(“$cmd /dev/null 2>/dev/null”) == 0 or die “cannot find formail on your \$PATH!\nAborting”;

    find(\&md2mb,($oldroot));

    sub md2mb {
    my $name = $File::Find::name;

    return if $name =~ /\.(ids|sorted|index)$/;
    return if -d $name; # skip directories
    return unless -f _; # skip non-regular files
    return unless -s _; # skip empty files
    return unless -r _; # skip unreadable files

    my $dest = $name;
    $dest =~ s%^\Q$oldroot\E/?%$newroot% # Target name is under a different root dir
    or die “Old root ‘$oldroot’ not found in path: $dest\n”;
    $dest =~ s%/(old|new|cur)/[^/]+$%%; # Target does not have old/cur/new indications
    $dest =~ s%\.([^/]+)\.directory(/.*$)%$1.add_sbd($2)%ge; # Remove .directory and add .sdb to all folders below
    $dest =~ s%/inbox([./])%/Inbox$1%;

    print “TRANSFER $name => $dest\n” if $verbose;

    return if $dryrun;

    my $destdir = dirname( $dest );
    mkpath( $destdir, 0, 0755 ) unless -d $destdir;

    run([$cmd], “>”, $dest);
    }

    sub add_sbd {
    my $rest = shift;
    $rest =~ s%/%.sbd/%g;
    return $rest;
    }

  14. brunocornec Says:

    You should look at th current version described in https://brunocornec.wordpress.com/2012/01/08/migrating-from-kmail-to-thunderbird-the-revenge/ as it fixed also the nested dirs.

  15. Yuval Levy Says:

    Hi Bruno,
    Thank you very much for this useful tool. The most current version today (1391) had small issues with subfolders. My folders were all outside the InBox and In the verbose output I saw extra forward slashes before the top level folder. Nevertheless, with a little bit of fiddling I was able to import the created mbox files to Thunderbird and wave Kmail2 goodbye.

    • brunocornec Says:

      Normally the extra ‘/’ are not an issue. Linux supports file name like dir///file without problem. Let me know if there is something else that needs to be fixed (or share a patch ;-))

  16. md2mb.pl improved to better support migration from Kmail to Thunderbird « Bruno Cornec’s Blog Says:

    […] started with a simple poor small script I wrote for myself to support the migration of my kids to Thunderbird from KMail. And I blogged about it, as I thought it could be interesting as I didn’t found myself a […]

  17. ItOpen – Open Web Solutions, WebGis Development » Blog Archive » Goodbye KMail! Says:

    […] BTW switching to thunderbird was not straight, consider using the utility described in the following link to convert your email folders: Migrating from KMail to Thunderbird […]

  18. Java plugin threat to OpenSuse 12.1? - Page 3 Says:

    […] .Oracle has already fixed this vulnerability couple of days ago 🙂 You may opt moving to tbird 🙂 Migrating from KMail to Thunderbird openSUSE12.2(Mantis)64-bit/GNOME 3.4.2 http://www.vazhavandan.blogspot.com Reply With […]

  19. Thomas S. Says:

    I tried to migrate kmail > icedove

    In icedove some things seem to differ. Most of all, new folders in parallel to “Local Folders” are not recognized by icedove, therefore all migrated mail folders go _below_ icedoves “Local Folders” in my version:

    #!/usr/bin/perl -w

    =head1 NAME

    kmail2icedove.pl – Import kmail mail folders into icedove

    =cut

    # Released under the GPLv2 or the Artistic license at your will.
    # Cf: http://www.gnu.org/licenses/gpl2.html
    # Remember that:
    # 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    #
    # 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    use strict;
    use File::Find;
    use File::Copy;
    use File::Basename;
    use File::Path;
    use File::Glob ‘:glob’;
    use Getopt::Long;
    use Pod::Usage;
    use List::Util qw(first);

    # settings
    my $cmd = ‘formail’;
    my $debug = 0;
    my $file = 0; # is the newroot a file (1) or a dir (0) ?
    my $help = 0;
    my $man = 0;
    my $oldroot = first { -d } “$ENV{HOME}/.Mail”, “$ENV{HOME}/Mail”;
    my @default_profiles = bsd_glob(“$ENV{HOME}/.icedove/*.default”);
    my $profile = shift @default_profiles;
    # if there is more than one default profile (quite unlikely, but you never
    # know), unset $profile again and let the user resolve this
    if (@default_profiles) { undef $profile }
    my $prefix;
    my $touch = 1;

    # parse command-line options
    GetOptions(
    ‘cmd|c=s’ => \$cmd,
    ‘debug|d+’ => \$debug,
    ‘file|f’ => \$file,
    ‘help|h’ => \$help,
    ‘man|m’ => \$man,
    ‘notouch|n’ => sub { $touch = 0 },
    ‘oldroot|o=s’ => \$oldroot,
    ‘profile|p=s’ => \$profile,
    ‘prefix|s=s’ => \$prefix,
    ) or pod2usage(2);
    pod2usage(1) if ($help);
    pod2usage(-exitstatus => 0, -verbose => 2) if ($man);
    defined $prefix or pod2usage(“Error: -prefix is a mandatory argument\n”);

    # the new root is constructed from the profile and the chosen prefixectory name
    my $newroot = “$profile/Mail/Local Folders” if defined $profile;

    # debug mode overview
    if ($debug) {
    print <<EOF;
    DEBUG MODE, not doing anything, just printing
    — current state —
    debug = $debug
    cmd = $cmd
    oldroot = $oldroot
    profile = $profile
    prefix = $prefix
    newroot = $newroot (constructed)
    — end —
    EOF
    }

    # some sanity checks before proceeding
    system("$cmd /dev/null 2>/dev/null”) == 0 or die <<EOF;
    Cannot run `$cmd' or locate it in your \$PATH!

    I need the program `formail' to process your mailboxes. You can provide the
    full path to the formail utility using the `-cmd' command-line switch.

    Perhaps `formail' is not installed on your system. Try installing the `formail'
    package using your distribution's package manager. The formail utility might be
    contained in the `procmail' package (e.g., Ubuntu 11.10), so you may need to
    look for the latter instead.

    Aborting …
    EOF

    defined $oldroot or pod2usage(<<EOF);
    Cannot locate KMail mailboxes automatically. Please specify their location by
    rerunning the program with the -oldroot option.
    EOF

    -d $oldroot or die "cannot find mailbox root `$oldroot'";

    defined $profile or pod2usage(<<EOF);
    Cannot locate the default Thunderbird profile directory automatically. Please
    specify its location by rerunning the program with the -profile option.
    EOF

    -d $profile or die "cannot find Thunderbird profile directory `$profile'";

    -d $newroot or pod2usage(<> ‘$outputfile'”;
    if ($debug) {
    print “COPYING CONTENT maildir($file) to $outputfile\n”;
    print “CMD: $run\n”;
    } else {
    print “Copying maildir content from $file to $outputfile\n”;
    system($run) == 0 or warn “cannot run \”$run\”.”;
    }
    }
    }
    }
    __END__

    =head1 SYNOPSIS

    md2mb.pl [options] -s name

    Options:
    -cmd | -c command to process mail
    -debug | -d debug mode
    -file | -f whether $newroot is a file or a directory
    -help | -h brief help message
    -man | -m full documentation
    -notouch | -n do not create empty files corresponding to .sdb
    dirs
    -oldroot | -o location of the KMail mailboxes
    -profile | -p path to the Thunderbird profile to install to
    -prefix | -s prefix that will be placed at the beginning of imported folder names

    =head1 OPTIONS

    =over 4

    =item B I

    Use I to process your maildirs. By default uses B in
    your C, but you can use this option to specify the full path to the
    executable to use instead.

    =item B

    Enter debug mode. This will print what would be done. No commands are executed,
    so this is safe to use when testing.

    =item B

    Specifies that $newroot is a file. If this option is omitted, it is assumed
    that $newroot is a directory instead.

    =item B

    Print a brief help message and exits.

    =item B

    Prints the manual page and exits.

    =item B

    Do not create empty files corresponding to the F dirs created by this
    script. By default, those empty files are created to make KMail’s subfolders
    show up in Thunderbird. You probably don’t need to use this option, but it is
    here nevertheless in case you need it.

    =item B I

    Specify where your B mailboxes are to be found. By default assumes a
    folder called F or F in your homedir, preferring F if it
    exists.

    =item B I

    Specify the path to the Thunderbird profile. Your imported mails will go inside
    a directory in this profile. By default uses the default profile in the
    F directory in your home directory, if it is unique.

    =item B I

    Specify the prefixectory I that will be created inside the Thunderbird
    profile to hold the imported mails. This option is mandatory; there is no
    default.

    =back

    =head1 EXAMPLES

    # this will fetch all mails from the folder .Mail or Mail in your home
    # directory, and import them into your default Thunderbird profile, in
    # a directory called Mail/pop.home.musique-ancienne.org/
    #
    # usually, this is all you need to specify:

    perl md2mb.pl -s Mail/pop.home.musique-ancienne.org/

    # on your computer, the mails may end up in
    # /users/segolene/.thunderbird/qk2f4dl6.default/Mail/pop.home.musique-ancienne.org/

    # if md2mb.pl cannot figure out where your default Thunderbird profile
    # is, use the following:

    perl md2mb.pl -p ~/.thunderbird/qk2f4dl6.default -s Mail/pop.home.musique-ancienne.org/

    =head1 DESCRIPTION

    B will import a B maildir environment, and transform it into a
    B one. It relies on B (or an equivalent utility) being
    available on your system.

    By default, B assumes that your B mailboxes are stored in a
    folder called F or F in your homedir. If this assumption is
    incorrect, you need to specify the correct folder with B.

    The mails will be imported into the Thunderbird profile that is either
    specified with B or determined automatically. The script will try to
    determine the default Thunderbird profile automatically. If there is a folder
    that ends in F in the F directory in your home dir, and
    if it is unique, that one will be used.

    The mails finally end up in a prefixectory below the profile. You must specify
    the prefixectory on the command line with B, as shown in the examples
    above.

    If you have used a structure with subfolders in KMail, mails in subfolders
    should show up correctly in Thunderbird.

    =head1 AUTHOR

    =over 4

    =item *

    Thomas Schuett, http://www.tschuett.de
    This is a slightly modified version of md2mb.pl (kmail > thunderbird)
    from Bruno Cornec, https://brunocornec.wordpress.com

    =item *

    Edward Baudrez, C<>

    =back

    =head1 LICENSE

    Released under the GPLv2 or the Artistic license at your will.
    Cf: http://www.gnu.org/licenses/gpl2.html
    Cf: http://www.perlfoundation.org/artistic_license_1_0
    Remember that:
    BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    =cut

  20. Thomas S. Says:

    Hmm – somehow wordpress cut of the most important part 😦

    • brunocornec Says:

      Maybe you can publish a diff or I can merge your modif in the original version so icedove users can also use the script. let me know.

  21. Simon Brown Says:

    Thomas S./brunocornec, any chance you could make the icedove version available?

    • brunocornec Says:

      I don’t use icedove so I’m unsure what the differences are with the version I have. But code is there, feel free to adapt it as you see fit !

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.