Задача научиться восстанавливать пропавшие письма в mail-папках, понять что такое сжатие mail-папки, манипулировать mail-папками и прочий thunderird-stuff ниже.

mail-папка - это "Входящие", "Исходящие", "Удаленные" и другие созданные пользователем. (В Thunderbird они называются папками но в файловой системе жесткого диска тоже есть понятие папка, поэтому чтоб не путаться). Каждая mail-папка представляет собой на жестком диске отдельный, одноименный файл (за исключением того что "Входящие" соответствует файл Inbox, "Отправленные" - Sent, "Черновики" -Draft, "Исходящие" -Unsent Messages, "Удаленные" - Trash, "Спам" - Junk) на hdd. Эти файлы Thunderbird хранит здесь %APPDATA%\Thunderbird\Profiles\xxx.default\Mail\

===========================================================
Коротко о главном. Случается что все письма в mail-папке пропадают, при этом при открытии Thunderbird и нажатии на mail-папку Thunderbird шуршит винчестером и пишет "содержимое папки обрабатывается"- если mail-папка большая то эта операция может занимать минуты, но после обработки ни одно письмо не появляется. И так повторяется при каждом открытии Thunderbird. Оказывается, чтобы восстановить все письма в любой mail-папке например "Inbox" нужно полностью внутри файла Inbox (он текстовый) удалить с поднятием нижележащего текста все строки :


X-Mozilla-Status: xxxx
(xxxx - некоторое число)
или заменить строку на символ "X"


(не перепутать со строкой X-Mozilla-Status2: - ее трогать не нужно)
далее желательно стереть одноименный .msf файл в данном случае Inbox.msf в той же папке. теперь открываем Thunderbird , она обрабатывает Inbox и все письма появляются. :)


Теперь что такое "сжатие" в Thunderbird. Когда мы выделяем письма в некоторой mail-папке и удаляем, то фактически письма не удаляются из файла, а только перестают отображаться в данной mail-папке ( плюс конечно эти письма копируются в папку "Удаленные" значит место занимаемое только что удаленными письмами только прибавляется). То что письма не удалены можно убедиться нажав "перестроить индекс" или удалив .msf файл. А вот когда нажимаем "сжать" то удаленные письма из mail-папки действительно удаляются. Thunderbird делает это так(на примере Inbox): читает Inbox и все файлы не помеченные как удаленные в Inbox.msf копирует в новый временный файл, по окончании этого процесса старый Inbox удаляется а временный файл переименовывается в Inbox. В итоге "сжатие" это очень полезная операция в Thunderbird но она не сжимает тем способом как делают 7z,rar,zip, а просто вырезает лишнее.


О манипуляции mail-папками. Пусть имеем установленные ящики в Thunderbird

тогда имеем папки



Главная мысль- mail-папка ("входящие", "отправленные" итп) представляет собой одноименный файл внутри freemail.web, Local Folders, ilovebender.com, marslink.web. если внутрь них добавить еще mail-папку ( перекопировав туда файл содержащий mail-папку) то Thunderbird его успешно подцепить с тем же именем при следующей загрузке. Например хотим из "from-freemail.web"-"Входящие" перебросить в "Локальные Папки"-"Inbox-from-freemale.web". для этого копируем
%APPDATA%\Thunderbird\Profiles\9v3yjgo2.default\Mail\freemail.web\Inbox в
%APPDATA%\Thunderbird\Profiles\9v3yjgo2.default\Mail\Local Folders\Inbox-from-freemail.web. Получаем

Или имеем большую mail-папку "входящие" и хотим ее скопировать в другую mail-папку (для архива например) а "входящие" очистить. тогда переименовываем
%APPDATA%\Thunderbird\Profiles\9v3yjgo2.default\Mail\freemail.web\Inbox
в
%APPDATA%\Thunderbird\Profiles\9v3yjgo2.default\Mail\freemail.web\Inbox-1998-2001
и создаем пустой файл
%APPDATA%\Thunderbird\Profiles\9v3yjgo2.default\Mail\freemail.web\Inbox
тогда получим все письма из "входящих" в "Inbox-1998-2001" и пустую "входящие" куда будут приходить новые письма


