0

I initially installed Ubuntu 11.04 and used KMail for my email. All well and good.

Then I upgraded to Ubuntu 11.10. Presumably an upgrade of KMail took place as part of this. Now KMail won't even run; when I try, it tells me "Failed to fetch the resource collection" and crashes.

I don't mind switching to another email client, but I'd very much like to be able to recover all of the emails I have stored in KMail. Any suggestions on how to do this?

Thanks for any help anyone can provide.

2 Answers 2

1

Use this shell script for conversion of mdir to mbox format

#! /bin/sh
#
# Get a directory name as input and convert all mail files inside
# to mbox format
#
# NOTE: processing of subdirectories not yet implemented correctly:
#       all mails in subfolders are put into the same mbox
#       (it would be better if an mbox file will be generated for
#       each subfolder)
#
# History:
# Feb 06 2001 Joerg Reinhardt
# - first edition
# Feb 07 2001 Joerg Reinhardt
# - added usage output
# Feb 12 2001 Joerg Reinhardt
# - mails not containing a 'From:' field but an 'X-From-Line:' or a
#   'Reply-To:' field are now recognised and also processed (e.g. put into
#   the mbox file); this works fine for all my mails
# - added progress information
# - warning about corrupt files is now written to stderr
# Sep 8 2012 Kim Johansson
# - Time conversion to local timezone added
# - changed grep "Date:" to grep "Date: "

# check for argument or help argument respectively
if [[ ($1 == "") ||
($1 == "-h") ||
($1 == "--help") ||
($1 == "-help") ]]; then
echo "Usage: "$0" <Xfmail-mail-directory>";
fi;

# check if parameter is a directory
if [[ -d $1 ]]; then
# set target filename
dirname=`echo $1 | awk '{while(substr($0,length($0),1)=="/"){$0=substr($0,1,length($0)-1);}print $0;}'`;
mboxfile=$dirname'.mbox';

# check if directory is empty
if [[ `find $dirname -type f` == "" ]]; then
        echo $dirname": directory empty."
        exit 1;
fi;

# prevent automatic overwriting of target
if [[ -e $mboxfile ]]; then \
        dialogtext="Write file "$mboxfile"?";
        if dialog --yesno "$dialogtext" 10 60; then
        clear;
        rm -vf $mboxfile;
        else
        clear; exit 1;
        fi;
fi;

echo "writing xfmail mail directory '$1' to '$mboxfile'.";

# so we can handle filnames with space
IFS=$(echo -en "\n\b")
# collect files inside Xfmail mail-directory and produce MBOX format
# target file
#    for i in `find $1/* -type f -ls | cut -b 69-`; do
for i in `find $1/* -type f`; do
# output progress information
        echo -n -e \\r"                                                                               "
        echo -n -e \\rprocessing $i
# look for senders email address in the order
# 'From:'
# 'X-From-Line:'
# 'Reply-To:'
        shortfromflag='true';
        fromline=`grep 'From:' $i`;
# parse 'From:' field
        from=`echo $fromline | awk 'BEGIN{FS="<";}{if($0~/</) {pos=index($2,">");if(pos!=0) {print substr($2,1,pos-1);}} else {pos=index($0,":");print substr($0,pos+1);}}'`;
        if [[ $from == "" ]]; then
        shortfromflag='false';
        fromline=`grep 'X-From-Line:' $i`;
        from=`echo $fromline | awk 'BEGIN{FS="Line:";}{print $2;}'`;
        if [[ $from == "" ]]; then
                shortfromflag='true';
                fromline=`grep 'Reply-To:' $i`;
# parse 'Reply-To:' field
                from=`echo $fromline | awk 'BEGIN{FS="<";}{if($0~/</) {pos=index($2,">");if(pos!=0) {print substr($2,1,pos-1);}} else {pos=index($0,":");print substr($0,pos+1);}}'`;
                if [[ $from == "" ]]; then
                echo;
                echo "WARNING: "$i": no 'From:' nor 'X-From-Line:' nor 'Reply-To:' field found." >&2;
                continue;
                fi;
        fi;
        fi;
        if [[ $shortfromflag == "true" ]]; then
# parse date field
        dateline=`grep 'Date: ' $i`;
        if [[ $dateline == "" ]]; then
# set dummy date if no date field found
                dateline="Date: Thu, 01 Jan 1970 00:00:00 +0000 (GMT)";
        fi;
        datel=`echo $dateline | cut -b7- -`
# Convert to local time
        dateli=`date --date="$datel"`

# output MBOX mail header
        echo "From " $from $dateli >> $mboxfile;
        else
# output long MBOX mail header found in 'X-From-Line:' field
        echo $from >> $mboxfile;
        fi;

# output mail itself
        cat $i >> $mboxfile;
done;
echo;
else
echo $1": not a directory.";
fi;
0

If your mail is in mbox format it's easy

cd ~/.kde/share/apps/kmail/mail/
cat file1 file2 file3 ...  >>/var/spool/mail/$USER 

file1 file2 file3 ... , is your mail folders in mbox format (don't copy any .index .index.ids .index.sorted files)

Now you can get the mail from any mail client by choosing local delivery

I use thunderbird:
Server type: Unix Movemail
Server: localhost
This was done in Slackware, who uses sendmail as MDA, so your spool dir may be different.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .