Benutzer-Werkzeuge

Webseiten-Werkzeuge


mail_conf

Konfiguration für den Mailverkehr

Die Funktion ist durch Webzugang obsolet und abgeschaltet, bleibt aber hier dokumentiert.

Der virtuelle Großrechner kann Batches und Magnetbanddateien per eMail empfangen, sowie Drucklisten, Magnetbandübersichten und Magnetbänder per eMail verschicken.
Mutt ist ein Frontend für den Mailverkehr, welches auch das Versenden von Anhängen per Kommandozeile ermöglicht, ssmtp der einfachste SMTP Client und fetchmail ein Programm zum Abholen von Mails.
Alle Programme müssen entsprechend konfiguriert werden. Für die konkrete Anwendung ist die Mailadresse rz(aett)draht-zieher.de eingerichtet, die bei 1und1 gehostet wird.

mutt

Die .muttrc enthält im Wesentlichen die Ordnerstruktur, sowie die Absendeinformationen für mutt:

.muttrc
set realname='Rechenzentrum'
set from="rz@draht-zieher.de"
set edit_headers=yes
set folder="~/mail/"
set mbox="~/mail/inbox/"
set spoolfile=+inbox
set record=+sent
set postponed=+drafts
set mbox_type=maildir
 
#Mailboxen:
mailboxes +inbox 
# Welche Header anzeigen
ignore *
unignore from resent-from reply-to x-mailer user-agent date to cc subject
# In welcher Reihenfolge sollen diese gew�nschten Header angezeigt werden?
 hdr_order From: Resent-From: Reply-To: Date: X-Mailer: User-Agent:To: Cc: Subjct:
 
#abrechen bei keinem Betreff
set abort_nosubject=no
set quit=ask-yes
set editor='builtin'
folder-hook . set sort=threads
folder-hook /home/user/mail/inbox/* set sort=date-received
folder-hook =sent set sort=date-sent
 
set nomove
set nomark_old 
 
# Splittet die Konsole und zeigt 15 Mails an
 set pager_index_lines=5
# Wie sollen die Mail sortiert werden?
set sort=threads
 
# Automatisch zitieren beim Antworten
set include=yes
 
# Wie soll zitiert werden
set indent_str="> "
 
# Suche mit Hilfe von abook als Adressbuch (siehe weiter unten!)
set query_command="abook --mutt-query '%s'"
 
# urlview: Ausgeben von links die in einer e-mail vorhanden sind,
# # zur Weiterverwendung mit einem Browser
macro index \cb |urlview\n 'call urlview to extract URLs out of a message'
macro pager \cb |urlview\n 'call urlview to extract URLs out of a message'
 
# Durch druecken der Taste a, kann man den Absender in das
# # Addressbuch aufnehmen
macro index a     "|abook --add-email\n" 'add sender to abook'
macro pager a     "|abook --add-email\n" 'add sender to abook'

fetchmail

Fetchmail wird nicht im deamon mode gestartet, sondern alle Minuten als cronjob aktiviert: */1 * * * * fetchmail -s > /dev/null 2>&1. Warum, weiss ich nicht mehr.
.fetchmailrc

.fetchmailrc
defaults proto pop3
set no bouncemail
#set daemon 300
set syslog
poll pop.1und1.de protocol pop3 envelope x-originally-to
 username "rz@draht-zieher.de" password "......"
mda "perl /usr/local/bin/saveatt"

ssmtp

Die Datei /etc/ssmtp/ssmtp.conf wird für die Konfiguration des smtp-Servers gebraucht. Momentan wird noch keine verschlüsselte SMTP Verbindung etabliert.

/etc/ssmtp/ssmtp.conf
root=rz@draht-zieher.de
AuthUser=rz@draht-zieher.de
AuthPass=......
mailhub=smtp.1und1.de
rewriteDomain=draht-zieher.de
hostname=ec1057
FromLineOverride=YES
#UseTLS=YES

Clienteinstellungen für Thunderbird

Bei bestimmten Versionen kommt es vor, dass Thunderbird angehängte Dateien automatisch einbettet. Das könnte dann dazu führen, dass die installierten Skripte die Batches nicht richtig auspacken können. In diesem Fall würde die Bestätigungsmail für den eingegangenen Batch ausbleiben. Um das Verhalten zu korrigieren muss man die Konfigurationsvariable mail.content_disposition_type auf 1 setzen. Dies geschieht über den Konfigurationseditor im Erweitert Reiter der Thunderbird Konfiguration.

Mail scripts

saveatt

Wird von fetchmail aufgerufen und extrahiert aus Mails die Anhänge. Soweit diese auf eine der Endungen .bch|.BCH|.rdr|.RDR|.het|.HET hört, werden die Dateien an den virtuellen Lochkartenleser übertragen bzw. im Fall von .het in das Tape Verzeichnis kopiert.

