summarylogtreecommitdiffstats
path: root/CHANGELOG
blob: 5aaa7217fca31f3aed1d45d0c45b0570765c0d3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
Version 6.01
TODO
    - fixes of reported issues on github up to #5

Version 6.00
02 May 2020
    - Make code compatible to Python 3 (losing some backward compatibility)

Version 5.14
19 August 2019
    -remove socket setblocking() calls which should be no longer needed,
    and which may have caused hangups.  Thanks: Viacheslav Chimishuk.
    -correct version number string in error message.  Thanks: Piet van
    Oostrum.

Version 5.13
22 February 2019
    -second attempt at fixing SNI change with Python < 2.7.  Thanks: "Cimbal".

Version 5.12
22 February 2019
    -bugfix: the SNI change broke something else with Python 2.6 and earlier;
    fixed.  Thanks: "Cimbal".

Version 5.11
13 February 2019
    -bugfix: the SNI change did not work correctly with Python < 2.7.13;
    should be fixed now.  Thanks: Scott Robbins.

Version 5.10
12 February 2019
    -experimental: when SSL SNI support is present in the underlying Python
    (and OpenSSL), send SNI by default in the SSL setup.  This should work
    around Gmail's brokenness with TLSv.1.3 connections when SNI is not sent.

Version 5.9
    -documentation-only update; add note with workaround for Gmail SSL
    connections with OpenSSL 1.1.1 and later.
    -update copyright dates.

Version 5.8
9 November 2018
    -fix problem handling IMAP errors introduced in 5.7.  Thanks: 
    Andreas Reuleaux.

Version 5.7
30 October 2018
    -when users specify an SSL version that no longer exists in the Python
    ssl module, do not result in an unhandled exception.  Thanks: "nandre".
    -catch IMAP UNAVAILABLE temporary error during login.  Thanks:
    Dario Corti.

Version 5.6
02 April 2018
    -fix references to version 4 in README.  Thanks: Daniel Kahn Gillmor.
    -add Gmail-specific XOAUTH2 login support for IMAP.  Thanks: Stefan Krah.

Version 5.5
18 December 2017
    -feature request: added record_mailbox configuration parameter, to allow
    turning off the header getmail adds with this information.
    Thanks: Daniel Kahn Gillmor, Osamu Aoki,  Josh Triplett.

Version 5.4
6 October 2017
    -bugfix: fix another error in logging an error condition.  Thanks: "ng0".

Version 5.3
5 October 2017
    -bugfix: another case where an error condition resulted in getmail not
    displaying the correct message.  Thanks: "ng0".

Version 5.2
4 October 2017
    -bugfix: disconnection during IMAP IDLE could result in an error message
    rather than silently exiting.  Thanks: David Gray.

Version 5.1
15 July 2017
    -bugfix: if password_command parameter was used with a non-existent program,
    getmail would error out during the handling of that condition and not report
    the problem correctly.

Version 5.0
15 July 2017
    -new release numbering scheme; previous version numbers were just getting
    too high.
    -catch and ignore/exit cleanly after reset connection in IMAP IDLE mode.
    Thanks:  Stephan Schulz.
    -allow specifying an expected SSL certificate hostname, for when the
    server's certificate does not match the domain name used to connect to
    it.  Thanks:  "Andre".
    -fix error message not actually giving the header field name incorrectly
    specified as containing the envelope recipient address.  Thanks:  Hardy 
    Braunsdorf.
    -add new password_command configuration parameter for retrievers, allowing
    getmail to retrieve the account password from any arbitrary external 
    command.  Suggestion:  "ng0".
    
Version 4.54.0
19 February 2017
    -fix error running getmail_fetch introduced in 4.53.0.  Thanks: "fsckd"
    of Arch Linux.

Version 4.53.0
15 January 2017
    -fix plaintext version of docs not generated correctly.  Thanks: Elijah.
    -fix `getmail --fingerprint` not logging server TLS fingerprint correctly
    with SimplePOP3SSLRetriever.  Thanks: Gabriel Kihlman.

Version 4.52.0
22 October 2016
    -add `ignore_header_shrinkage` parameter to Filter_external for users who
    know it is normal for their particular filter to result in a smaller message
    header than the source message, for example when the filter encapsulates
    the original message in a simpler wrapper message.  Thanks: "RW", 
    Tristan Miller, Francesco Ariis.
    -EXPERIMENTAL: when deleting a message from an IMAP mailbox, set the \Seen 
    flag in addition to the the \Deleted flag.  This apparently prevents 
    the ever-innovatively-broken MSExchange from sending a spurious incorrect 
    disposition-notification message to the sender of the message.  I do not 
    know if this will cause problems with other broken IMAP server 
    implementations; please send a report to the getmail-user's mailing list if
    you see odd behaviour with this change.  Thanks: John Hein.
    -enable socket timeouts for IMAP SSL classes by default.  They were disabled
    in the code because they were incompatible with SSL in older versions of 
    Python.  If you see problems with Python 2.6 or 2.7 now, please let me know.
    
Version 4.51.0
11 September 2016
    -fix exception when using MDA_External and an IMAP mailbox whose name 
    contains non-ASCII chars.  Thanks:  "drtmk".

Version 4.50.0
11 July 2016
    -maybe fix handling of OSX keychain passwords containing double-quote chars.
    Thanks: Teddy Wing, Patrick Asselman.
    -fix getmail erroring out on IMAP folders containing i18n chars.  
    Thanks: Jan Stühler.

    Version 4.49.0
13 January 2016
    -make IMAP class only issue EXPUNGE command on mailbox close if we have
    actually deleted any messages from the open mailbox.  Makes use of read-only
    IMAP folders possible.  Thanks: Zoltan Padrah.

Version 4.48.0
31 May 2015
    -work around brain-damaged change in Python's poplib which causes 
   message retrieval errors if any line of a message has more than
   2048 characters in it.
    -restore link to moved Marc mailing list archive.  Thanks:  
    David J. Weller-Fahy.

Version 4.47.0
25 February 2015
    -try to work around pathological breakage in one random POP server 
    implementation.  Thanks: Michael Thomas Kockmeyer.
    -remove dead marc.theaimsgroup.com list archive from docs.  Thanks:
    Miroslav Rovis.
    -bugfix: if you combined IMAP IDLE mode with delete_after, getmail would, 
    after remaining connected to the server for the number of days configured,
    begin deleting messages immediately after retrieval instead of after the
    configured delay.  Now fixed.  Thanks: Johannes Weißl.

Version 4.46.0
6 April 2014
    -fix --idle checking Python version incorrectly, resulting in incorrect 
    warning about running with Python < 2.5.  Thanks: "Voytek", Krzysztof 
    Warzecha.
    -add missing support for SSL certificate checking in POP3 which broke
    POP retrieval in v4.45.0.  Requires Python 2.6 or newer.  Thanks: "mancha".

Version 4.45.0
30 March 2014
    -perform hostname-vs-certificate matching of SSL certificate if validating
    the certifcate.  Thanks: "mancha".
    -fix missing plaintext versions of documentation.

