mirror of https://github.com/leahneukirchen/mblaze
add maddr: show mail addresses in messages
parent
182a32ff9d
commit
70df63df73
@ -0,0 +1,76 @@
|
|||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "blaze822.h"
|
||||||
|
|
||||||
|
static char defaulthflags[] = "from:sender:reply-to:to:cc:bcc:"
|
||||||
|
"resent-from:resent-sender:resent-to:resent-cc:resent-bcc:";
|
||||||
|
static char *hflag = defaulthflags;
|
||||||
|
|
||||||
|
void
|
||||||
|
addr(char *file)
|
||||||
|
{
|
||||||
|
while (*file == ' ' || *file == '\t')
|
||||||
|
file++;
|
||||||
|
|
||||||
|
struct message *msg = blaze822(file);
|
||||||
|
if (!msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char *h = hflag;
|
||||||
|
char *v;
|
||||||
|
while (*h) {
|
||||||
|
char *n = strchr(h, ':');
|
||||||
|
if (n)
|
||||||
|
*n = 0;
|
||||||
|
v = blaze822_chdr(msg, h);
|
||||||
|
if (v) {
|
||||||
|
char *disp, *addr;
|
||||||
|
while ((v = blaze822_addr(v, &disp, &addr))) {
|
||||||
|
if (disp && addr && strcmp(disp, addr) == 0)
|
||||||
|
disp = 0;
|
||||||
|
if (disp && addr) {
|
||||||
|
char dispdec[1024];
|
||||||
|
blaze822_decode_rfc2047(dispdec, disp,
|
||||||
|
sizeof dispdec - 1, "UTF-8");
|
||||||
|
dispdec[sizeof dispdec - 1] = 0;
|
||||||
|
|
||||||
|
printf("%s <%s>\n", dispdec, addr);
|
||||||
|
} else if (addr) {
|
||||||
|
printf("%s\n", addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n) {
|
||||||
|
*n = ':';
|
||||||
|
h = n + 1;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
while ((c = getopt(argc, argv, "h:")) != -1)
|
||||||
|
switch(c) {
|
||||||
|
case 'h': hflag = optarg; break;
|
||||||
|
default:
|
||||||
|
// XXX usage
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc == optind && isatty(0))
|
||||||
|
blaze822_loop1(":", addr);
|
||||||
|
else
|
||||||
|
blaze822_loop(argc-optind, argv+optind, addr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
.Dd July 22, 2016
|
||||||
|
.Dt MADDR 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm maddr
|
||||||
|
.Nd show mail addresses in messages
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl h Ar headers
|
||||||
|
.Op Ar msgs\ ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
prints all mail addresses mentioned in the
|
||||||
|
.Ar headers
|
||||||
|
of the given
|
||||||
|
.Ar msgs ,
|
||||||
|
line by line.
|
||||||
|
See
|
||||||
|
.Xr mmsg 7
|
||||||
|
for the message argument syntax.
|
||||||
|
.Pp
|
||||||
|
If no
|
||||||
|
.Ar msgs
|
||||||
|
are passed,
|
||||||
|
and
|
||||||
|
.Nm
|
||||||
|
is used interactively,
|
||||||
|
.Nm
|
||||||
|
will default to the current sequence.
|
||||||
|
Else,
|
||||||
|
.Nm
|
||||||
|
will read filenames from standard input.
|
||||||
|
.Pp
|
||||||
|
The options are as follows:
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Fl h Ar headers
|
||||||
|
Only search the colon-seperated list of
|
||||||
|
.Ar headers
|
||||||
|
for mail addresses.
|
||||||
|
Default:
|
||||||
|
.Sq Li from:sender:reply-to:to:cc:bcc:
|
||||||
|
and the same with
|
||||||
|
.Sq Li resent- .
|
||||||
|
.El
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
.Ex -std
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr mmsg 7
|
||||||
|
.Sh AUTHORS
|
||||||
|
.An Christian Neukirchen Aq Mt chneukirchen@gmail.com
|
||||||
|
.Sh LICENSE
|
||||||
|
.Nm
|
||||||
|
is in the public domain.
|
||||||
|
.Pp
|
||||||
|
To the extent possible under law,
|
||||||
|
the creator of this work
|
||||||
|
has waived all copyright and related or
|
||||||
|
neighboring rights to this work.
|
||||||
|
.Pp
|
||||||
|
.Lk http://creativecommons.org/publicdomain/zero/1.0/
|
Loading…
Reference in New Issue