saveatt
#!/bin/perl -w
use Email::MIME;
use Email::MIME::Attachment::Stripper;
my $debug = 1;
my $message = do { local $/; <STDIN>; };
my $msg = Email::MIME->new($message);
my $from_header = $msg->header("From");
    my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
	$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
    $Monat+=1;
    $Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
    $Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
    $Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
    $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
    $Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden;
    $Jahr+=1900;
    my @from_addr = split(/<|>/, $from_header);
    open (COPY, ">$ENV{HOME}/received/$Jahr$Monat$Monatstag\_$Stunden$Minuten\_$from_addr[1]");
    print COPY "$message";
    close (COPY);
my $from_subject = $msg->header("Subject");
my $stripper = Email::MIME::Attachment::Stripper->new($msg);
my Email::MIME $nachricht = $stripper->message;
my @attachments = $stripper->attachments;
my @crdstacks;
my $tapelist = 0;
my $tapeovr = 0;
my $tapero = 0;
if ($from_subject eq "Mail delivery failed: returning message to sender") {exit(0)}
open (MAIL, "|/usr/sbin/sendmail \"$from_header\"");
print MAIL "From: <rz\@draht-zieher.de>\n";
print MAIL "TO: $from_header\n";
print MAIL "Subject: receipt: $from_subject\n\n";
print MAIL "Attached File(s):\n";
print MAIL "-----------------\n";
foreach $att (@attachments) {
	my $svn = $att->{filename};
	($debug == 1) ? (print MAIL "...attached filename: $svn\n") : ();
	$tapero = 0;
	$tapeovr = 0;
	$svn =~ s#(.+)\.(\w+)#$1#;
	$ext = uc($2);
	if ($ext =~ m/^(RO|OVR)/i) {
	    ($ext =~ m/^(RO)/i) ? ($tapero = 1) : ($tapeovr = 1);
	    $svn =~ s#(.+)\.(\w+)#$1#;
	    $ext = uc($2);
	}
	if ($ext =~ m/^(RO|OVR)/i) {
	    ($ext =~ m/^(RO)/i) ? ($tapero = 1) : ($tapeovr = 1);
	    $svn =~ s#(.+)\.(\w+)#$1#;
	    $ext = uc($2);
	}
	if($ext =~ m/^(BCH|BATCH|DATA|RDR|JOB)/i) {
        	$dir = "/dos5050/spool";
        	($ext =~ m/^(BCH|BATCH)/i) ? ($crd = "BATCH") : ($crd = "DATA");
        	push (@crdstacks,"$dir/$svn.$ext");
		$tapeovr = 1;
	}
	if ($ext =~ m/^(HET|AWS)/i)  {
		$tapelist = 1;
		$dir = "/dos5050/tape";
		$svn = uc($svn);
	}
	($ext =~ m/^(DSK|CDSK)/i) ? ($dir = "/dos5050/dasd") : ();
	($debug == 1) ? (print MAIL "...copy file: $svn.$ext\n") : ();
	if ($ext =~ m/^(BCH|BATCH|DATA|RDR|JOB|HET|AWS|DSK|CDSK)/i) {
	print MAIL "$dir/$svn.$ext\n";
	if (((-e "$dir/$svn.$ext") && ($tapeovr == 1)) || (! -e "$dir/$svn.$ext")) {
	    open (ATTFILE, ">$dir/$svn.$ext");
	    print ATTFILE $att->{payload};
	    close ATTFILE;
	    $cuid = getpwnam("DrahtZieher");
	    $cgid = getgrnam("DrahtZieher");
	    ($tapero == 0) ? (chmod 0660, "$dir/$svn.$ext") : (chmod 0440, "$dir/$svn.$ext");
	    chown $cuid, $cgid, "$dir/$svn.$ext";
	    if ($debug == 1) {
		print MAIL "...stored file: ";
		open (LISTE, "ls -gGh $dir/$svn.$ext|");
		while (<LISTE>) {
			print MAIL "$_";
		}
		close (LISTE);
	    }
	} else {
	    print MAIL "...did not overwrite existing file $dir/$svn.$ext, resend it named: $svn.$ext.ovr\n";
	}
	}
}
print MAIL "-----------------\n";
$crdstnum = @crdstacks;
if ($crdstnum ne 0) {
	eval {
	local $SIG{ALRM} = sub { die "timeout" };
	alarm(20); #Timeout after 20 sec
	eval{
        	use Socket;
		($debug == 1) ? (print MAIL "...starting socket connections\n") : ();
	        my $host = shift || '127.0.0.1';
	        my $port = shift || 2501;
		my $proto = getprotobyname('tcp');
		my $iaddr = inet_aton($host);
		my $paddr = sockaddr_in($port, $iaddr);
	        socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
		connect(SOCKET, $paddr) or die "connect: $!";
		($debug == 1) ? (print MAIL "...open card stacks\n") : ();
		foreach $crdstack (@crdstacks) {
			$crd1 = 1;
			$crd1e = 0;
			($debug == 1) ? (print MAIL "...sending $crdstack to cardreader\n") :();
			open (IN, $crdstack);
			while (<IN>){
				$crd1c = $_; 
				if ($crd1 == 1) {
					@crd1p = split(/ /, $crd1c);
					if ($crd1p[0] eq "\/\/") {
						$crd1t = $crd1p[1];
					} else {
						$crd1t = $crd1p[0];
					}
					$crd1t = uc($crd1t);
					if ($crd1t =~ m/^(BATCH|DATA)/i) {
						$crd1e = 0;
						($debug == 1) ? (print MAIL "$crd1c\n") : ();
					} else {
						($debug == 1) ? (print MAIL "...incorrect batchcard, assume: DATA RZEERR,DISP=L\n") :();
						print SOCKET "DATA RZEERR,DISP=L\n";
						$crd1e = 1;
					}
				}
				print SOCKET "$crd1c";
				$crd1 = 0;
			}
			print SOCKET "\n";
			($crd1e == 1) ? (print SOCKET "\/\&\& \n") : ();
			close (IN);
			unlink ($crdstack);
		}
        	close SOCKET or die "close: $!";
	};
	alarm(0);
	};
	if ($@ and $@ !~ /timeout/){
		alarm(0);
		die;
	}
}
print MAIL "\n";
if (($tapelist == 1) && ($debug == 1)) {
    print MAIL "List of existing tapes:\n";
    print MAIL "-----------------------\n";
    open (LISTE, "ls -gGh /DOS5/tape|");
    while (<LISTE>) {
	print MAIL "$_";
    }
    close (LISTE);
    print MAIL "-----------------------\n";
}
close (MAIL);