Работа на уровне файлов позволяет легко подсоединять/удалять/архивировать отдельные mail-папки к действующей системе. например имеем сохраненный на DVD профиль Thunderbird с тремя ящиками, каждый по 1Гб. А хотим посмотреть только "отправленные" из одного ящика. Можно конечно полностью заменить свой профиль на профиль из DVD , но удобнее просто скопировать один файл Sent. Добавка: Если есть на диске каталог с расширением .sbd например Inbox.sbd то это значит (для Thunderbird) что mail-папки внутри этого каталога являются дочерними для mail-папки "Inbox" (нужно знать если хотим понять или восстановить или создать или перестроить структуру mail папкок внутри ящика). То есть:


Здесь "A" и "B" являются дочерними для "Входящие", "C" является дочерним для "A". то же самое на уровне файлов/каталогов.


 



Inbox в Inbox.sbd имеет дочерние mail-папки





 

 

A и B дочерние для Inbox

A в A.sbd имеет дочерние mail-папки



 

 

C дочерняя для A

 

===================================================================

Подробнее:

соответствие полей которые заполняются при установке ящика и настроек в thunderbird после установки.
во время установки:


 

bender@ilovebender.com - обратный адрес (не обязан совпадать с ящиком который мы сейчас добавляем для сбора почты, но по моему нет смысла вводить отличное).

 


после установки находится здесь:



во время установки:


 

ilovebender.com - адрес откуда будем получать/отправлять (не обязаны совпадать) почту.


после установки для POP3 находится здесь:


после установки для SMTP находится здесь:


во время установки:


 

bender - логин для доступа к нашему ящику на сервере ilovebender.com (как вариант бывает логин bender@ilovebender.com)


после установки находится здесь:



во время установки:


 

"имя учетной записи" которое фактически означает название ящика в списке установленных ящиков для сбора писем в главном окне thunderbird


после установки находится здесь:



Как было сказано выше Thunderbird хранит письма внутри папки %APPDATA%\Thunderbird\Profiles\xxx.default\Mail\

а именно за "Локальные папки" отвечает папка
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders

когда мы добавляем ящик, то его письма будут храниться в папке
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Name
где Name - это имя POP3 сервера которое мы указали при установке ящика.
Таким образом письма для вышеописанного случая : 3 почтовых ящика(bender@ilovebender.com, lila@freemail.web, ang79@marslink.web) и Локальные папки
будут храниться в папках

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\ilovebender.com
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\freemail.web
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\marslink.web
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders

Если заводится два ящика с одинаковым именем pop3 сервера, то к названию папки Thunderbird добавляет число. например для двух ящиков на freemail.web были бы созданы папки

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\freemail.web
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\freemail.web-1

внутри каждого ящика есть mail-папки : "Входящие", "Отправленные", "Удаленные" или в английской версии "Inbox", "Sent", "Trash". Как уже было сказано выше письма находящиеся в этих mail-папках хранятся в соответствующих (одноименных для английской версии) файлах. Например : "Входящие" для bender@ilovebender.ru соответствует файл

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\ilovebender.com\Inbox

"Отправленные" для ang79@marslink.web соответствует файл

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\marslink.web\Sent

"Удаленные" для "Локальные папки" соответствует файл

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\Trash

Если мы внутри mail-папки A создаем другую mail-папку B, то фактически на диске в каталоге где лежит файл A создается подкаталог A.sbd и в нем файл B. Например

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\A - файл A

%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\A\A.sbd\B - файл B

Такой момент если мы в Thunderbird удаляем почтовый ящик (Инструменты-параметры учетной записи-удалить учетную запись) то весь каталог соответствующие этой учетной записи (этому ящику) остается на диске а удаляется только пара строчек в конфигурационном файле Thunderbird

%APPDATA%\Thunderbird\Profiles\xxx.default\prefs.js

поэтому при желании эту почту всегда можно подключить прочитать итп.