Version 4.44.0
22 March 2014
    -add extended SSL options for IMAP retrievers, allowing certificate 
    verification and other features.  Thanks: Steven Murdoch.
    -fix missing plaintext versions of documentation.  Thanks: Osamu Aoki.
    -fix "Header instance has no attribute 'strip'" error which cropped up
    in some configurations.  Thanks: Krzysztof Warzecha.

Version 4.43.0
25 August 2013
    -add IMAP IDLE support.  Thanks: Jon Gjengset.

Version 4.42.0
3 August 2013
    -fix problem with non-ascii characters in newly-added message header fields
    with output from Filter_classifier.  Thanks: "Gour".

Version 4.41.0
26 May 2013
    -messages retrieved with POP could have a blank trailing line removed when
    delivered; fixed.  Thanks: Christoph Mitterer, Krzysztof Warzecha.
    -fix an ImportError when IMAP retriever used with getmail under Python 2.4.

Version 4.40.3
10 May 2013
    -increase system recursion limit when run with Python 2.3, to prevent
    recursion errors in parsing some pathologically complex MIME emails.
    Thanks: Kenneth Pronovici.

Version 4.40.2
8 May 2013
    -fix a backwards incompatibility with Python 2.3 and 2.4 introduced in
    getmail 4.38.0.  Thanks: Massimo Zambelli, Krzysztof Warzecha.

Version 4.40.1
22 April 2013
    -again change protocol codes passed to OSX, as they're not only reserved
    codes, but also case-sensitive.  Use the ones an OSX user reports work
    properly.  Thanks: Tim Gray.

Version 4.40.0
21 April 2013
    -convert SIGTERM to SIGINT so getmail can cleanup and exit normally if 
    killed with a default signal.  Thanks: Carl Lei.
    -fix change which resulted in passing full protocol name to OSX keyring
    program, which can't handle it (restricted to 4-character code).
    Thanks: Tim Gray.

Version 4.39.1
10 March 2013
    -fix a bug that could crop up when retrieving mail via IMAP from Gmail, and
    the Gmail servers provided weird data in their header extensions.
    Thanks: Krzysztof Warzecha.

Version 4.39.0
22 February 2013
    -fix an oldmail filename issue that occurred with certain non-ASCII 
    characters in an IMAP mailbox name.  Thanks: Michael Kockmeyer.

Version 4.38.0
16 February 2013
    -fix retrieving mail from an IMAP mailbox with non-ASCII characters in its
    name causing difficult-to-understand unicode errors during delivery.
    Thanks: "fsLeg", Krzysztof Warzecha.
    
Version 4.37.0
27 January 2013
    -handle IMAP servers which include "/" in message IDs better, so those 
    messages aren't always thought to be new.  Thanks: Bradley Rintoul.
    -record (IMAP) mailbox retrieved from in X-getmail-retrieved-from-mailbox:
    header field, and make it available as %(mailbox) substitution in 
    MDA_external arguments.  Thanks: Les Barstow.
    -add delete_bigger_than option to allow removal of large messages after
    retrieval, even if not deleting messages otherwise.  Thanks: Jan Vereecke.

Version 4.36.0
15 December 2012
    -add support for retrieving POP/IMAP passwords from, and storing them to,
    the Gnome keyring.  Thanks: Krzysztof Warzecha, Scott Hepler.

Version 4.35.0
24 October 2012
    -fix From_ quoting in mbox delivery; use of the Python stdlib function 
    meant getmail was incorrectly using mboxo-style quoting instead of
    mboxrd quoting, probably since early in the v4 series.  
    Thanks: Christoph Mitterer.

Version 4.34.0
8 September 2012
    -retrieve Gmail metadata (labels, thread ID, message ID) via IMAP extension
    and record it in new message headers.  Thanks: Krzysztof Warzecha.

Version 4.33.0
7 August 2012
    -allow normal exit on interrupt (ctrl-c) to allow the user to abort message
    retrieval while still remembering already-retrieved messages as successfully
    delivered.  You may get a weird error message after you abort, since the
    server may be in the middle of delivering another message to getmail at the
    time.  Thanks: Krzysztof Warzecha.

Version 4.32.0
6 July 2012
    -prevent some nuisance stack traces if getmail cannot connect to the POP/
    IMAP server correctly.  Thanks: Daniel Dumke.
    -restore use_peek IMAP retriever parameter which accidentally got removed
    in 4.30.  Thanks: Andreas Amann.

Version 4.31.0
5 July 2012
    -improved backwards compatibility with pre-v.4.22.0 oldmail files, so IMAP
    mail is not re-retrieved if you upgrade from a 4.22 or earlier to this one; 
    no user action necessary.  Thanks: Osamu Aoki, Tim van der Molen.

Version 4.30.2
27 June 2012
    -fix a nuisance stack trace that would be dumped if a connection failed in
    particular states.  Thanks: Gary Schmidt.

Version 4.30.1
21 June 2012
    -silence a nuisance deprecation warning about the sets module when running
    with Python >= 2.5 which was reintroduced in 4.29.0.  Thanks: Stephan 
    Schulz.

Version 4.30.0
21 June 2012
    -fix breakage introduced in 4.29.0 where BrokenUIDLPOP3Retriever would fail
    with a TypeError at logout time.  Thanks: Scott Robbins, Stephan Schulz.
    -fix breakage introduced in 4.29.0 where deleted mail was not being expunged
    from the last (or only) folder retrieved from in an IMAP session.  Thanks: 
    Paul Howarth.

Version 4.29.0
19 June 2012
    -update old contact information for Free Software Foundation.  Thanks: Ricky
    Zhou.
    -fix incorrect character encoding in plaintext documentation.  Thanks: Ricky
    Zhou.
    -ensure getmail exits nonzero if a server refuses login due to a credential
    problem.  Thanks: Stephan Schulz.

Version 4.28.0
26 May 2012
    -ensure getmail exits nonzero if various error conditions (like POP/IMAP
    authentication failure) occur.  Thanks: Ryan J., Stephan Schulz.
    -python versions prior to 2.5.0 contain a bug when dealing with read-only
    IMAP mailboxes.  Monkey-patch imaplib when running with Python<2.5.0.
    Thanks: Les Barstow.
    -do IMAP modified-utf7 conversion of mailbox names containing non-ASCII
    characters.  Thanks: A. Lapraitis, Randall Mason.
    -add special ALL value for retrieving mail from all selectable IMAP 
    mailboxes in the account.
    -change IMAP retrieval strategy to retrieve all messages from a mailbox,
    then move on to the next mailbox, etc.  Should result in increased speed,
    but if you set `max_messages_per_session` too low, this could result in
    later mailboxes not being retrieved from.

Version 4.27.0
20 May 2012
    -make use of IMAP BODY.PEEK configurable; set the IMAP retriever parameter 
    `use_peek` to False to disable use of PEEK to get getmail's historical IMAP 
    behaviour.

Version 4.26.0
14 April 2012
    -switch to using BODY.PEEK in IMAP retrieval; I no longer see problems with
    this feature in my testing.  If users experience incompatibility with any
    IMAP servers where 4.25.0 worked, please let me know.

Version 4.25.0
1 February 2012
    -add support for storing POP/IMAP password in OSX keychain.  Thanks: Adam 
    Lazur.

