]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/perl | |
2 | use 5.014000; | |
3 | use strict; | |
4 | use warnings; | |
5 | ||
6 | use App::Lastmsg; | |
7 | ||
8 | App::Lastmsg::run; | |
9 | ||
10 | __END__ | |
11 | ||
12 | =encoding utf-8 | |
13 | ||
14 | =head1 NAME | |
15 | ||
16 | lastmsg - last(1) semblance for your inbox | |
17 | ||
18 | =head1 SYNOPSIS | |
19 | ||
20 | # in ~/.lastmsgrc | |
21 | inbox: | |
22 | - /home/MGV/mail/inbox | |
23 | - /home/MGV/mail/folder | |
24 | sent: | |
25 | - /home/MGV/mail/sent | |
26 | track: | |
27 | bestfriend: | |
28 | - best@friend.com | |
29 | - best.friend@freemail.com | |
30 | someguy: SOMEGUY@cpan.org | |
31 | nobody: | |
32 | - nobody@example.com | |
33 | ||
34 | # in your shell | |
35 | mgv@somehost ~ $ lastmsg | |
36 | bestfriend best@friend.com Sat 31 Dec 2016 12:34:56 EET | |
37 | someguy SOMEGUY@cpan.org Thu 20 Nov 2016 12:00:00 EET | |
38 | nobody NOT FOUND | |
39 | ||
40 | =head1 DESCRIPTION | |
41 | ||
42 | lastmsg reads your mail folders looking for emails you exchanged with | |
43 | a given set of people. Then for each person in the set it prints the | |
44 | time you last received an email from or sent an email to them and the | |
45 | email address used. | |
46 | ||
47 | The script takes no arguments (the settings are taken from a | |
48 | configuration file), and it prints a three-column table where the | |
49 | first column is the ID of a person, the second column is the email | |
50 | address last used (empty if you've never exchanged an email with that | |
51 | person), and the last column is the date of last contact (or the | |
52 | string C<NOT FOUND> if you've never exchanged an email). The rows are | |
53 | sorted by date of last contact (with the most recently contacted | |
54 | people at the top), and the people that you've never exchanged an | |
55 | email with are at the end. | |
56 | ||
57 | The configuration is in YAML format. Three keys are recognised: | |
58 | ||
59 | =over | |
60 | ||
61 | =item B<inbox> | |
62 | ||
63 | The path(s) to your inbox and other incoming mail folders (a single | |
64 | string or a list of strings). The C<From> field of these emails is | |
65 | scanned. | |
66 | ||
67 | If not provided, it defaults to F</var/mail/$ENV{USER}> and | |
68 | F<$ENV{HOME}/Maildir/>. If USER or HOME are not in the environment, | |
69 | the corresponding default directory is ignored. So on a system with | |
70 | neither of these variables defined, this option will default to an | |
71 | empty list. | |
72 | ||
73 | B<NOTE:> See L<Email::FolderType> for information on how the type of a | |
74 | folder is identified. In short, the suffix of the folder is analyzed: | |
75 | If F</>, the format is Maildir. If F</.>, the format is MH. If F<//>, | |
76 | the format is Ezmlm. Otherwise, some heuristics are checked and the | |
77 | fallback is Mbox. | |
78 | ||
79 | =item B<sent> | |
80 | ||
81 | The path(s) to your sent and other outgoing mail folders (a single | |
82 | string or a list of strings). The C<To>, C<Cc>, and C<Bcc> fields of | |
83 | these emails are scanned. | |
84 | ||
85 | If not provided, it default to an empty list. See B<NOTE:> above for | |
86 | information on how the type of a folder is identified. | |
87 | ||
88 | =item B<track> | |
89 | ||
90 | A hash of people to track. Each entry represents a person. The key is | |
91 | the ID of that person (used for display), and the value is the email | |
92 | address of that person or a list of email addresses of that person. | |
93 | ||
94 | If not provided, the script will die with an error. | |
95 | ||
96 | =back | |
97 | ||
98 | The configuration file can be named F<lastmsgconfig>, | |
99 | F<lastmsg.config>, F<lastmsgrc>, or F<.lastmsgrc> and can be placed in | |
100 | the current directory, in your home directory, in F</etc/>, and in | |
101 | F</usr/local/etc/>. See L<Config::Auto> for more information. | |
102 | ||
103 | =head1 ENVIRONMENT | |
104 | ||
105 | The only recognised environment variable is B<LASTMSG_DEBUG>, which if | |
106 | set to a true value causes the script to emit a lot of information on | |
107 | STDERR about what it is doing. | |
108 | ||
109 | =head1 TODO | |
110 | ||
111 | Should handle IRC and IM logs as well, not just emails. Should have | |
112 | better tests. | |
113 | ||
114 | =head1 AUTHOR | |
115 | ||
116 | Marius Gavrilescu, E<lt>marius@ieval.roE<gt> | |
117 | ||
118 | =head1 COPYRIGHT AND LICENSE | |
119 | ||
120 | Copyright (C) 2016-2017 by Marius Gavrilescu | |
121 | ||
122 | This library is free software; you can redistribute it and/or modify | |
123 | it under the same terms as Perl itself, either Perl version 5.24.1 or, | |
124 | at your option, any later version of Perl 5 you may have available. | |
125 | ||
126 | ||
127 | =cut |