Для каждой mail-папки (к примеру "Входящие") существует не только одноименный (соответствующий) файл (Inbox) содержащий в себе письма но и одноименный .msf файл (Inbox.msf) содержащий в себе заголовки писем , статус писем итп. Именно на основе содержимого .msf файла (Inbox.msf) Thunderbird отображает (или не отображает) письма в своем окне.
Thunderbird создает .msf файл (Inbox.msf) путем обработки основного файла (Inbox). В .msf файле (Inbox.msf) содержится информация какие письма были удалены из данной mail-папки ("Входящие"), поэтому они не отображаются. Поэтому если удалить msf файл или нажать "перестроить индекс" то удаленные письма тут же возникнут, если конечно до этого не было произведено так называмое "сжатие папки". А что такое "сжатие папки" это и есть настоящее удаление "удаленного" письма не только из списка в файле .msf (Inbox.msf) но и из основного файла (Inbox). При этом конечно никакого сжатия в том смысле как мы привыкли zip,rar,7z не происходит.

Из вышесказанного происходят удобные возможности по манипуляции с mail-папками (как описано в самом начале) когда нужно перенести почту с одной машины на другую, с одной операционной системы на другую, когда нужно перенести часть почты с одной машины на другую.

Например в имеющийся работающий Thunderbird нужно добавить "Входящие" и "Отправленные" с другого компьютера. Тогда например

создаем у себя пустой файл
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\new

создаем каталог
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\new.sbd

и в него копируем с другой машины файлы
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\new.sbd\Inbox
%APPDATA%\Thunderbird\Profiles\xxx.default\Mail\Local Folders\new.sbd\Sent

открываем Thunderbird и вуаля





Можно было бы Inbox и Sent перекопировать просто в Local Folders, но там уже есть файлы (по крайне мере Inbox) и значит нужно было бы переименовать их например в Inbox.new и Sent.new тогда получили бы следующее



Но если мы хотим сгруппировать несколько mail-папок то разумно их скопировать в каталог как сделано было выше в new.sbd (для примера). однако как уже было сказано просто каталогов внутри Thunderbird не бывает. Каталог говорит thunderbird что mail-папки внутри каталога являются дочерними значит должен быть родитель - файл new (так как каталог new.sbd). если родителя не будет то new\Inbox и new\Sent в thunderbird отобразятся но без писем внутри и если в thunderbird нажать на свойства такого new\Inbox то умолчанию будет стоять кодировка "Арабская IBM-864" которую будет никак не поменять и кнопка "перестроить индекс" тоже работать не будет.

файлы можно спокойно переименовывать. Inbox в Draft итп.


Предположим у нас письма хранились на диске C: и места на нем осталось мало. Как перенести все ящики с письмами на другой более большой диск к примеру D:

Копируем с диска C: папку
%APPDATA%\Thunderbird\Profiles

на диск D:
D:\Profiles

теперь осталось объяснить это Thunderbird.

Заходим в файл

%APPDATA%\Thunderbird\profiles.ini
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=Profiles/9v3yjgo2.default

и меняем его содержимое на

[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=0
Path=D:\Profiles\9v3yjgo2.default

запускаем Thunderird и она уже работает с диском D:,

после этого можно удалить папку
%APPDATA%\Thunderbird\Profiles

С помощью такого приема можно подключиться и оперативно посмотреть почту на другом компьютере по сети (если конечно есть доступ и на удаленном компьютере Thunderbird закрыт) ничего не перекачивая себе.

Следующее. Бывает (причину пока не знаю) все письма или большая часть в одной или нескольких mail-папках исчезают.

Оказывается, чтобы восстановить все письма в любой mail-папке например "Inbox" нужно полностью внутри файла Inbox (он текстовый) удалить с поднятием нижележащего текста все строки :


X-Mozilla-Status: xxxx
(xxxx - некоторое число)
или заменить строку на символ "X"


(не перепутать со строкой X-Mozilla-Status2: - ее трогать не нужно)
далее желательно стереть одноименный .msf файл в данном случае Inbox.msf в той же папке. теперь открываем Thunderbird , она обрабатывает Inbox и все письма появляются. :)