Version 4.24.0
11 December 2011
    -add an explicit expunge when closing an IMAP mailbox, for servers that 
    incorrectly do not do this when the mailbox is closed.  Thanks: Nicolas 
    Pomarède.
    -fix incorrect section reference for `mailboxes` parameter in documentation.
    Thanks: Ross Boylan.
    -fix getmail_fetch broken in 4.21.0.  Thanks: Chris Donoghue.

Version 4.23.0
20 November 2011

    -fix race if new message shows up in POP3 mailbox between running the UIDL 
    and LIST commands.  Thanks: Roland Koebler, Osamu Aoki.

Version 4.22.2
12 November 2011

  -fix an error when logging a bad response to an IMAP SELECT command, 
  introduced in 4.21.0.  Thanks: "kureshii".

Version 4.22.1
30 September 2011

  -fix BrokenUIDLPOP3Retriever breakage from 4.21.0.  Thanks: Scott Robbins, 
  "hgolden".
  
Version 4.22.0
25 September 2011

  -when retriever supports multiple mail folders (IMAP), store oldmail data for
  each folder separately, preventing problems in some cases when using multiple
  rc files with the same account.  Thanks: Jesse Schobben.

Version 4.21.0
23 September 2011

  -automatically open IMAP folders read-only if neither the delete nor 
  delete_after options are in use; necessary to access chatlogs via Gmail.
  Thanks: Daniel M. Drucker.
  -avoid sorting msgids on each retrieval, reducing overhead when dealing with
  folders containing thousands of messages.  Thanks: Daniel Koukola.

Version 4.20.4
16 July 2011
  -include more info from server response in error message when IMAP command
  errors out.  Thanks: W. Martin Borgert, Osamu Aoki.
  -switch to using Parser instead of HeaderParser to correct illegal formatting
  bogosities in the body parts of incoming messages.  Thanks: Lauri Alanko.

Version 4.20.3
30 May 2011
  -fix logging errors in error paths.  Thanks: Visa Putkinen.

Version 4.20.2
9 Apr 2011
  -further changes to the Received: header construction to handle IPv6 better.
  Thanks: Frédéric Perrin.

Version 4.20.1
7 Apr 2011
  -ensure correct remote address and port is included in the Received: trace
  headers generated by getmail.  Previously the first address found for the 
  server was used even if another address was actually used to connect to the
  server.  Thanks: Frédéric Perrin.
  -add workaround for Python issue http://bugs.python.org/issue1389051 which
  affects Python < 2.5.3, causing message retrieval of large messages from IMAP4
  SSL servers to consume pathologically large amounts of memory.  
  Thanks: Bill Janssen.

Version 4.20.0
29 June 2010
  -fix crap code from bad svn merge that slipped into 4.18.0, triggering 
  exceptions in MDA_external configs.  Thanks: Paul Howarth.

Version 4.19.0
29 June 2010
  -fix missing import introduced in 4.18.0.  Thanks: Paul Howarth.

Version 4.18.0
26 June 2010
  -update broken link in FAQ.  Thanks: Stefan Kangas.
  -strip a few extra problematic (on non-Unix systems) characters when 
  generating oldmail filenames; backslash was requested by Andy Ross.
  If upgrading and your current oldmail file contains any of these
  characters: 
      \ ; < > | 
  ... then rename it, replacing runs of one or more of those characters with
  a single "-".
  -improve clarity of message logged by getmail when an external program exits
  0 but getmail considers it failed because it wrote to stderr.  Thanks:
  Chris Dennis.

Version 4.17.0
30 April 2010
  -change to how getmail counts messages in an IMAP mailbox; prevents problems
  where getmail would only see the first 500 messages in a mailbox with some
  IMAP servers that return oddball responses to SELECT.  Thanks: David Damerell.

Version 4.16.0
5 January 2010
  -additional fix for IMAP server that offers a message it then fails to return,
  to allow getmail to continue with the next message.  Thanks: Yaw Anokwa.

Version 4.15.0
2 December 2009
  -default port for MultidropIMAPSSLRetriever was incorrect.  Thanks: David 
  Lehn.

Version 4.14.0
23 November 2009
  -handle additional cases where IMAP (and for good measure, POP3) server is
  broken and offers a message that it then fails to return.  Thanks: Eric 
  Waguespack.

Version 4.13.0
13 October 2009
  -fix new log message not having trailing newline.Thanks: Morty Abzug.

Version 4.12.0
7 October 2009
  -handle MSExchange failure to deliver message gracefully.  Thanks: Morty 
  Abzug.
  -documentation updates regarding Python IMAP memory bug.  Thanks: "spig".
  -fix bad tag in documentation.

Version 4.11.0
8 August 2009
  -fix --dump not generating any output for rcfiles containing "verbose = 0"
  option.  Thanks: Morty Abzug.
  -fix copy-and-paste error in documentation of MultiSorter destination.
  Thanks: Roland Hill.

Version 4.10.0
6 August 2009
  -add "message_log_verbose" option, defaulting to false.  If true, the
  message_log file (and syslog, if used) will contain a little more information
  than the default of just messages retrieved.  Thanks: Matthias Andree,
  Gregory Morozov.

Version 4.9.2
15 July 2009
  -use tempfile module function instead of os.tmpfile() so getmail obeys TMPDIR
  and similar environment variables.  Thanks: Stefan Bähring.
  -fix encoding of CHANGELOG to utf-8.

Version 4.9.1
1 June 2009

  -if oldmail file is corrupted on disk (by system crash, perhaps), handle it
  gracefully.  Some lines may be lost (and messages therefore re-retrieved),
  but operation will continue, with the corrupt lines logged.  Thanks:  Domen
  Puncer.

Version 4.9.0
5 April 2009

  -add Kerberos authentication support to IMAP retriever classes.  Thanks:
  Guido Günther, Uli M.
  -clarify documentation regarding MDA_external.  Thanks: AJ Weber.
  -eliminate deprecation warning for sets module with Python 2.6 by using a
  compatibility wrapper module.

Version 4.8.4
26 September 2008

  -Add missing fsync() in updatefile close method to ensure data actually
  hits disk before the rename takes place, to make writing of the oldmail
  file more resilient to system crashes.  Thanks: Domen Puncer.

Version 4.8.3
11 August 2008

  -Improve information sent to logfile about messages not retrieved.
  Thanks: Scott.

Version 4.8.2
2 August 2008

  -for IMAP retrievers, keep message state around for 30 days even if the
  corresponding message isn't seen.  This allows users to have multiple rc
  files with different IMAP folders to retrieve from without losing their
  "seen" mail state for the folders they're not currently retrieving from.
  You no longer need to work around this with different getmail state
  directories.  Thanks: ?.

Version 4.8.1
26 March 2008

  -fix use of Python 2.4 set builtin in 4.8.0 preventing getmail from running
  on Python 2.3.x.  Thanks: Björn Stenberg.
  -fix the RPM spec file not being included in the getmail distribution.

Version 4.8.0
19 February 2008
  -better diagnostic when user invalidly supplies timeout configuration
  parametmer for an IMAP-SSL retriever.  Thanks: Dennis S.
  -code cleanups

