[comp.mail.uucp] MCI mail to UUCP script

lamb@saddle.UUCP (Richard Lamb) (01/30/91)

	Here is a expect/tcl[1] based script Ive been using to snarf incomming
MCI mail, convert the From: field into a Internet reply-able format, and
stuff it into the UUCP/Internet mail stream. 
	In this way I can integrate MCI-mail into my unix/internet 
environment. Sending mail TO MCI is not a problem since they provide a 
gateway with mcimail.com. A permanent "forwarding" arangement FROM MCI 
appears to be possible on request to MCI using a "Off-Net Registrant (ONR)".
Hovever, when I travel MCI-mail can be inexpensively and convieniently 
accessed; so a temporary forwarding mechanism was important to me.
	An attempt was made to make the psudo uucp node "mci" look 
like any other uucp node. 
Logging information is placed in /usr/spool/uucp/.Log/uucico/mci 
and ../../.Status/mci so that things like "uustat -m" kinda work. 
	If there is any demand , I could add outgoing UUCP->MCI support also
for those that have no internet/usenet conectivity.
	I assume an error-free link via a 2400 Baud MNP modem (the TB 
script is included). I use it on a HDB uucp machine (SCO-ODT).

	If such a script already exists, my apologies (and where is it !
I certainly dont claim mine is the best.) .

[1] "expect" is Don Libes interactive script processing program available on 
    uunet. "tcl" is a supporting command language written by John Ousterhout
    also on uunet.

Disclaimer: I neither work for or am associated with MCI.

==============/usr/spool/cron/crontabs/uucp==================
15 * * * * /usr/lib/uucp/mcimail mciname1 mcipass user1@foobar.com > /dev/null
20 * * * * /usr/lib/uucp/mcimail mciname2 mcipass user2@abcu.edu > /dev/null
#                              mci-login-name password who-to-forward-to

==============/usr/lib/uucp/mcimail==========================
touch /usr/spool/uucp/.Log/uucico/mci
if test -f /usr/spool/uucp/LCK..mci; then
	exit;
fi
touch /usr/spool/uucp/LCK..mci
cd /usr/lib/uucp
SETSTR="set username $1; set password $2; set localto $3;"
/u/local/bin/expect -c "$SETSTR" mcimail.exp
rm /usr/spool/uucp/LCK..mci

===============/usr/lib/uucp/mcimail.exp=====================
#=========================================================================
# Copyright XtcN Ltd. 1991
#
# All Rights Reserved
#
# Permission to use, copy, and distribute this software and its
# documentation is hereby granted, provided that the above copyright
# notice appear in all copies and that no monetary gain be derived
# from this software without specific, written prior permission.
#=========================================================================
#
# This is part of the MCI MAIL interface packadge
# Do all this as user UUCP
# My shells wont do it !/usr/local/bin/expect -f
#
# THINGS YOU MAY HAVE TO CHANGE
# maximum time it would take to "print" a single article in seconds
set timemax 1000
# maximum number of messages to read
set mailmax 100
# where the uucp spool dir for uucp machine "mci" is
set uuspool /usr/spool/uucp/mci
# where these mcimail processing files reside
set uulib /usr/lib/uucp
# where status info will be saved
set uustatus /usr/spool/uucp/.Status/mci
# where log info will be saved
set uulogf /usr/spool/uucp/.Log/uucico/mci
#
# STUFF THAT COMES IN THE COMMAND LINE
# login name and password for user into MCI
if ![info exists username] { exit }
if ![info exists password] { exit }
# who to send the mail to. Can be another machine.
if ![info exists localto] { exit }
#
#
set match_max 10000
# Procedures
proc failed {} {
        global localto uustatus uulogf
system echo "0 0 000000000 0 `date +%m/%d-%H:%M`_Failed mci" >$uustatus
system echo "uucp mci \(`date +%m/%d-%T`\) FAILED \($localto\)" >>$uulogf
        exit
}
proc success {} {
        global localto uustatus uulogf
system echo "0 0 000000000 0 `date +%m/%d-%H:%M`_SUCCESSFUL mci" >$uustatus
system echo "uucp mci \(`date +%m/%d-%T`\) SUCCEEDED \($localto\)" >>$uulogf
}
# Login to MCI MAIL
# MCI can take a while to start up and log in to avg 20 sec
system echo "2 0 000000000 0 `date +%m/%d-%H:%M`_Locked mci" >$uustatus
system echo "uucp mci \(`date +%m/%d-%T`\) STARTUP \($localto\)" >>$uulogf
set timeout 50
# make the connection to MCI via MNP 
spawn cu mci2
expect {*2400/REL*} {} timeout failed
send  \r
expect {*name:*} {} timeout failed
send $username\r
expect {*\r\nPassword:*} {} timeout failed
send $password\r
expect {*\r\nCommand:*} {} timeout failed
system echo "2 0 000000000 0 `date +%m/%d-%H:%M`_Talking mci" >$uustatus
system echo "uucp mci \(`date +%m/%d-%T`\) OK \($localto\)" >>$uulogf
# Check to see if we have any mail
send scan inbox\r
expect \
{*INBOX\ is\ empty*} {
	expect {*\r\nCommand:*}
	send exit\r
	expect {*Lost\ Carrier*}
system echo "uucp mci \(`date +%m/%d-%T`\) NO MAIL \($localto\)" >>$uulogf
	success
	exit
} \
{*type\ NO\ to\ stop*} {
	send no\r
	expect {*\r\nCommand:*}
} \
{*\r\nCommand:*} {
} \
timeout failed
# Read the MCI mail messages into local files mail1.in mail2.in ....
# Careful. This is how long we will wait till the "print" is finished
set timeout $timemax
for {set i 1} {$i < $mailmax} {set i [expr $i+1]} {
	log_user 0
	exec rm -f $uuspool/mail$i.in
	log_file -a $uuspool/mail$i.in
	send print $i\r
        expect \
	{*\r\nCommand:*} {
                log_file
                log_user 1
system echo "uucp mci \(`date +%m/%d-%T`\) REMOTE REQUESTED \(mail$i.in\)" >>$uulogf
        } \
	{*\r\nThere\ is\ no\ message\ numbered*} {
		log_file
		log_user 1
		send exit\r
		expect {*Lost\ Carrier*}
		break
	} \
	timeout failed
}
system echo "2 0 000000000 0 `date +%m/%d-%H:%M`_SUCCESSFUL-CALL mci" >$uustatus
system echo "uucp mci \(`date +%m/%d-%T`\) STARTUP MCI-TO-INTERNET" >>$uulogf
# Convert MCI format mail to internet format
set mailmax [expr $i]
for {set i 1} {$i < $mailmax} {set i [expr $i+1]} {
	system $uulib/mci2internet $localto $uuspool <$uuspool/mail$i.in
}
success
# Have uucp deliver them to the local users
system nohup /usr/lib/uucp/uuxqt -smci >/dev/null &
# delete them if you desire
# exec rm -f $uuspool/mail*.in
exit