Как это сделать, в Windows можно с помощью текстового редактора предназначенного для работы с большими (очень большими) текстовыми файлами. Или можно установить Perl (ActivePerl, freeware, http://www.activestate.com/). Создаем файл-perl-скрипт


change-win.pl


$in_file = "D:\\Profiles\\9v3yjgo2.default\\Mail\\Local Folders\\Inbox.new";
$out_file = "D:\\Profiles\\9v3yjgo2.default\\Mail\\Local Folders\\Inbox.new.mod";


open(in, "<$in_file") or die "cannot open file";
open (out, ">$out_file") or die "Cannot write file";
while ( <in> )
{
$_=~s/(.*)X-Mozilla-Status:(.*)/X/;
print out $_;
}
close infile;
close outfile;

(обращаю внимание на двойные обратные слэши в пути к файлу).
в $in_file, $out_file вставляете ваш путь к файлу.
далее из командной строки запускаем этот скрипт.

C:\bin\perl\perl change-win.pl

скорость обработки зависит практически только от скорости винчестера и составила у меня 4,3 MB/s. То есть скажем файл 1 Gb будет обрабатываться примерно 4 минуты. После того как скрипт закончить работу можно запустить Thunderbird и убедиться в том что в исходной mail-папке (в моем случае Sent.new) все как прежде писем нет, а в обработанной письма появились (Sent.new.mod). Для меня к сожалению, неясно почему Perl не хочет менять исходный файл и требует измененный записывать в отдельный. Потому что в Linux это можно и делается так:

#perl -pi -e 's/(.*)X-Mozilla-Status:(.*)/X/' Sent.new

ключ – е выполняет perl команду из команой строки

-p – выполняет на весь файл

-i – редактирует файл на месте

's/(.*)X-Mozilla-Status:(.*)/X/' ------ команда замены--------

в каждой строке файла если находит ''X-Mozilla-Status:'' то меняет все символы левее +сам X-Mozilla-Status:+все символы правее на ''X''. То есть строка содержащая в любом месте "X-Mozilla-Status:" полностью заменяется на "X". Пример

Было:
dskjhfeiufhewfhlwkjhfkjewX-Mozilla-Status:kewljr;lkewjr;lewkrjewr12312
станет:
X

perl работает с файлом построчно.

также в Windows неясно как запустить скрипт чтобы он обработал скажем все файлы внутри некоторого каталога и его подкаталогов, потому что когда в ящике много папок то конвертация превращается в настоящий обезъяний труд, Linux это делается так: переходим в корень той папки которую хотим обработать и выполняем команду:

#perl -pi -e 's/(.*)X-Mozilla-Status:(.*)/X/' `find . | grep -v .sbd | grep -v .dat`

В Linux скорость обработки уже зависит не только от винчестера и на том же компьютере (Celeron 1800-256Мб) составила 8,3 MB/s.

также рекомендую перед запуском скрипта perl или после работы скрипта (перед открытием thunderbird) удалить соответствующие .msf файлы так как они все рано теперь должны будут быть обновлены.

Скорость создания .msf файла (индексирования) со стороны Thunderbird в Windows составила 3,7 MB/s , то есть файл 1 Gb будет обрабатываться Thunderbird примерно 4,5 минуты. В итоге полная обработка файла размером 1GB займет примерно 4(perl)+4,5(Thunderbird)=8,5 минут.

Такой еще момент, предположим у вас часть Inbox запорчена мусором. Мне попадался файл у которого последняя треть была заполнена одним и тем же символом. Thunderbird думал на этой mail-папкой и выдал ноль писем. Запустил perl . он дошел до мусора подумал и прекратил работу. потом я открыл текстовым редактором и уже увидел в чем дело. Однако так как perl в windows записывает изменный файл отдельно то я имел обработанный Inbox размер две третих от исходного. я его скормил Thunderbird и он мне прекрасно показал выжившие письма.
========================================================
в продолжение темы . работать в thunderbird без слез и тормозов невозможно.
как привязать расширение во вложении к приложению. по теории идем в
Инструменты-настройки-вложенные файлы-просмотр и редактирование действий.- окно "действия при загрузке". но тут облом - нельзя самому добавлять расширения. а можно редактировать только имеющиеся. да и то частая ситуация thunderbird открывает расширение неким приложением которое ему взбредет в голову а в этом окошке "действия при загрузке" все равно остается чисто.
тогда лезем в файл Mimetypes.rdf и правим руками формат xml. немного официальной информации. Но на самом деле ее недостаточно, и остальное нашлось на канадском сайте одного университета.

Вот кусок из Mimetypes.rdf которого достаточно чтобы связать расширение с приложением



  <RDF:Seq RDF:about="urn:mimetypes:root">
<RDF:li RDF:resource="urn:mimetype:application/msword"/>
</RDF:Seq>

<RDF:Description RDF:about="urn:mimetype:externalApplication:application/msword"
NC:path="/usr/bin/openoffice.org2.4"
NC:prettyName="openoffice.org2.4" />
<RDF:Description RDF:about="urn:mimetypes">
<NC:MIME-types RDF:resource="urn:mimetypes:root"/>
</RDF:Description>


<RDF:Description RDF:about="urn:mimetype:application/msword"
NC:value="application/msword"
NC:editable="true"
NC:description="doc document">
<NC:fileExtensions>doc</NC:fileExtensions>
<NC:fileExtensions>docx</NC:fileExtensions>
<NC:handlerProp RDF:resource="urn:mimetype:handler:application/msword"/>
</RDF:Description>
<RDF:Description RDF:about="urn:mimetype:handler:application/msword"
NC:alwaysAsk="false"
NC:saveToDisk="false"
NC:handleInternal="false" NC:useSystemDefault="false"> <NC:externalApplication RDF:resource="urn:mimetype:externalApplication:application/msword"/>
</RDF:Description>
В данном случае .doc и .docx с /usr/bin/openoffice.org2.4. Подробнее.
application/msword - каждому приложению сопоставляется некий mime-type. Например для .doc это application/msword
соответствие расширений и mime-types можно посмотреть в инете или в файле /usr/share/mime/globs.
Doc,docx — расширения, которые относятся к данному mime-type.
/usr/bin/openoffice.org2.4 - полный путь к приложению которым открывать приложение
NC:handleInternal="false"- очень важный параметр, позволяет наплевать на связки mimetypes операционной системы и использовать исключительно инфо из Mimetypes.rdf. Без этого параметра удается добавить лишь небольшое количество расширений в Thunderbird.
NC:prettyName="openoffice.org2.4" /> - инфо для окошка (смотри картинку)



Нашпиговав такими блоками Mimetypes.rdf с разными параметрами можно привязать все необходимые нам расширения с приложениями. Потом можно придти к себе на работу заменить данный файл и получить теже самые привязки на другом рабочем месте. Вот что было до


и стало после.:)