Version 4.7.8
5 February 2008

  -explicitly close current IMAP mailbox when selecting a new one, so all
  servers expunge deleted mail.  Thanks: Josh Triplett.
  -include experimental spec file for creating RPM with rpmbuild.  Thanks:
  Dag Wieers, Rob Loos, Dries Verachtert.

Version 4.7.7
8 November 2007

  -convert changelog to utf-8 encoding.
  -update email addresses, etc.  Domain for mailing lists has changed to
  lists.pyropus.ca.
  -add FAQ about memory errors on OS X.  Thanks: Andres Gasson.
  -drop log message level for stderr output of destination if ignore_stderr is
  set, just like for filter.  Thanks: Jeremy Chadwick.

Version 4.7.6
8 August 2007

  -fix exception when getmail is trying to report a POP3 server that
  completely missed generating a UIDL token for a message.
  Thanks: Hans Lammerts.

Version 4.7.5
6 June 2007

  -make updatefile honour symlinks, so users can alias one server's oldmail
  state file to another (for split-horizon DNS and other strange
  configurations).  Thanks: Scott Hepler.

Version 4.7.4
24 April 2007

  -explicitly watch for broken POP3 servers that return a blank UIDL value
  (not permitted by the POP3 protocol) and print a fatal error message.
  Thanks: Florian Hackenberger and Cameron Rangeley.

Version 4.7.3
18 March 2007

  -fix wrong bytecount displayed in summary at end of run.  Thanks: Andreas
  Jung.

Version 4.7.2
20 February 2007

  -add ignore_stderr option to filters, copying same from MDA_external
  destination.  Thanks: Vittorio Beggi.

Version 4.7.1
2 February 2007

  -add max_bytes_per_session option.  Thanks: Robert Spencer.
  -documentation additions.

Version 4.7.0
24 January 2007

  -make Mboxrd lock type configurable (lockf or flock). Change default
  to lockf.  Thanks: Norman Carver.

Version 4.6.7
3 January 2007

  -better handling for some fatal violations of POP/IMAP protocols.
  Thanks: Paul ?.
  -formatting cleanups.

Version 4.6.6
12 December 2006

  -add ignore_stderr option to MDA_external destination.  Thanks: Daniel
  Burrows.
  -documentation cleanups.

Version 4.6.5
20 October 2006

  -disable debug logging message which would show up in messages if --trace was
  used and the message was passed through an external filter.  Thanks:
  Christian Bruemmer.
  -add additional sanity checks to ensure a recent-enough Python is used;
  trying to run getmail 4 with Python 2.2 would throw an exception.
  Thanks: fakhri ?.

Version 4.6.4
28 September 2006

  -add FAQ about BrokenUIDLPOP3 retrievers.
  -add better diagnostics for missing/invalid/unwritable state/data
  directory.  Thanks: Christian Authmann.

Version 4.6.3
22 June 2006

  -fix regression: spurious errors thrown when required multidrop retriever
  parameter "envelope_recipient" not present in getmailrc file.
  Thanks: Elliot Schlegelmilch.
  -fix regression: getmail_fetch no longer properly supported external MDAs
  because of problems parsing the arguments to them.  Thanks: ?.
  -change getmail's handling of regular expressions in the "locals" parameter
  of MultiSorter destination to allow it to handle backslashes correctly.
  Unfortunately this means complicating the configuration syntax slightly.
  Thanks: Tim van der Molen.
  -update filters to use new configuration code.  Remove obsolete code.

Version 4.6.2
8 June 2006

  -fix regression introduced in 4.6.0 where atime on mbox files would get
  updated (i.e. not set back), making it difficult for other programs to
  tell if there was new mail or not without actually opening the mbox.
  Thanks: Tim van der Molen.

Version 4.6.1
31 May 2006

  -fix attribute deletion error with Filter_classifier when strip_delivered_to
  is set.  Thanks: Darren Stevens.
  -do not consider qmail-local writing to stderr a delivery error.
  Thanks: Darren Stevens.

Version 4.6.0
5 April 2006

  -clean up logger API.
  -refactor configuration mechanism to use classes with embedded logic,
  rather than simply dictionaries.

Version 4.5.4
14 February 2006

  -added Maildir "filemode" parameter.  Thanks:  Martin Haag.

Version 4.5.3
8 February 2006

  -keyfile and certfile parameters to SSL retrievers are now expanded for
  leading "~/" and "~username/" as well as environment variables, just like
  other path parameters.  Thanks:  Fredrik Steen.

Version 4.5.2
7 February 2006

  -fix IMAP bug where no mail was retrieved introduced in 4.5.0.  Thanks:
  Scott Robbins.

Version 4.5.1
3 February 2006

  -fix accidental use of sorted() builtin only present in Python 2.4 and up.
  Thanks:  Jürgen Nagel.

Version 4.5.0
1 February 2006

  -add delete_dup_msgids option to non-multidrop POP3 retrievers.
  Thanks: Matthias Andree.
  -suppress stack trace in getmail_fetch error message when configuration error
  detected.  Thanks: Dave Jarvis.
  -documentation updates.
  -build and development environment changes.  The plaintext versions of the
  documentation are now generated with links instead of lynx.
  -explicitly log the reason for not retrieving a message (seen or oversized).
  Thanks: Payal Rathod.

Version 4.4.4
3 January 2006

  -improve parsing of flags in IMAP responses.  Thanks: Gareth McCaughan.

Version 4.4.3
1 December 2005

  -fix harmless copy and paste error in IMAPRetrieverBase class.  Thanks: Henry
  Miller.

Version 4.4.2
13 November 2005

  -fix logging import in corrupt messages with Python 2.3.  Thanks: Marco Ferra.

Version 4.4.1
10 November 2005

  -work around bug in Python which meant POP3-over-SSL with Python >= 2.4
  could "hang" (it's exactly the same bug that affected getmail's initial
  IMAP-over-SSL code).

Version 4.4.0
9 November 2005

  -add new POP3-over-SSL initialization class, which is automatically used
  when Python 2.4 or newer is in use.  This reduces the overhead involved
  in retrieving messages from a POP3SSL server (reduces systime about 35%,
  user time about 50%, wall time 10-30%).  Thanks: Jan Vereecke.
  -add getmail_fetch configuration-less commandline POP retriever, perfect
  for scripting use.  Development of getmail_fetch was sponsored by
  Texas Communications.
  -future proofing: eliminate relative imports within getmailcore package.

Version 4.3.14
2 November 2005

  -Fix copy and paste error that caused BrokenUIDLPOP3SSLRetriever to default
  to port 110.  Thanks: Daniel Burrows via Fredrik Steen.

Version 4.3.13
15 October 2005

  -add BrokenUIDLPOP3SSLRetriever as SSL version of BrokenUIDLPOP3Retriever,
  based on an idea by a user of the Debian package.  Thanks: Daniel Burrows,
  Fredrik Steen.

Version 4.3.12
13 October 2005

  -remove deprecated "strict" argument from message/header parsing calls.
  While it was possible to suppress the warning that resulted when using
  Python 2.4,  it appears many getmail users couldn't bother to do that
  and complained to me instead.

Version 4.3.11
16 June 2005

  -getmail could previously record an envelope return path header of "<<>>".
  Fixed.  Thanks: Fredrik Steen.