====================/usr/lib/uucp/mci2internet=======================
#=========================================================================
# Copyright XtcN Ltd. 1991
#
# All Rights Reserved
#
# Permission to use, copy, and distribute this software and its
# documentation is hereby granted, provided that the above copyright
# notice appear in all copies and that no monetary gain be derived
# from this software without specific, written prior permission.
#=========================================================================
#
# This is part of the MCI MAIL interface packadge
# This is all run as user UUCP
cd "$2"
# umi local_user <mci_mail_file
#BASS=`echo $1 | cut -d"." -f1`
DFILE="D.$BASS$$"
XFILE="X.$BASS$$"
LOCALTO="$1"
#==========================
# delete the first 2 lines "print" line
line >/dev/null
line >/dev/null

# Save it elsewhere if it doesnt look like an MCI mail file
MDATE=`line | tr -d "\015"`
TESTDATE=`echo $MDATE | cut -d" " -f1`
if test "Date:" != "$TESTDATE"; then
        echo "======Junk==========" >>junked;
        cat >>junked;
        exit;
fi

# To make uuxqt-submit-sendmail-rmail happy
echo "From uucp" >$DFILE

# Dump the Date: line
echo "$MDATE" >>$DFILE

# Re-write the From: line to internet format
FROM=`line | tr -d "\015"`
UNAME=`echo $FROM | cut -d" " -f2-3`
MCIID=`echo $FROM | cut -d" " -f5-100`
if test -n "$MCIID"; then
	ADDR1=`echo $MCIID | cut -d" " -f3 | sed s/-//`;
	ADDR1="000$ADDR1@mcimail.com";
	line >/dev/null;
else
	EMS=`line | tr -d "\015"`;
	if test -n "`echo $EMS | grep \^EMS:`"; then
		ETYPE=`echo $EMS | cut -d" " -f2`;
		ADDR1="";
		while MBX=`line | tr -d "\015"`;test -n "`echo $MBX | grep \^MBX:`";
		do
			ADDR1=$ADDR1`echo $MBX | cut -d" " -f2`" ";
		done
	else
		ADDR1="Unknown";
	fi
fi
echo "From: $UNAME <$ADDR1>" >>$DFILE

# Cache the TO: and CC: lines untill Subject: is reached
echo "" >tmpii
while TOLINE=`line | tr -d "\015"`; test -z "`echo $TOLINE | grep \^Subject:`";
do
	echo "$TOLINE" >>tmpii;
done

# Dump the local To: field
echo "To: $LOCALTO" >>$DFILE

# Dump the subject
SUBJECT="$TOLINE"
echo "$SUBJECT" >>$DFILE

# Dump the cached TO: and CC: lines
cat tmpii >>$DFILE; rm tmpii

# Dump the rest of the article
tr -d "\015" | sed s/\^Command.*// >>$DFILE
#==========================
echo "U postmaster xtcn.com
R postmaster@xtcn.com
F $DFILE
I $DFILE
C rmail $LOCALTO
" > $XFILE
chown uucp $DFILE $XFILE
chgrp other $DFILE $XFILE
chmod a-rwx $DFILE $XFILE
chmod u+rw $DFILE $XFILE

====================/usr/lib/uucp/Systems==================
# for MCI mail
mci Any ACU2400 2400 18004566245
mci2 Any ACUMNP 2400 18003331818

====================/usr/lib/uucp/Devices==================
ACUMNP	ttyFM00	- 2400 tbmnp

====================/usr/lib/uucp/Dialers==================
tbmnp	=W-,	"" A\pA\pA\pA\pA\pTQ0E0S0=0\r\c OK ATS66=1s50=0s111=0s95=1DT\T CONNECT-\c-CONNECT
&tbmnp =,-, "" +++\dATQ0H OK ATE0 OK ATS66=0S50=0S111=255S95=0S0=1Q1

==========End of files================Hope its useful==================
						Rick

-- 
############################################################################
#  _  /|     | Richard Lamb                  Internet: lamb@lids.mit.edu   #
#  \'o.O'    | MCI Mail: 423-9516            Telex: 6504239516             #
#  =(___)=   | SnailNet: |XtcN Ltd         |    |XtcN Ltd                 |#
#     U      |           |16 Cochituate St.| OR |4425 Butterworth Pl. N.W.|#
# Ack! Phht! |           |Natick MA 01760  |    |Washington D.C. 20016    |#
#            |           |Voice:5086552960 |    |Voice:2023633661         |#
############################################################################