почему бывает вложения открываются некими программами а данное окно пустое — потому что файл Mimetypes.rdf содержит ошибки. Также советую держать всегда копию данного файла отдельно . Во первых на случай переустанавки Thunderbird, во вторых потому что когда thunderbird первый раз читает отредактированный вами файл она его весь перех...т (перегруппировывает) , переделывая наши блоки в свои. После этого редактировать в дальнейшем такой файл затруднительно. Гораздо проще сделать изменение в предварительно сохраненном файле и подсунуть его Thunderbird. Проверено на версиях 1.0.2, 2.0.17.
Также при отправке письма с вложением thunderbird заглядывает в файл mimetypes.rdf чтобы узнать как пометить вложение что по идее делается чтоб на стороне принимающего знали чем открыть вложение . Если информацию она не находит то помечает вложение как application/octetstream . В этом легко убедиться создав новое письмо , вложив в него rar файл , сохранить в Drafts и посмотрев текст письма View-Message Source. Если в Mimetypes.rdf есть запись про rar то в теле письма будет запись
Content-Type: application/x-rar;

Если же записи про rar нет то будет

Content-Type: application/octet-stream;

Однако, если у нас в Mimetypes.rdf есть запись с rar то вложенный rar файл откроется корректно в независимости от того какой Content-Type был присовоен этому вложению отпралялвшей стороной. В чем можно убедиться экспериментально.
На последок полный Mimetypes.rdf с пояснениями.
:)
то что описано выше хорошо для администраторских задач. для пользователей
выяснилось что есть плагин для этого дела
MIME Edit 0.60

ура!
---------------------------------
еще один плагин решает проблему уведомления о приходе письма в Linux
Mailbox Alert 0.13.1
Сайт управляется системой uCoz