Version 4.3.10
19 May 2005

  -bugfix for missing import.  Thanks: Matthias Andree.

Version 4.3.9
18 May 2005

  -for multidrop retrievers, change the way the envelope recipient header
  field is parsed, to prevent odd values from being interpreted as multiple
  addresses when they look like an 822-style address group.  Thanks: "aal".
  -try to avoid parsing message bodies, in case they're corrupt or invalid.
  Thanks: Michael Gold.

Version 4.3.8
6 May 2005

  -change (again) handling of deleted messages vs. connection that dies.
  Inability to send QUIT to POP3 server should be less problematic now.
  -improve housekeeping of old message state file.  Thanks: Thomas Schwinge.

Version 4.3.7
1 May 2005

  -add error message for missing mboxrd file.  Thanks: Marco Ferra.
  -change handling of connection that dies vs. deleted messages.
  Thanks: Thomas Schwinge.

Version 4.3.6
8 April 2005

  -broke BrokenUIDLPOP3Retriever when I added the forget_deleted parameter
  to the retrievers base class; now fixed.  Thanks: Georg Neis.

Version 4.3.5
3 April 2005

  -make getmail less conservative about remembering messages as already-seen
  when unrelated errors occur after successfully delivering them.
  Thanks: Thomas Schwinge.

Version 4.3.4
14 March 2005

  -documentation changes; getmail v4 cannot run natively on Windows.  Use
  Cygwin if you must run on a Windows platform; this works.
  -remove some Windows-specific code.

Version 4.3.3
19 February 2005

  -previously, for safety, getmail would re-retrieve messages after a session
  that encountered errors.  However, getmail had enough information to safely
  remember those messages that had been successfully delivered.  This behaviour
  has been changed, to avoid delivering duplicate messages where it isn't
  necessary.  Thanks: Thomas Schwinge.
  -in output/log files, getmailrc files are now specified only by filename,
  instead of by complete paths.  This will prevent some overly-long output
  lines.
  -add Windows versions of functions to lock/unlock files, so mbox delivery
  can be used on Windows.  Thanks: Felix Schwarz.

Version 4.3.2
5 February 2005

  -previously, if an SSL POP3 or IMAP server abruptly closed the connection
  before getmail could finish logging in, getmail would exit instead of
  proceeding to the next configured mail account.  Fixed.  Thanks: Matthias
  Andree, Frank Benkstein, Thomas Schwinge.
  -eliminate duplicate Return-Path: header fields.  Thanks: Angles Puglisi.

Version 4.3.1
18 January 2005

  -some IMAP errors would cause getmail to raise an exception, instead of
  gracefully proceeding with the next configured mail account.  Fixed.
  Thanks: Matthias Andree.

Version 4.3.0
10 January 2005

  -add BrokenUIDLPOP3Retriever class to support servers that do not implement
  the UIDL command, or which fail to uniquely identify messages using it.

Version 4.2.6
2 January 2005

  -add new error message and documentation for POP3 servers that cannot
  uniquely identify messages in a mailbox.  Thanks: Thomas Schwinge.

Version 4.2.5
8 December 2004

  -fix typo in getmailcore/exceptions.py that would raise a NameError
  exception in certain rare cases.  Thanks: Gour ?.

Version 4.2.4
22 November 2004

  -one type of filter error would cause getmail to skip to the next configured
  mail account, rather than simply proceeding to the next message from the
  same account.  Fixed.  Thanks: Adrien Beau.
  -documentation updates.

Version 4.2.3
18 November 2004

  -documentation updates.
  -getmailrc examples file updated.  Thanks: Scott Robbins.
  -clarify error message when user insecurely tries to deliver mail as GID 0.

Version 4.2.2
11 October 2004

  -in child delivery processes, change real as well as effective uid/gid.
  Thanks: David Watson.
  -handle corrupted oldmail file better.  Thanks: Matthias Andree.

Version 4.2.1
8 October 2004

  -set message attributes on corrupt container objects to prevent problems
  with destinations that expect multidrop-retrieved messages.
  Thanks: Harry Wearne.
  -move tests for existence of file from mbox destination initialization
  to delivery method, and change error from configuration to delivery error.
  Thanks: David Watson.

Version 4.2.0
18 September 2004

  -SECURITY: previous versions of getmail contain a security vulnerability.
  A local attacker with a shell account could exploit a race condition (or a
  similar symlink attack) to cause getmail to create or overwrite files in a
  directory of the local user's choosing if the system administrator ran getmail
  as root and delivered messages to a maildir or mbox file under the control of
  the attacker, resulting in a local root exploit.  Fixed in versions 4.2.0
  and 3.2.5.
  This vulnerability is not exploitable if the administrator does not deliver
  mail to the maildirs/mbox files of untrusted local users, or if getmail is
  configured to use an external unprivileged MDA.  This vulnerability is
  not remotely exploitable.
  Thanks: David Watson.  My gratitude to David for his work on finding and
  analyzing this problem.
  -Now, on Unix-like systems when run as root, getmail forks a child
  process and drops privileges before delivering to maildirs or mbox files.
  getmail will absolutely refuse to deliver to such destinations as root;
  the uid to switch to must be configured in the getmailrc file.
  -revert behaviour regarding delivery to non-existent mbox files.  Versions
  4.0.0 through 4.1.5 would create the mbox file if it did not exist; in
  versions 4.2.0 and up, getmail reverts to the v.3 behaviour of refusing
  to do so.

Version 4.1.5
13 September 2004

  -getmail would not delete messages from the server if it was configured not
  to retrieve them and the delete_after directive was not in use (i.e. user
  normally left messages on server but occasionally wanted to force-delete
  them).  Fixed.  Thanks:  Frankye Fattarelli.

Version 4.1.4
1 September 2004

  -change failure of a message filter to produce at least as many mail headers
  as it was provided from a non-fatal error to warning.  If your filter strips
  headers, getmail will now warn you about it, but will not consider it an
  error.
  -documentation additions.

Version 4.1.3
31 August 2004

  -enhance warning diagnostics about non-accessible or non-writable maildirs.
  -change method of determining name of local host; only fall back to
  getfqdn() if the result of gethostname() does not contain a dot.
  -documentation enhancements.

Version 4.1.2
28 August 2004

  -dumping config would raise an exception since 4.1.0; fixed.
  Thanks: Ilya Krel.

Version 4.1.1
27 August 2004

  -getmail raised an exception after processing all accounts, while printing
  a summary, if verbose was set to 2.  Fixed.  Thanks:  Matthias Andree.

Version 4.1.0
24 August 2004

  -biggest change is multiple verbosity levels.  To support this from rc file,
  the verbose parameter had to change from a boolean to an integer.  Update
  your getmail rc files:  for quiet, set verbose to 0.  For more output,
  set it to 1 or 2.  2 includes info about messages not retrieved, etc.
  -add rc filename to error messages
  -change fix from 4.0.11 for email module raising exception during .flatten().
  Thanks:  Jürgen Nagel.
  -some types of SSL error could cause getmail to exit instead of
  continuing to the next mail account; fixed.  Thanks:  Matthias Andree.

Version 4.0.13
19 August 2004

  -unrecognized parameters could trigger a traceback instead of a warning.
  Fixed.  Thanks: Frankye Fattarelli.

