aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/domino
blob: a5802718a118b3c7dbcf3898fe7d5fd454d4f737 (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
#!/usr/bin/perl -w
# correct-domino-mime-conversion - does it!
# $Id: domino,v 1.1 2004/06/08 03:59:00 rfunk Exp $

use strict;

# Any arguments are expected to be an mda invocation.
if (@ARGV) {
    my $mda = join(' ', @ARGV);
    open(MDA, "| $mda") or die "Can't exec $mda: $!\n";
    select(MDA);
}

# Look for a Boundary declaration in the message header
my $decltag;
while (<STDIN>) {
    print;
    if (/boundary=\"(.*)\"$/i) {
	$decltag = $1;
    } elsif (/^$/) {
	# An empty line marks the end of the headers.
	last;
    }
}

# If we didn't find a Boundary declaration just pipe the rest of the
# message unchanged.
if (!defined $decltag) {
    while (<STDIN>) {
	print;
    }
    exit 0;
}

# Substitute $decltag for every ocurrence of an outer-level boundary
# string found in the body of the message.
my $usedtag;
while (<STDIN>) {
    if (/^--(.*)$/) {
	$usedtag = $1 unless defined $usedtag;
	if ($1 eq $usedtag) {
	    $_ =  "--$decltag\n";
	} elsif ($1 eq "$usedtag--") {
	    $_ = "--$decltag--\n";
	}
    }
    print;
}

=pod

This script can be used to bypass a bug in the Domino-5.0.2b IMAP
service that manifests itself when you use fetchmail as the IMAP
client.  The problem is that fetchmail (differently from other IMAP
clients) fetches messages in two parts, first the headers and then the
body.  It seems that Domino converts the messages from its internal
format into MIME twice.  In doing so, it declared a boundary string in
the messages Content-type header and uses another one to separate the
parts in the body.

This script should be used as a mda option for fetchmail.  As
arguments to it, pass the former mda you used.  I, for example, use the following entry in my .fetchmailrc:

	poll server ... mda "/usr/bin/procmail -d %T";

To use this filter, I changed the above into the following:

	poll server ... mda "/home/gustavo/bin/correct-domino-mime-conversion /usr/bin/procmail -d %T";

If you do not use a mda normally, you can try the following to call sendmail directly:

	poll server ... mda "/home/gustavo/bin/correct-domino-mime-conversion //wherever/is/your/sendmail -oem -f %F %T";

Without argumets this script is a filter that reads from its stdin and
outputs the result into its stdout.

I should mention that this bug seems to be solved in Domino 5.0.3
(http://www.notes.net/46dom.nsf/434e319a66960d8385256857005cd97b/4499e0db6e43732b852568b2006ef7e9?OpenDocument)
but I have not checked it.

Gustavo.
<gustavo@cpqd.com.br>

=cut
0 fi echo 'poll "'$SITE'"' > $HOME/.fetchmailrc echo "protocol $PROTO" >> $HOME/.fetchmailrc echo 'username "'$USR'"' >> $HOME/.fetchmailrc echo 'password "'$PASS'"' >> $HOME/.fetchmailrc PROCMAIL=`type -all procmail | sed -n "1 p" | cut -d' ' -f3` SENDMAIL=`type -all sendmail | sed -n "1 p" | cut -d' ' -f3` if [ ! "$PROCMAIL" = "" ]; then echo 'mda "'$PROCMAIL -d %s'"' >> $HOME/.fetchmailrc MDA="1" elif [ ! "$SENDMAIL" = "" ]; then echo 'mda "'$SENDMAIL %s'"' >> $HOME/.fetchmailrc MDA="2" else MDA="3" fi echo >> $HOME/.fetchmailrc echo echo "This is your $HOME/.fetchmailrc file." chmod 600 $HOME/.fetchmailrc echo cat $HOME/.fetchmailrc if [ ! "$MAIL" = "" ]; then echo "Fetchmail will retrieve your mail and put it in:" echo "$MAIL" if [ ! -f "$MAIL" ]; then touch $MAIL 2>/dev/null chmod 600 $MAIL 2>/dev/null fi fi echo if [ "$MDA" = "1" ]; then echo "I put that (m)ail (d)elivery (a)gent in .fetchmailrc" echo "because i found it on your system, this doesn't mean" echo "it's correct or the one you want to use." echo echo "The first time you run fetchmail, you should run it" echo "this way: # fetchmail -k" echo elif [ "$MDA" = "2" ]; then echo "You seem to have sendmail, sendmail will be used" echo "as the (m)ail (d)elivery (a)gent for fetchmail." echo echo "WARNING! There's no way to know if sendmail is set up" echo "properly for local mail delivery, so the first time you" echo "run fetchmail run it this way: # fetchmail -k" echo echo "If the mail that fetchmail retrieves is not put in your mailbox," echo "you'll know that sendmail is not set up properly for the delivery" echo "of local mail." echo elif [ "$MDA" = "3" ]; then echo "I Don't know what (m)ail (d)elivery (a)gent you're going to use." echo "You need a <mda> to deliver the mail to you, after <fetchmail> retrieves it." echo echo "Put the <mda> in your .fetchmailrc file, like below." echo "password $PASS" echo mda '"/usr/bin/procmail -d %s"' echo mda '"/usr/sbin/sendmail %s"' echo echo "The first time you run fetchmail, you should run it" echo "this way: # fetchmail -k" echo fi