Linux - GeneralThis Linux forum is for general Linux questions and discussion.
If it is Linux Related and doesn't seem to fit in any other forum then this is the place.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
This is a script that you can use to convert your mail folders from maildir format to mbox format. This is useful if you want to move your mail between programs like kmail and evolution or thunderbird.
I did not creat this script my self, and I do not claim it to my self. I came upon it while googling to solve my mdir to mbox conversion problems and it worked great. It is a useful script and I thought some people might find it helpful too.
The script file is named xfmail2mbox.sh
Regards,
i.s.
Code:
#! /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)
# NOTE: calculation of message date in case of 'From:' doesn't recognise
# time zones
#
# 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
# 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'.";
# collect files inside Xfmail mail-directory and produce MBOX format
# target file
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;
weekday=`echo $dateline | awk '{gsub(/,/,"",$2);print $2;}'`;
day=`echo $dateline | awk '{print $3;}'`;
month=`echo $dateline | awk '{print $4;}'`;
year=`echo $dateline | awk '{print $5;}'`;
time=`echo $dateline | awk '{print $6;}'`;
diffGMT=`echo $dateline | awk '{print $7;}'`;
timezone=`echo $dateline | awk '{print $8;}'`;
# output MBOX mail header
echo "From " $from $weekday $month $day $time $year >> $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;
i_s, thanks for sharing this. Could you also please post the link to the webpage you got this script from so that the original author gets proper mileage.
I don't really remember the webpage I downloaded it from, its been almost 3 weeks since I downloaded it. However, the file has some comments regarding the history of the file and they are included with the script shown.
Scripts works perfectly for transition from Courier to UW Imap
Last week I moved my mail server from Courier on Debian Linux to UW IMAP on OS X Leopard (using the excellent administration tool Mail Serve from Bernard Teo - look for MailServe on the homepage of cutedgesystems.com). For this I had to convert from MailDir to mbox format. I worked perfectly for me without any trouble.
I wrote a similar script in PHP which can work with very big maildir folders (does not keep much in memory before writing to the mbox file thus not exhausting the php memory limits) and copes with many Header information like "X-From-Line:" and "Reply-To:" in case "From:" is missing.
I have tested it on my ubuntu 8.04 with PHP 5.2.4 and works fine.
The above script have been updated and supports subdirectory convertion too. For example it can convert qmail's maildir or kmail's maildir formats (the latter supports sub-directories) to an mbox structure.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.