Version 4.0.12
19 August 2004

  -forgot to add the new Message attribute (from 4.0.11) to its slots
  declaration.  Fixed.

Version 4.0.11
18 August 2004

  -change oldmail file writing to save a few bytes of disk space
  -documentation additions.
  -Python's standard library email.Message().flatten() could barf on certain
  types of badly mis-formatted messages (instead of the during instantiation,
  like the /other/ buggy cases).  Hope this is fixed in Python 2.4.  Developed
  a work-around for getmail.  Thanks:  Jürgen Nagel.
  -changes to "normal" output of getmail to make it slightly less verbose.

Version 4.0.10
12 August 2004

  -cosmetic fix to output:  add whitespace after timestamp when not retrieving
  message.  Thanks: Matthias Andree.
  -include MANIFEST.in in source distribution, to assist users in building
  "built distributions" from it.
  -change a few output messages' level to make verbose mode slightly less
  verbose, and add --debug switch to get "more verbose" behaviour.

Version 4.0.9
9 August 2004

  -fix cosmetic error for IMAP mailboxes with 0 messages in them.
  -change method of obtaining uidvalidity from IMAP server and remove wrapper.
  -previously, connecting to an IMAP-SSL server could fail if a non-SSL
  IMAP connection were attempted immediately before.  This was due to
  the Python bug discussed here:
  http://sourceforge.net/tracker/index.php?func=detail&aid=945642&group_id=5470&atid=305470
  Implemented a workaround for getmail.  Thanks: Payal Rathod.

Version 4.0.8
6 August 2004

  -add an extra error message if you ask getmail to deliver to a maildir,
  but getmail can't check the contents of it due to permissions.
  Thanks: Clemens Buschmann.
  -fix breakage introduced in 4.0.7: getmail would forget a message was "seen"
  after a cycle of not retrieving it.  Thanks: Payal Rathod.

Version 4.0.7
5 August 2004

  -change failure of a message filter to produce at least as many mail headers
  as it was provided from a fatal to a non-fatal error.  The message will
  be skipped.  Thanks: Payal Rathod.
  -a few non-conformant IMAP4 servers don't implement SEARCH, so getmail
  couldn't get a list of UIDs.  Changed to use FETCH instead.
  Thanks: Matthias Andree.
  -prevent traceback if IMAP SSL connection closed during connect().
  Thanks: Payal Rathod.
  -add warning if unknown parameters are supplied to a retriever, filter,
  or destination.
  -write subclasses of Python imaplib classes to work around missing
  UIDVALIDITY select() response.  Add it to the state getmail keeps.
  Thanks:  Matthias Andree.
  -move message state saving to later, so getmail doesn't falsely remember
  having handled a message.  Thanks:  Matthias Andree.
  -change location of documentation/man pages to
  <prefix>/share/{doc/getmail,man}/ to be more comformant with the FHS.
  -documentation updates


Version 4.0.6
4 August 2004

  -if the connection failed in a certain way, getmail could forget which
  messages it had already retrieved, and therefore retrieve them again when
  the next successful connection occurred.  Fixed.  Thanks: Wim Uyttebroek.
  -add win32 executable installer as third download option.

Version 4.0.5
3 August 2004

  -add additional error handler for certain network errors with POP3-over-SSL
  connections.  Thanks: Frank Benkstein.
  -rename retriever class for Demon UK:  it should have been SDPS; my
  transposition.  Thanks: Paul Howarth.

Version 4.0.4
2 August 2004

  -corrupt-message handler introduced in 4.0.1 needed tweaking.
  Thanks: Bernhard Riedel.

Version 4.0.3
2 August 2004

  -some types of socket errors would raise an exception instead of letting
  getmail gracefully continue; fixed.  Thanks: David.
  -documentatation updates; fix two typos and add to the section on using
  ClamAV with getmail.
  -changes to my release process; the current version's URL will not change
  when a new version is released.  See, I try to help others, even when they
  don't do the same...

Version 4.0.2
30 July 2004

  -trying to use MDA_qmaillocal destination with a non-multidrop retriever
  would raise an exception instead of printing a configuration error message.
  Fixed.  Thanks: Clemens Buschmann.

Version 4.0.1
26 July 2004

  -documentation fixes.  Thanks: Roland Hill.
  -add handler for badly-misformatted messages as a workaround for
  Python 2.3.x, where the email module can raise exceptions while parsing
  messages.  Thanks: Paul.

Version 4.0.0
23 July 2004

  -exit beta; final release of version 4.0.0, with approximately four thousand
  lines (~150 kbytes) of Python code and five thousand lines (~180 kbytes) of
  documentation.

Version 4.0.0b10
21 July 2004

  -documentation updates and cleanups
  -add MultiGuesser destination; it's like MultiSorter, but guesses at the
  message recipient based on addresses found in the message header, to be
  used for mail sorting if you don't have a proper domain/multidrop mailbox.
  -consolidate initialization code from retrievers to RetrieverSkeleton base
  class.
  -slight change to main script and retriever base classes to change the
  way the retriever objects are destroyed and garbage-collected
  -get rid of unneeded hostname variable in MultiDestinationBase
  -add "Summary:" header line to main script output in verbose mode
  -wrap code for 80 columns
  -fix error message when a filter doesn't return a message properly.
  Thanks: Shantanu Kulkarni.

Version 4.0.0b9
19 July 2004

  -change syntax of MultiSorter's locals parameter.  The previous syntax was
  fragile and was mostly a holdover from previous versions; it is now a tuple of
  items, each of which is a 2-tuple of quoted strings.
  -add Python version to --dump output.
  -eliminate redundant _confstring() method in _retrieverbases.py.
  -small documentation updates.

Version 4.0.0b8
18 July 2004

  -documentation updates.
  -include RPM build.  Rapidly approaching release state.

Version 4.0.0b7
17 July 2004

  -changes to an "impossible" error handler in _child_handler(), just in case.
  -move some code from destinations.MultiSorter() into new MultiDestinationBase
  base class.
  -fix MultiDestinationBase._get_destination()
  -add MultiDestination class to deliver messages to multiple destinations
  unconditionally.
  -cosmetic fixes to output

Version 4.0.0b6
15 July 2004

  -move common child-handling code out of filters and destinations into new
  baseclasses.ForkingBase() class.
  -add __all__ declarations to modules that were missing them, to help prevent
  namespace clutter for others

Version 4.0.0b5
15 July 2004

  -apply the child fix from b3 to Filter_classifier; I missed this in the
  update.  Thanks: Dave Osbourn.
  -cosmetic fix for output describing filters and destination objects.
  Thanks: Dave Osbourn.
  -catch configuration error of non-multidrop retriever with multidrop-only
  destination.  This broke when I cleaned up the message attribute interface
  in alpha 29.  Thanks: Dominik Kacprzak.

Version 4.0.0b4
14 July 2004

  -remove unneeded code raising a ConfigurationError in Filter_TMDA
  -clean up output for Maildir, Mboxrd destinations and getmail_maildir
  script, messages dropped by filters, various other bits
  -add --show-default-install-dirs to setup.py
  -documentation updates, including more clarification and examples of
  installation options
  -tweak to getmail manpage.  Thanks: Frankye Fattarelli.

