рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдПрдХреНрдЬрд╝рд┐рдо рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ (рд╣реЗрдбрд░ рдФрд░ рдбреАрдХреЗрдЖрдИрдПрдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рд╕рд╣рд┐рдд)ред
рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдФрд░ рдХреЗрд╡рд▓ рдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рд╣реА рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ)ред рдФрд░ рдЬрдм рд╕реЗ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЕрдзреНрдпрдпрди рдХреЗ рджреМрд░рд╛рди рдЕрдкрдирд╛ рдПрдбрдСрди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдореЗрд░реЗ рд▓рд┐рдП, рдердВрдбрд░рдмрд░реНрдб рдХреЗ рдмрд╣реБрдд рд╣реА рднреНрд░рд╛рдордХ DOM \ XUL \ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбрд▓ред
рд╕рдорд╕реНрдпрд╛ рдХрдерди:
рдПрдбрдСрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдк рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ? рдПрдХ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛ рд╣реБрдЖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд╣рд╛рдВ DKIM, SPF рдЪреЗрдХ (рдкрд╛рд╕, рдХреЛрдИ рдирд╣реАрдВ, рдлреЗрд▓, рд╕реЙрдлреНрдЯрдлреЗрд▓ ......), рдХреЗ рд╕рд╛рде-рд╕рд╛рде "X-Spam- рд╕реНрдХреЛрд░" рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдкрд░ рд╕реВрдЪрдирд╛, рдЬрд┐рд╕реЗ рдПрдХ рдкреНрд░рдЧрддрд┐ рдмрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рджрд┐рдЦрд╛рдПрдЧрд╛ " рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдПрдВрдЯреАрд╕реНрдкреИрдо рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдкрддреНрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрддреНрд░ рдХрд╛ рдХрд╛рд░реНрдп "ред
рд╕рдВрд░рдЪрдирд╛
рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА
рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рд╕рдВрдЧрдарди рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд░рд╣реВрдВрдЧрд╛:
- Create.rdf рдмрдирд╛рдПрдВ - рдЬрд╣рд╛рдВ рд╣рдо рдПрдб-рдСрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ: рд▓реЗрдЦрдХ, рдирд╛рдо, рд╕рдВрд╕реНрдХрд░рдг, рдкреНрд░рдХрд╛рд░ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдереАрдо рдЖрджрд┐), рдердВрдбрд░рдмрд░реНрдб рдХреЗ рд╕рдорд░реНрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдг, рдЖрджрд┐ред
- Chrome.manifest рдмрдирд╛рдПрдБред рдпрд╣рд╛рдВ рд╣рдо рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
- рд╣рдо рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ \ chrome рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╛рдЗрд▓ рдХреЛ рддрд░реНрдХ рдФрд░ XUL рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рддрддреНрд╡реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд░рдЦрддреЗ рд╣реИрдВред рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ chrome.manifest рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд╣реИрдВ:
content signchk chrome/content/
overlay chrome://messenger/content/msgHdrViewOverlay.xul chrome://signchk/content/signchk.xul
рдпрд╣рд╛рдВ
1. рд╣рдо рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЬреЛ рдХреНрд░реЛрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдЧрд╛: // sigchk / рд╕рд╛рдордЧреНрд░реА / ... рд▓рд┐рдВрдХ
2. рдУрд╡рд░рд▓реЗ рдХреАрд╡рд░реНрдб
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рддрддреНрд╡ рдЬреЛ signchk.xul рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ msgHdrViewOverlay.xul рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд╛рд░реНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ XUL рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ:
<?xml version="1.0"?> <overlay id="signchk" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <vbox id="singlemessage"> <hbox> <vbox id="SPFbox"> <label id="spfbox_lbl" value="SPF" /> </vbox> <vbox id="DKIMbox"> <label id="dkimbox_lbl" value="DKIM" /> </vbox> <box id="MsgProgressBox" pack="end"> <stack pack="end"> <progressmeter mode="determined" value="0" id="auth_progress" max="70"/> <hbox align="center" pack="center"> <label value="" id="auth_res_lbl" /> </hbox> </stack> </box> </hbox> </vbox> <script type="application/x-javascript" src="chrome://signchk/content/signchk.js" /> </overlay>
рдпрд╣рд╛рдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рд░реВрдЯ
vbox id = "рд╕рд┐рдВрдЧрд▓рдореИрд╕реЗрдЬ" рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡реЛрдВ рдХреЛ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрддреНрд╡ рдХреА рдЖрдИрдбреА рд╕реНрд╡рдпрдВ
рдбреЛрдо рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ (рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХ рдЬреЛ рдЖрдкрдХреЛ рдердВрдбрд░рдмрд░реНрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
рдЬрдм рд╣рдордиреЗ рдЗрд╕ рддрддреНрд╡ рдХреЛ рдвреВрдВрдв рд▓рд┐рдпрд╛, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рдЪреЗрдд рдЖрдИрдбреА-рд╢рдиреАрдХреНрд╕ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреЛрдЬ рд╕рдХреЗрдВ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХреЗрдВред
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИред
(
рдкрд╛рдЪрди : рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рдХрд┐
xmlns = " www.mozilla.org/keymaster/gatekeeper/there.is.only.xul " рд╡рд╣рд╛рдВ рдХреНрдпреЛрдВ рдЦрдбрд╝рд╛ рд╣реИ - рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рд╡рд╣рд╛рдБ рдХреБрдЫ рдФрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ chrome.manifest:
chrome: //messenger/content/msgHdrViewOverlay.xul , рддрдм рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреБрдирд░реНрд▓реЗрдЦрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдХреНрд░реАрди рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣реА рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рд▓рд┐рдЦреВрдВрдЧрд╛ рд░реЗрдб)
рдХрд╛рдо рдХрд╛ рддрд░реНрдХ
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЬрдореАрди рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
const Cc = Components.classes; const Ci = Components.interfaces; const Cr = Components.results; const Cu = Components.utils; var auth_res_lbl; var auth_progress; var spfbox_lbl; var dkimbox_lbl; window.addEventListener('load', function(e) { startup(); },false); function startup() { document.getElementById('threadTree').addEventListener("select",selChange,false); auth_res_lbl = document.getElementById('auth_res_lbl'); auth_progress = document.getElementById('auth_progress'); spfbox_lbl = document.getElementById('spfbox_lbl'); dkimbox_lbl = document.getElementById('dkimbox_lbl'); }
рдпрд╣рд╛рдВ рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рдмрдирд╛рддреЗ рд╣реИрдВ, рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдмрдирд╛рдП рдЧрдП рджреГрд╢реНрдп рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдВрдЧреЗ, рдЙрдиреНрд╣реЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдФрд░
рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП
рдереНрд░реЗрдбрдЯреНрд░реА рддрддреНрд╡ рдХреЗ рдИрд╡реЗрдВрдЯ
рдЗрд╡реЗрдВрдЯ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬреЛ рдердВрдбрд░рдмрд░реНрдб-рдПрдХ рд╕рдВрджреЗрд╢ рд╕реВрдЪреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрдврд╝реЗрдВ, рд╣реЗрдбрд░ рдЪреБрдиреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИ:
function selChange(event) { var msgHdr = window.gFolderDisplay.selectedMessage; var messenger = Cc["@mozilla.org/messenger;1"].createInstance(Ci.nsIMessenger); var stream = Cc["@mozilla.org/network/sync-stream-listener;1"].createInstance(Ci.nsISyncStreamListener); var sis = Cc['@mozilla.org/scriptableinputstream;1'].createInstance(Ci.nsIScriptableInputStream); var uri = msgHdr.folder.getUriForMsg(msgHdr); sis.init(stream); messenger.messageServiceFromURI(uri).streamMessage(uri, stream, null, null, false, null); var _message = sis.read(sis.available()); var headers = _message.split(/\r\n\r\n|\r\r|\n\n/, 1)[0]; var mimeHeaders = Cc["@mozilla.org/messenger/mimeheaders;1"].createInstance(Ci.nsIMimeHeaders); mimeHeaders.initialize(headers, headers.length);
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рднреА рд╣реЗрдбрд┐рдВрдЧ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рд╛:

PS рдХрд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдерд╛ - рд╕рдЪреНрдЪрд╛рдИ рдЗрддрдиреА "рд╕реНрдкреЛрд░реНрдЯреА" рдирд╣реАрдВ рд╣реИ рдФрд░ рдердВрдбрд░рдмрд░реНрдб рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рд╣реА рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕рдорд╛рдирд╛рдВрддрд░рд╣реЗрдбрд░рдбрд╛рдЯрд╛ - рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рдХреЗ рд╣реЗрдбрд░ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдЪрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ
рджреЗрдЦреЗрдВ-> рд╢реАрд░реНрд╖ рд▓реЗрдЦ ред рддреЛ, рдЕрдЧрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рднреА рд╣реЗрдбрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
currentHeaderData рдореЗрдВ рд╕рднреА рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдореЛрдб рдЕрдХреНрд╖рдо рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╣реЗрдбрд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рдкреА рдкреА рдПрд╕
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА:
-
https://developer.mozilla.org/en/Building_a_Thunderbird_extension-
https://developer.mozilla.org/en/Extensions/Thunderbird/HowTos-
http://old.nabble.com/Mozilla---Thunderbird-f6673.html , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
рдпрд╣рд╛рдБ