blob: 67c54a57ae0461d8cb014cff743a833ec2c583cc [file] [log] [blame]
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Apache Pony Mail (Incubating)</title>
<link rel="stylesheet" type="text/css" href="/css/default.css"/>
<link rel="stylesheet" type="text/css" href="/css/fa/fa.css"/>
<link rel="apple-touch-icon" sizes="57x57" href="/icons/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/icons/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/icons/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/icons/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/icons/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/icons/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/icons/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/icons/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16x16.png">
<link rel="manifest" href="/icons/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/icons/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
</head><body>
<div id="titlebar">
<a href="/contribute.html"><img align='left' style="width: 130px; height: 125px; position: relative; left: -6px; top: -6px; border: 0;" src="/images/devme.png" alt="Fork/Hack on Pony Mail"></a>
<a href='/'><img src="/images/ponymail.svg" style="width: 110px; margin-left: -10px; margin-right: 20px; height: auto;" align="left"/></a>
<h1><a id="title" href="/" style="color: #FFF !important;">Apache Pony Mail&trade; (Incubating)</a></h1>
<div id="menubar">
<ul>
<li><a href="/docs.html"><i class="fa fa-book"></i><span>Documentation</span></a></li>
<li><a href="/source.html"><i class="fa fa-git-square"></i><span>Source</span></a></li>
<li><a href="/downloads.html"><i class="fa fa-cloud-download"></i><span>Download</span></a></li>
<li><a href="/support.html"><i class="fa fa-question-circle"></i><span>Get support</span></a></li>
<li><a href="/contribute.html"><i class="fa fa-share-alt"></i><span>Contribute</span></a></li>
<li><a href="/about.html"><i class="fa fa-users"></i><span>About</span></a></li>
</ul>
</div>
</div>
<h1 id='downloadapacheponymailincubating'>Download Apache Pony Mail (Incubating)<a href='#downloadapacheponymailincubating' style='color: rgba(0,0,0,0);'>&para;</a></h1>
<p>Be sure to <a href="https://www.apache.org/info/verification">verify your downloads</a> using the folowing <a href="https://downloads.apache.org/incubator/ponymail/KEYS">KEYS</a>.</p>
<p>The latest release of Pony Mail is 0.11, released on 2019-04-20. You can fetch it here:</p>
<p><a href="https://www.apache.org/dyn/closer.lua/incubator/ponymail/apache-pony-mail-0.11-incubating.tar.gz">Download Apache Pony Mail (Incubating) 0.11 from a mirror</a>
Verify:
<a href="https://downloads.apache.org/incubator/ponymail/apache-pony-mail-0.11-incubating.tar.gz.asc">asc</a>
<a href="https://downloads.apache.org/incubator/ponymail/apache-pony-mail-0.11-incubating.tar.gz.sha256">sha256</a></p>
<h2 id='changesin011'>Changes in 0.11:<a href='#changesin011' style='color: rgba(0,0,0,0);'>&para;</a></h2>
<ul>
<li>Bug: Tidy up list names on seeding pages to avoid breakage</li>
<li>Enh: Enforce UTF-8 in content headers (#479)</li>
<li>Bug: elastic.lua#scroll forces sort to use _doc (#478)</li>
<li>Bug: cannot download more than 10K mails to a mbox file (#475)</li>
<li>Bug: no need to sort after scroll (#477)</li>
<li>Enh: Ensure non-printable chars are not lost in source and mbox output (#476)</li>
<li>Enh: display buttons even if no mails are found in a month (#470)</li>
<li>Bug: Javascript URLs must always use URL_BASE (#469)</li>
<li>Bug: setup.py uses ES library version to decide what features the database supports (#464)</li>
<li>Various tidyups suggested by Pylint</li>
<li>Bug: archiver.py can never detect content-type: flowed (#461)</li>
<li>Bug: import-mbox.py: imap code should not reset ES instance (#460)</li>
<li>Bug: tmpname used before it has been set up in import-mbox (#458)</li>
<li>Bug: variable 'mid' used before assignment in archiver.py (#459)</li>
<li>Enh: remove duplicated code in tools scripts by using elastic.py module (#456)</li>
<li>Enh: separate module to read config file </li>
<li>Bug: push-failures.py expects to find non-existent 'id' key in json file (#454)</li>
<li>Bug: ES 5.x does not support word-cloud (stats.lua) (#345)</li>
<li>Add version info to elastic module</li>
<li>Bug: setup.py fails with ES2 - fielddata (#453)</li>
<li>Bug: setup.py --default should not prompt for urlPrefix (#452)</li>
<li>Bug: copy-list.py does not work (#450)</li>
<li>Bug: unnecessary test (will always succeed) in copy-list.py (#451)</li>
<li>Bug: archiver ignores failures if dumponfail is not defined (#449)</li>
<li>Enh: make MboxoFactory optional (#442)</li>
<li>Bug: duplication of data in response from thread.lua (#440)</li>
<li>Bug: Indentation in mail content (leading white-space) not shown (#432)</li>
<li>Bug: does not make sense to allow empty domain name in LID (#434)</li>
<li>Bug: Inconsistent LID validation (#356)</li>
<li>Enh: option to reduce stats.lua output (#438)</li>
<li>Bug: Threading should take References header into account (#444)</li>
</ul>
<h2 id='changesin010'>CHANGES in 0.10:<a href='#changesin010' style='color: rgba(0,0,0,0);'>&para;</a></h2>
<ul>
<li>Bug: Use correct dependency order to fix OAuth login problem (#431)</li>
<li>Bug: HTTPS connections may fail with ES 6.x libraries (#425)</li>
<li>Enh: Support ES 6.x library (#424)</li>
<li>Enh: Optionally dump JSON documents to disk if push to ES fails (#423).</li>
<li>Bug: GUI can hide reply text when analysing quoted text (#421)</li>
<li>mbox.lua output filename does not match ISO standard (#420)</li>
<li>Added empty line quotes to JS compaction feature</li>
<li>Changed default theme to 'compact'</li>
<li>Added --dbprefix for setup.py for proxied ES databases</li>
<li>Added fielddata values to email subjects to fix word clouds on ES&gt;=5.x</li>
<li>Bug: MboxoReader needs to return all data for a read() call (#415)</li>
<li>Bug: import-mbox should not check database during a dry run (#413)</li>
<li>Archiver loses some message information (#402)</li>
<li>Mail parsing can change source spacing (#410)</li>
<li>Bug: use actual envelope header if present (#412)</li>
<li>Bug: stats.lua should use UTC for calculating year and month (#409)</li>
<li>Bug: atom.lua - should generate date in UTC, not local time (#408)</li>
<li>Bug: shorten links does not work with cluster ids (#406)</li>
<li>Drop lid from 'cluster' hash - it's already in the id (#400)</li>
<li>Enh: 'cluster' generator ids are not sufficiently unique (#398)</li>
<li>archiver/importer adds a Message-Id to mails if they don't have one (#403)</li>
<li>Fixed an issue with ID generation where an email body does not exist</li>
<li>Fixed an issue where favorites could contain null entries due to missing GC (#392)</li>
<li>Added sample configs for Pony Mail (#374)</li>
<li>Renamed ll.py to list-lists.py (#378)</li>
<li>ID generators have now been split into a separate library (generators.py)</li>
<li>more comprehensive ID generation mechanisms</li>
<li>private messages are now included in downloads if the user has access to them (#169, #108)</li>
<li>mbox export now generates valid From_ line (#190)</li>
<li>mbox export now escapes 'From ' lines in body text (#188)</li>
<li>stats.lua ignores negated words when building the word cloud (#277)</li>
<li>combine pminfo.lua aggregations for efficiency (#273)</li>
<li>various typos fixed and other tidyup</li>
<li>quicker to fetch only aggregation results where the hits are not needed (#271)</li>
<li>archiver and import-mbox create different mbox_source entries - drop spurious importer field (#266)</li>
<li>make it easier to test the archiver - --dry option (#264)</li>
<li>import-mbox dry run should exercise as much as possible of the code (#258)</li>
<li>archiver and import-mbox handle invalid encodings differently (#261)</li>
<li>archiver unconditionally ignores encoding errors (#260)</li>
<li>archiver does not allow for attachment which is not multipart (#257)</li>
<li>archiver drops empty attachments (#256)</li>
<li>archiver drops attachment with utf-8 encoded name (#255)</li>
<li>import-mbox.py and archiver.py create different source texts (#251)</li>
<li>import-mbox.py messages need the thread number (#248)</li>
<li>import-mbox.py does not identify which messages failed (#246)</li>
<li>edit-list.py does not process --obfuscate if it is used alone (#238)</li>
<li>edit-list.py does not honour --test with --desc (#237)</li>
<li>elastic.lua checkReturn() does not properly check return code (#236)</li>
<li>import-mbox.py keeps rechecking if the index exists (#233)</li>
<li>import-mbox.py allows invalid lid (#230)</li>
<li>import-mbox.py --project qualifier regex errors (#229)</li>
<li>properties missing from mappings in setup.py (#228)</li>
<li>setup.py does not create mbox mapping property 'cc' (#226)</li>
<li>setup.py does not create notifications/account mappings (#225)</li>
<li>archiver fails when adding entries to the notifications table (#223)</li>
<li>elastic.lua index function should not auto-generate ids (#222)</li>
<li>coffee script generation order seems to vary between OSes (#215)</li>
<li>display treats &gt;From as quoted text (#213)</li>
<li>import-mbox.py should be able to import individual files (#210)</li>
<li>import-mbox.py should not start more threads than there are files (#209)</li>
<li>No point creating an 'Other lists:' drop-down if it will only contain a single entry (#208)</li>
<li>combine.sh uses GNU-only sed extension -s (--separate); it's not needed (#187)</li>
<li>setup.py can overwrite existing config files (#185)</li>
<li>setup.py does not handle connection failure well (#184)</li>
<li>Other lists drop-down should be sorted by name (#183)</li>
<li>does not handle missing or empty subjects well (#182)</li>
<li>import-mbox.py does not report if List-Id is missing (#174)</li>
<li>mailinglists index should be created by setup.py or made truly optional (#164)</li>
<li>elastic.lua checkReturn should throw errors in the callers context (#150)</li>
<li>elastic.lua does not always check http return status (#145)</li>
<li>use of global variables in handle() methods (#141)</li>
<li>lib/elastic.lua: various bugs (#139)</li>
<li>user.getUser() overwrites login global variable; defines unused variable 'usr' (#138)</li>
<li>import-mbox.py does not handle protocol choice well (#135)</li>
<li>setup.py does not handle empty response to port number well (#133)</li>
<li>broken mail thread; attempted recovery causes unhandled error (#124)</li>
<li>https://lists.apache.org/list.html?dev@eagle.apache.org fails (#121)</li>
<li>get by message-id does not work (#88)</li>
<li>stored date uses locale-dependent conversion and is ambiguous (#86)</li>
<li>search strings not properly quoted. (#76)</li>
<li>pminfo.lua creates top100 sender information but it's not used (#282)</li>
<li>stats.lua could use single aggregate query to get first and last years (#276)</li>
<li>stats.lua can fail when creating top10 senders (#283)</li>
<li>ponymail.js/formatDate may show the wrong timezone (#285)</li>
<li>archiver.py fails when attachment name is not ASCII (#287)</li>
<li>emails with no body content are ignored (#109)</li>
<li>does not handle text/enriched mails (#289)</li>
<li>ll.py retrieves results but does not use them (#291)</li>
<li>lib/aaa.lua various bugs (#140)</li>
<li>lua modules should define local functions only (#294)</li>
<li>inconsistent rights checking (#267)</li>
<li>thread.lua fails to fetch rights when fetching private child of public parent (#296)</li>
<li>typo in all example aaa modules: xemail != exmail (#299)</li>
<li>lib/aaa.lua overwrites local customisations on updates (#292)</li>
<li>rights checking should be localised (#293)</li>
<li>pminfo.lua does some unnecessary work (#220)</li>
<li>stats.lua uses inconsistent email canonicalisation code (#300)</li>
<li>stats.lua - inconsistent output between slow_count = true/false (#301)</li>
<li>confusion of storageAvailable and localStorage in ponymail.js (#194)</li>
<li>unnecessary double-checking of window.sessionStorage in ponymail.js (#193)</li>
<li>lua scripts not using cross.contentType() compatibility function (#218)</li>
<li>code assumes that subject is always present in an e-mail (#149)</li>
<li>elastic.lua:getHeaders uses different sort field (#146)</li>
<li>redundant matching of same string (#117)</li>
<li>ponymail.js uses unsupported preferences.lua parameter (#165)</li>
<li>preferences.lua never fetches descriptions (#163)</li>
<li>api.html does not document all the stats.lua parameters (#115)</li>
<li>allow preferences to use non-default mail port (#303)</li>
<li>preferences.lua should not return list data if it was not requested (#305)</li>
<li>preferences.lua should not update the user account if the mail is not sent OK (#306)</li>
<li>alts.js does not check for errors when calling preferences.lua (#304)</li>
<li>An unauthorised private mail should be treated like a non-existent mail (#295)</li>
<li>Move common anonymizing code to utils (#308)</li>
<li>Move extractCanonEmail to utils</li>
<li>preferences does not properly remove nulls from account.credentials.altemail (#309)</li>
<li>manage e-mails can create multiple identical alternate addresses (#307)</li>
<li>elastic.get does not return if a document is not found but some callers overlook this (#137)</li>
<li>pcall() idiom to protect against elastic.lua exceptions is flawed (#162)</li>
<li>unhelpful error reporting for invalid Permalinks/Source links (#123)</li>
<li>import-mbox.py fails to unescape &gt;From lines (#212)</li>
<li>Updated Google+ API for logins</li>
<li>Fixed a redirect bug with oauth</li>
<li>Removed support for Mozilla Persona</li>
<li>elastic.scroll does not return nil sid when there are no more results (#315)</li>
<li>stats.lua should return firstMonth and lastMonth (#120)</li>
<li>many python scripts insist on Python 3.4 (#312)</li>
<li>config.hidePrivate should be dropped (#272)</li>
<li>limit filter is deprecated in ES 2.0; dropped in ES 5.0 (#318)</li>
<li>domain parameter is not used externally (#319)</li>
<li>pminfo.lua fetches and saves epoch but never uses it #320</li>
<li>pminfo.lua - no need to use scroll unless doc count &gt; 10000 (#321)</li>
<li>pminfo.lua - scroll/scan ignores sort order (#322)</li>
<li>flat view mode does not show first line of body (#198)</li>
<li>Fetch URLBase once in Javascript</li>
<li>absolute URLs must be prefixed with URLBase in JS files (#327)</li>
<li>cannot use absolute URLs in HTML pages (#328)</li>
<li>setup.py now prompts for shard and replica counts when creating the index (#313)</li>
<li>'hot topics' feature should use terms, not significant_terms (#329)</li>
<li>stats.lua - slow_count option is unnecessary (#323)</li>
<li>stats.lua updates senders array unnecessarily in statsOnly (quick) mode (#330)</li>
<li>stats.lua returns email time instead of os time in unixtime field (#331)</li>
<li>stats.lua - cache causes inconsistent output when quick is used (#118)</li>
<li>does not show mixed private/public lists unless logged in (#70)</li>
<li>inconsistent error reporting for invalid mailing lists (#112)</li>
<li>Always use Javascript conditional blocks (#333)</li>
<li>links in stats pane don't set up the correct date range (#106)</li>
<li>code should delete scroll id after use (#336)</li>
<li>ll.py - Make --count work with --pretty; show private message counts</li>
<li>DRY: move leapYear and end of month calculations to utils</li>
<li>indicate which months are outside the archive span for a list (#340)</li>
<li>default to medium ID generator (#343)</li>
<li>scroll/scan is not supported in ES 5.x (#344)</li>
<li>GUI does not report maxResult truncation correctly (#335)</li>
<li>ponymail.js creates/displays dates with no timezone - confusing (#286)</li>
<li>Make it clearer when you're not logged in. (#195)</li>
<li>list name not normalised when imported (#253)</li>
<li>GUI ignores date span in list.html URI if query is blank (#346)</li>
<li>search phrase dropped from list.html URI if date span is yyyy-mm (#347)</li>
<li>stats.lua first/last dates don't always agree with visible mails (#350)</li>
<li>Use constant for max list count instead of 500000 (#352)</li>
<li>Tighten wildcard searches to only search in the same domain level (#348)</li>
<li>useless conditional when fetching id parameter (#353)</li>
<li>ES 5.0 no longer supports the write consistency option for index(); archiver fails (#351)</li>
<li>Cookie should use httpOnly and Secure (#355)</li>
<li>Allow insecure cookie (config item intended for local testing only) (#355)</li>
<li>crash in import-mbox when list-id is missing and --lid is not provided (#358)</li>
<li>archiver traverses multi-part message parts twice (#359)</li>
<li>Add unsubscribe button (#362)</li>
<li>Bug: invalid style setting: overflow:hide =&gt; overflow:hidden (#364)</li>
<li>Bug: wordcloud.js logs to the console (#363)</li>
<li>Bug: source.lua does not specify the charset (#367)</li>
<li>Bug: archiver stores attachment binary data types with embedded newlines (#262)</li>
<li>Bug: may corrupt 8bit message source if it is not encoded in UTF-8 (#366)</li>
<li>Enh: make debug info optional (#369)</li>
<li>import-mbox.py: mailbox defaults to Create if file is not found (#370)</li>
<li>Bug: import --dedup does not cater for messages sent to multiple lists (#373)</li>
<li>Confusing parameter name (--rename) in copy-list.py (#207)</li>
<li>Fix base64 decoding of certain files (#384)</li>
</ul>
<div style="display: inline-block; background: #BBB; margin: -10px; padding: 10px;">
<h4><a id="disclaimer"></a>Disclaimer</h4>
<div style="width: 65%; float: left;">
<p style="line-height: 12pt;">
Apache Pony Mail (Incubating) is an effort undergoing incubation at
The Apache Software Foundation (ASF), sponsored by the <a href="https://incubator.apache.org">
Apache Incubator</a>. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure,
communications, and decision making process have stabilized in a
manner consistent with other successful ASF projects. While
incubation status is not necessarily a reflection of the
completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.
</p>
</div>
<div style="width: 20%; float: left; padding-top: 16px; margin-left: -8px;">
<a href="https://incubator.apache.org"><img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png"/></a>
</div>
<div style="width: 15%; float: left; line-height: 15px; padding-left: 22px;">
<a class="item" target="_blank" href="https://incubator.apache.org/">Apache Incubator</a><br/>
<a class="item" target="_blank" href="https://www.apache.org/">About the ASF<span></span></a><br/>
<a class="item" target="_blank" href="https://www.apache.org/foundation/policies/conduct.html">Code of Conduct<span></span></a><br/>
<a class="item" target="_blank" href="https://www.apache.org/foundation/thanks.html">Thanks<span></span></a><br/>
<a class="item" target="_blank" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor<span></span></a><br/>
<a class="item" target="_blank" href="https://www.apache.org/security/">Security<span></span></a><br/>
<a class="item" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0">License<span></span></a><br/>
</div>
</div>
</body></html>