Version 4.0.0b3
13 July 2004

  -different fix for the reaping child problem.  This one tested by Paul
  and confirmed working on Mandrake 10's kernel.
  -add Filter_TMDA filter class.
  -changes to setup.py to account for --install-data specifying a non-default
  path for the documentation and man pages

Version 4.0.0b2
13 July 2004

  -documentation fixes regarding installation.  Thanks: Emily Jackson.
  -do environment variable expansion in paths and arguments (before
  substitutions like %(sender), etc) in addition to expanding leading
  ~/ or ~user/ .  Thanks: Paul.
  -try change to code which reaps child processes; the previous code failed
  on a few Linux systems (perhaps the ones where the kernel changed
  fork() behaviour to run the child first?)  Reported by Paul.

Version 4.0.0b1
10 July 2004

  -first beta release
  -add missing os import to getmail_maildir
  -fix received_by in getmail_mbox and don't create Received: header
  -a handful of trivial changes to make the code idiomatically consistent
  -fix to oldmail file writing
  -documentation updates

Version 4.0.0a30
8 July 2004

  -documentation updates
  -change header-adding code from filters to a method in Message class.  Thanks:
  Frankye Fattarelli.
  -make MultiSorter pass retriever info down to its sub-destinations.  This
  fixes a problem reported by Frankye Fattarelli.

Version 4.0.0a29
8 July 2004

  -flesh out the getmailrc-examples file (note that it's been renamed from
  getmailrc-example)
  -clean up message attributes.  Make Message() class.  Move flatten_msg()
  out of utilities and make it into a Message method.  Remove header-length
  checking when generating flattened representation of message.  Change
  callers to use the new class.
  -move SENDER check from deliver_maildir() to getmail_maildir where it
  belongs.
  -update the miscellaneous documentation files
  -last alpha, I think

Version 4.0.0a28
7 July 2004

  -documentation additions and changes.
  -add manpages for getmail, getmail_maildir, getmail_box.  These go in
  PREFIX/man/man1/.

Version 4.0.0a27
4 July 2004

  -documentation fixes and additions.  Split documentation into
  reasonably-sized files.  I need to add inter- and intra-document links
  to most of the documentation yet.
  -add auto-generated tables of contents to each doc file.
  -start flushing out the website with copies of the docs, download directories,
  etc.

Version 4.0.0a26
4 July 2004

  -add explicit checks for multidrop classes to prevent users from incorrectly
  specifying certain header fields as recording the envelope recipient address
  -documentation fixes and additions

Version 4.0.0a25
2 July 2004

  -add handler for KeyboardInterrupt.  Thanks: Thomas Schwinge.
  -change setup script to not error if the specified directory prefix doesn't
  exist.  Thanks: Thomas Schwinge.
  -pass retriever protocol info to filters.  Thanks:  Frankye Fattarelli.
  -first inclusion of "real" documentation.  See docs/documentation.html or its
  plaintext counterpart docs/documentation.txt.

Version 4.0.0a24
1 July 2004

  -setup script/distutils changes.  The setup.py script now looks for
  --prefix or --home specifying an alternate installation directory, and
  otherwise defaults to the hierarchy that Python was installed to.
  /usr/share/doc/ or similar is no longer hardcoded anywhere.

Version 4.0.0a23
1 July 2004

  -changes to MDA_qmaillocal:  add "group" parameter, and make "user"
  parameter also have getmail change UID before invoking qmail-local.
  -change two instances of socket.gethostname() to socket.getfqdn()
  -change localparttranslate to localpart_translate
  -add explicit checks for socket.ssl(), which is optional.  Raise
  getmailConfigurationError if they're not present and the user tries
  to use it.  Thanks: Thomas Schwinge.
  -fix missing received_by in destinations.  Thanks: Frankye Fattarelli and
  Andrew Raines.

Version 4.0.0a22
30 June 2004

  -MultiSorter default destination can now be a named destination section as
  well, so postmaster mail can go to an external MDA, etc.
  -deliver_maildir writes out a new Return-Path: header field if SENDER
  is set.
  -include getmail_maildir and getmail_mbox delivery scripts for use as
  MDAs with other programs.
  -add starting/finishing log lines for each retriever
  -change eval_bool to raise exception on unexpected values, rather than
  using Python's native idea of what is boolean True and False
  -ensure no message has partial final line regardless of delivery method.
  Thanks: Thomas Schwinge.
  -get rid of msg_lines(), mbox_timestamp() and their only callers.
  -add the Delivered-To: and Received: header creation like getmail v.3 had,
  and boolean options delivered_to and received to allow the user to disable
  them.  This necessitates adding some data attributes to retriever classes
  and additional code to destination classes and utilities.
  Thanks: Thomas Schwinge.
  -drop .py suffix on the name of the main getmail script
  -declare the three scripts to be scripts instead of modules (for distutils)
  -some fixups to the distutils setup script.  If files or directories
  are still installed with "wrong" permissions (like 0600/0700 instead of
  0644/0755), please let me know.
  -a few miscellaneous fixups
  -heading for beta, working on documentation ...

Version 4.0.0a21
27 June 2004

  -leave Return-Path header field alone for program deliveries.  Thanks:
  Andrew Raines.

Version 4.0.0a20
25 June 2004

  -fix typo in Filter_classifier
  -wrap additional exception check around executing subprocesses to ensure
  nonzero exit on error
  -finish MDA_qmaillocal address handling and add strip_delivered_to
  parameter.  Document MDA_qmaillocal.
  -change email module import in utilities.py.  Submit bug report to
  Python bug tracker.  Thanks: Frankye Fattarelli.

Version 4.0.0a19
24 June 2004

  -bring some docstrings, comments, and documentation up to date.
  -add Filter_classifier filter module, to support adding information
  to the message header from programs that don't provide the original message
  back on stdout (like clamscan/clamdscan, apparently).  Thanks: Frankye
  Fattarelli.
  -missed seek(0) in msg_flatten().  Add missing imports.
  Thanks: Andrew Raines.

Version 4.0.0a18
24 June 2004

  -add msg_flatten(), msg_lines() and use them exclusively to prevent
  .as_string() from changing header fields for spurious reasons.
  Thanks: Andrew Raines.
  -remove code doing From_-escaping in Mboxrd and let the email module do it.
  -fix copy & paste errors in change_uidgid().  Thanks: Andrew Raines.
  -catch timeouts

Version 4.0.0a17
23 June 2004

  -add exitcodes_keep and exitcodes_drop parameters to Filter_external.
  Thanks: Frankye Fattarelli.