print2mail

Wird über einen Mechanismus aus dem Makrooperator des DOS-5 gestartet und mit dem Namen der Druckliste, sowie der Empfängermailadresse parameterisiert. Vor dem Versand wird die Druckliste in das PDF Format konvertiert.

print2mail
#!/bin/bash
#export HOME=/home/root
cat > /tmp/print2mail <<-EOF
.
EOF
ds=$1
ds=${ds%.*}
text2pdf -o /DOS5/SPOOL/$ds.pdf /DOS5/SPOOL/$1
export HOME=/root 
mutt -s "$ds printed at `date +%H:%M`" -a /DOS5/SPOOL/$ds.pdf -- $2 < /tmp/print2mail
rm /DOS5/SPOOL/$1
rm /DOS5/SPOOL/$ds.pdf
exit 0

tape2mail

versendet ein virtuelles Magnetband an die angegebene Mailadresse. Kann mit Macro TAP2Mail im DOS-5 aufgerufen werden. Ist der erste Parameter ein „?“, dann wird eine Übersicht der vorhandenen Magnetbänder versendet.

tape2mail
#!/bin/bash
#export HOME=/home/root
if [ "$1" == "?" ]
then
cat > /tmp/print2mail <<-EOF
From: Rechenzentrum <rz@draht-zieher.de>
Subject: Tape directory listing sent at `date`
 
EOF
ls -gGhu /DOS5/tape >> /tmp/print2mail
/usr/sbin/sendmail $2 < /tmp/print2mail
else
cat > /tmp/print2mail <<-EOF
.
EOF
mutt -a /DOS5/TAPE/$1.HET -s "Tape $1 sent at `date`" -- $2 < /tmp/print2mail
fi
exit 0

Benutzung der Mail-Funktionen im DOS

Drucklisten

Wenn in einem Batch eine Kommentaranweisung folgenden Formats

* SPL mailadresse

enthalten ist, wird die Druckliste separat über den Drucker 00F ausgegeben, in ein PDF-Dokument gewandelt und per eMail an den entsprechenden Empfänger gesendet. Dies funktioniert nur dann, wenn der Name der Druckliste mit dem Batchnamen identisch ist und die Liste nicht separiert wird.
Man kann auch später eine Druckliste aus dem DOS-5/ES per Mail versenden durch Aufruf von

PRT2MAIL liste,mailadresse

Damit wird die Liste namens liste an mailadresse verschickt.

Magnetbänder

Man kann auch eine Mail an rz@draht-zieher.de senden, an der eine .HET Datei angehängt ist. Notwendig sind Dateinamen, die nur aus Großbuchstaben und Ziffern bestehen. Die empfangenen Dateien werden automatisch in das Verzeichnis /dos5050/tape einsortiert.
Mit dem Operatormacro TAP2MAIL lassen sich Tapes oder auch eine Übersicht der bisher existenten Tapes an eine Mailadresse schicken. TAP2MAIL ? email@adresse.com sendet die Liste, TAP2MAIL xxxxxx email@adresse.com das konkrete Tape xxxxxx.

Lochkarten

Man kann auch eine Mail an rz@draht-zieher.de senden, an der eine .bch, .BCH, .rdr oder .RDR Datei angehängt ist. Die empfangenen Dateien werden automatisch dem virtuellen Lochkartenleser 00C übergeben.

mail_conf.txt · Zuletzt geändert: 2017/11/13 10:43 von roman