Version 4.0.0a16
23 June 2004

  -add user and group, and allow_root_commands parameters to MDA_external
  destination and Filter_external filter classes.
  -make import pwd fail gracefully for Windows, etc.
  -add allow_root_commands parameter to MDA_external destination and
  Filter_external filter classes to force overriding of running external
  commands as root.
  -pass reference to configparser to retriever, destination, and filters
  -add MultiSorter destination of "[section]" which invokes another
  destination from the same getmail rc file.  Use this to deliver to programs
  by including an MDA_external destination in a section named [foo] in the
  rc file, then specify that section name in the MultiSorter in the locals
  part, i.e.
    [destination]
    type = MultiSorter
    postmaster = /path/to/maildir/
    locals = joe /path/to/maildir/
      sam /path/to/mbox/
      chris [myprogram]
    [myprogram]
    type = MDA_external
    path = /usr/local/bin/mymda
    arguments = ("--strip-attachments", "-f%(sender)", "--fast")
  Don't try to cause a loop using this to point to itself.  You have been
  warned.
  -MultiSorter is now a little stricter about destination names.  A maildir
  (after any tilde expansion, if applicable) must start with "." or "/" and
  end with "/".  An mboxrd (after any tilde expansion, if applicable) must
  start with "." or "/".  This means if you previous had something like:
    locals = sam@example.net subdir/maildir/
  You'll need to change it to:
    locals = sam@example.net ./subdir/maildir/
  Of course,
    locals = sam@example.net ~sam/maildir/
  is already okay if sam is a valid user and has a valid home directory.
  -add message_log_syslog

Version 4.0.0a15
22 June 2004

  -add summary "Retrieved X messages for ..." for each rc file at program
  close.  Thanks: Frankye Fattarelli.
  -add explicit delete of retriever after quit() to try to force writing
  oldmail file immediately instead of at garbage collection.  Python makes
  no guarantees about when garbage collection takes place, so this won't be
  perfect.  Thanks: Julian Gomez.
  -add message_log
  -add traceback formatting on exception
  -change --dump to include filters.  Change order of operations.

Version 4.0.0a14
22 June 2004

  -fix IMAP-over-SSL.  socket.ssl objects are apparently incompatible with
  socket timeouts, even in the IMAP_SSL class.
  -ensure --trace debugging output doesn't output passwords.
  Thanks: Julian Gomez.
  -IMAP classes would stop indexing mailboxes when they hit an empty one.
  Fixed.  Thanks: Julian Gomez.

Version 4.0.0a13
21 June 2004

  -add missing default for max_messages_per_session.  Thanks:  Frankye
  Fattarelli.

Version 4.0.0a12
21 June 2004

  -slight change to quit() to ensure old connections are closed
  and garbage-collected before trying to make new ones.  Thanks:  Frankye
  Fattarelli.
  -move default documentation directory to /usr/local/share/doc/ .
  -filters.py now checks that the filtered message is at least basically
  sane in that it has a header no shorter than the message it was supplied.
  Let me know if this causes problems.
  -add and document max_messages_per_session

Version 4.0.0a11
21 June 2004

  -add MultidropIMAPRetriever and MultidropIMAPSSLRetriever
  -add move_on_delete parameter to all IMAP retrievers.
  -add and document delete_after and max_message_size options
  -document read_all and delete options
  -rename pop3ssl.py
  -fix --quiet.  i.e., getmail should again operate truly silently if you
  want it to.
  -retrievers' quit() method wasn't getting called.  Fix.  Thanks: Frankye
  Fattarelli.

Version 4.0.0a10
19 June 2004

  -fix the retrieve-every-other-message bug when delete == True.
  -move base classes out of retrievers.py into _retrieverbases.py
  -fix exception when retrieving mail from an empty IMAP account

Version 4.0.0a9
19 June 2004

  -accidentally edited initialize() in the wrong class; it broke POP3.
  This update should fix it.

Version 4.0.0a8
18 June 2004

  -fix 6 instances of getmailConfirurationError typo in retrievers.py
  -finish basics of IMAP support -- i.e., it successfully retrieves mail.
  delete might not work yet.  IMAP-over-SSL /might/, but the server I was
  testing against wasn't working with SSL (no connection).
  -handle email.Utils.getaddresses returning None.  Thanks:  Frankye Fattarelli.
  -fix default port for MultidropPOP3SSLRetriever.

Version 4.0.0a7
17 June 2004

  -debug and rewrite POP3-over-SSL functionality.  Involved writing around
  some ugly limitations and kludges in Python's socket.ssl and poplib.POP3
  code.  But POP3-over-SSL actually works now, and is fairly clean.
  Let me know if it hangs; I might need to change the way blocking mode is
  handled on the underlying socket.

Version 4.0.0a6
16 June 2004

  -add pseudofile class to implement readline() and sslwrapper to implement
  sendall() on ssl objects.
  ssl objects in Python don't behave like a file, or like a socket; they're just
  ... broken. It's a deficiency in the Python standard library.
  This might make POP3-over-SSL work, or it might need more work yet.  I've
  got it talking some SSL, but it hangs at the moment.  Might be blocking
  in read().
  -move Mboxrd file locking to _deliver_message().  Thanks:  Frankye Fattarelli.
  -make --trace more useful and add extra debug info to main script.
  -eliminate noise from defaults in non-[options] section processing
  -found Python's ConfigParser .getboolean() method failed when the passed-in
  default was a non-string.  Maybe I should have stayed with my own
  replacement configuration parser, as it properly handled this case ...
  submitted a patch to the Python bug tracker and added a workaround to
  getmail for the moment.
  -/really/ enable delete and read_all in [options] of rc file.

Version 4.0.0a5
16 June 2004

  -document tuple syntax.  Thanks:  Frankye Fattarelli.
  -fix "filters" name collision in script.  Thanks:  Frankye Fattarelli.

Version 4.0.0a4
15 June 2004

  -fix default values in three classes' parameters which previously relied
  on type conversion.  Thanks: Andrew Raines.
  -fix default port for POP3-over-SSL and "username" parameter in documentation.
  Thanks: Frankye Fattarelli.
  -enable delete and read_all in [options] of rc file.  Change handling of
  verbose.

Version 4.0.0a3
15 June 2004

  -fix typo in processing filters.  Thanks: K. Shantanu.
  -fix typo in processing non-default parameters.  Thanks: Andrew Raines.
  -document SSL retrievers
  -move retrievers.py configuration functionality into ConfigurableBase class
  -convert filters.py to use ConfigurableBase
  -convert destinations.py to use ConfigurableBase

Version 4.0.0a2
14 June 2004

  -fix default/'default' in filters module.  Thanks: Andrew Raines.
  -add the mix-in classes for SSL support with POP3 classes.  Meant small
  rewrites to the POP3 classes, but the design should be even cleaner now.

Version 4.0.0a1
14 June 2004

  -first alpha release of getmail version 4


Changes since getmail version 3
-------------------------------

-complete rewrite
-switch to Python version 2.3.3:
  -increased code readability (augmented assignment, list comprehensions,
    string methods, etc)
  -eliminate external modules (ConfParser, timeoutsocket)
  -use standard library modules which have come up to reasonable levels
    of quality and functionality over old custom code (optparse,
    ConfigParser)
  -no longer require workarounds for older, broken standard library modules/
    functions
-modular, object-oriented framework for retrievers, destinations, filters
  allows extensibility
-make more platform-agnostic (transparently support system EOL convention,
  etc)
-support for multiple retriever/account types:
  -POP (single-user, multidrop, SDPS)
  -IMAPv4 (single-user, multidrop)
-full native support for POP3-over-SSL and IMAP-over-SSL.
-configuration (rc) file format changes:
  -support multiple rc files per invocation
  -one mail account per rc file