Cronjob meldet "Invalid or incomplete multibyte or wide character" beim Versenden von Mail
Liebe Liste, ein Cronjob möchte eine Mail versenden, was zu folgendem Ergebnis führt (=Problem): -------------schnipp--------------------- running daily cronjob scripts SCRIPT: output (stdout && stderr) follows Invalid or incomplete multibyte or wide character . . . message not sent. "/root/dead.letter" 34/1161 SCRIPT: 03_backup ------- END OF OUTPUT -------------schnapp---------------------- Folgendes habe ich bisher herausgefunden: * Es geht um deutsche Umlaute, die im Text iso-8859-1-codiert sind * Ich verwende SUSE 10.0 mit "mailx version nail 11.25 7/29/05" (Standard-Installation) * Normal als root eingeloggt, kann ich die Mail versenden, z.B. mail -s "TEST123" max.muster@domain.de </root/dead.letter funktioniert fehlerfrei, die Mail kommt an * Mit "sudo" kann ich den Fehler reproduzieren, also sudo mail -s "TEST123" max.muster@domain.de </root/dead.letter geht _nicht_. * Ich dachte an Login-Shell oder nicht, aber "su -l" oder "su" machen keinen Unterschied, beides _geht_. * In /root/.mailrc steht: set NAIL_EXTRA_RC=~/.nailrc * In /root/.nailrc steht (Persönliche Daten geändert) account gmx { set folder=imaps://999999@imap.gmx.net set password-999999@imap.gmx.net=geheim set record=+Gesendet set smtp=mail.gmx.net set smtp-auth=cram-md5 set smtp-auth-user=999999 set smtp-auth-password=geheim } account gmx -> Dies scheint benutzt zu werden, denn die Fehlermeldung bekomme ich ja witzigerweise über GMX gemailt * In /etc/mail.rc steht (nix von mir) set asksub append dot save crt=20 ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Via * Im Internet finde ich zwar Einiges, aber wenig Erhellendes Hat jemand eine Idee, wie ich im Cronjob Umlaute in Mails verschicken kann? Wieso geht es auf der Konsole aber nicht mit Cron? Vielen Dank und viele Grüße Rainer -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
ein Cronjob möchte eine Mail versenden, was zu folgendem Ergebnis führt (=Problem):
-------------schnipp---------------------
running daily cronjob scripts
SCRIPT: output (stdout && stderr) follows
Invalid or incomplete multibyte or wide character . . . message not sent. "/root/dead.letter" 34/1161
Darf ich Dir einen Vorschlag machen? Nimm einfach mutt. Alles, was mit mailx anfängt, ist eine totale Katastrophe. Wie Du siehst. Volker -- Volker Kuhlmann is list0570 with the domain in header http://volker.dnsalias.net/ Please do not CC list postings to me. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Rainer Wolff wrote:
Liebe Liste,
ein Cronjob möchte eine Mail versenden, was zu folgendem Ergebnis führt (=Problem):
-------------schnipp---------------------
running daily cronjob scripts
SCRIPT: output (stdout && stderr) follows
Invalid or incomplete multibyte or wide character . . . message not sent. "/root/dead.letter" 34/1161 SCRIPT: 03_backup ------- END OF OUTPUT
-------------schnapp----------------------
Folgendes habe ich bisher herausgefunden:
* Es geht um deutsche Umlaute, die im Text iso-8859-1-codiert sind * Ich verwende SUSE 10.0 mit "mailx version nail 11.25 7/29/05" (Standard-Installation) * Normal als root eingeloggt, kann ich die Mail versenden, z.B. mail -s "TEST123" max.muster@domain.de </root/dead.letter funktioniert fehlerfrei, die Mail kommt an * Mit "sudo" kann ich den Fehler reproduzieren, also sudo mail -s "TEST123" max.muster@domain.de </root/dead.letter geht _nicht_. * Ich dachte an Login-Shell oder nicht, aber "su -l" oder "su" machen keinen Unterschied, beides _geht_. * In /root/.mailrc steht: set NAIL_EXTRA_RC=~/.nailrc * In /root/.nailrc steht (Persönliche Daten geändert) account gmx { set folder=imaps://999999@imap.gmx.net set password-999999@imap.gmx.net=geheim set record=+Gesendet set smtp=mail.gmx.net set smtp-auth=cram-md5 set smtp-auth-user=999999 set smtp-auth-password=geheim } account gmx -> Dies scheint benutzt zu werden, denn die Fehlermeldung bekomme ich ja witzigerweise über GMX gemailt * In /etc/mail.rc steht (nix von mir) set asksub append dot save crt=20 ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Via * Im Internet finde ich zwar Einiges, aber wenig Erhellendes
Hat jemand eine Idee, wie ich im Cronjob Umlaute in Mails verschicken kann? Wieso geht es auf der Konsole aber nicht mit Cron?
Vermutlich weil die Umgebung nicht die gleiche ist. Du kannst das am einfachsten lösen, indem du die Mail kodierst, bevor du sie auf die Reise schickst. Ich muss dies auch machen für die Logberichte des Servers, weil sonst genau die Strings, welche eine Spam abblocken, den Logbericht ebenfalls abschießen. (^-^) #!/usr/bin/perl use MIME::Lite; ### Create a new message: $msg = MIME::Lite->new( From => 'logreport+server1@example.com', To => 'postmaster@example.com', # Cc => 'some@other.com, some@more.com', Subject => 'pflogsumm', Date => `date`, Type => 'text/plain', Encoding => 'base64', Path => '/tmp/pflogg', ); $msg->send; -- Sandy Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Sandy, danke für den Input. Dein PERL-Skript wäre sicherlich auch ein Ansatz, aber ich habe den Fehler noch nicht verstanden. Das mit der Umgebung hatte ich auch schon ansatzweise verfolgt. Das Problem nochmal: Funktioniert nicht (wie mit cron): cat mailtext | sudo mail -s "TEST" name@domain.de Funktioniert: cat mailtext | mail -s "TEST" name@domain.de Jetzt dachte ich, es gibt Unterschiede, das sehe ich ja z.B. mit: sudo env Also mache ich: env >umgebung Und schreibe dann ein Skript nailtest: . umgebung cat mailtext | mail -s "TEST" name@domain.de und rufe es auf mit: sudo ./nailtest und erhalte wieder die alte Fehlermeldung! Ich habe weiter probiert: cat mailtext | recode ..ascii | sudo mail -s "TEST" name@domain.de funktioniert auf einmal, allerdings sind dann die Umlaute eben zerschossen. Auch Einträge in .mailrc und/oder .nailrc a la: set sendcharsets=iso-8859-1,iso-8859-15,utf-8 set tty-charset=iso-8859-15 führen zu nichts. Ich bin ziemlich ratlos, kann aber nicht einsehen, dass es nicht funktionieren soll. Wo liegt mein Fehler? Viele Grüße Rainer Am Freitag, den 08.06.2007, 19:00 +0200 schrieb Sandy Drobic:
Rainer Wolff wrote:
Liebe Liste,
ein Cronjob möchte eine Mail versenden, was zu folgendem Ergebnis führt (=Problem):
-------------schnipp---------------------
running daily cronjob scripts
SCRIPT: output (stdout && stderr) follows
Invalid or incomplete multibyte or wide character . . . message not sent. "/root/dead.letter" 34/1161 SCRIPT: 03_backup ------- END OF OUTPUT
-------------schnapp----------------------
Folgendes habe ich bisher herausgefunden:
* Es geht um deutsche Umlaute, die im Text iso-8859-1-codiert sind * Ich verwende SUSE 10.0 mit "mailx version nail 11.25 7/29/05" (Standard-Installation) * Normal als root eingeloggt, kann ich die Mail versenden, z.B. mail -s "TEST123" max.muster@domain.de </root/dead.letter funktioniert fehlerfrei, die Mail kommt an * Mit "sudo" kann ich den Fehler reproduzieren, also sudo mail -s "TEST123" max.muster@domain.de </root/dead.letter geht _nicht_. * Ich dachte an Login-Shell oder nicht, aber "su -l" oder "su" machen keinen Unterschied, beides _geht_. * In /root/.mailrc steht: set NAIL_EXTRA_RC=~/.nailrc * In /root/.nailrc steht (Persönliche Daten geändert) account gmx { set folder=imaps://999999@imap.gmx.net set password-999999@imap.gmx.net=geheim set record=+Gesendet set smtp=mail.gmx.net set smtp-auth=cram-md5 set smtp-auth-user=999999 set smtp-auth-password=geheim } account gmx -> Dies scheint benutzt zu werden, denn die Fehlermeldung bekomme ich ja witzigerweise über GMX gemailt * In /etc/mail.rc steht (nix von mir) set asksub append dot save crt=20 ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Via * Im Internet finde ich zwar Einiges, aber wenig Erhellendes
Hat jemand eine Idee, wie ich im Cronjob Umlaute in Mails verschicken kann? Wieso geht es auf der Konsole aber nicht mit Cron?
Vermutlich weil die Umgebung nicht die gleiche ist. Du kannst das am einfachsten lösen, indem du die Mail kodierst, bevor du sie auf die Reise schickst. Ich muss dies auch machen für die Logberichte des Servers, weil sonst genau die Strings, welche eine Spam abblocken, den Logbericht ebenfalls abschießen. (^-^)
#!/usr/bin/perl use MIME::Lite;
### Create a new message: $msg = MIME::Lite->new( From => 'logreport+server1@example.com', To => 'postmaster@example.com', # Cc => 'some@other.com, some@more.com', Subject => 'pflogsumm', Date => `date`, Type => 'text/plain', Encoding => 'base64', Path => '/tmp/pflogg', );
$msg->send;
-- Sandy
Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Rainer Wolff wrote:
Hallo Sandy,
danke für den Input. Dein PERL-Skript wäre sicherlich auch ein Ansatz, aber ich habe den Fehler noch nicht verstanden. Das mit der Umgebung hatte ich auch schon ansatzweise verfolgt. Das Problem nochmal:
Funktioniert nicht (wie mit cron): cat mailtext | sudo mail -s "TEST" name@domain.de
Funktioniert: cat mailtext | mail -s "TEST" name@domain.de
Jetzt dachte ich, es gibt Unterschiede, das sehe ich ja z.B. mit: sudo env
Also mache ich: env >umgebung
Und schreibe dann ein Skript nailtest:
. umgebung cat mailtext | mail -s "TEST" name@domain.de
und rufe es auf mit: sudo ./nailtest
und erhalte wieder die alte Fehlermeldung!
Ich habe weiter probiert: cat mailtext | recode ..ascii | sudo mail -s "TEST" name@domain.de
funktioniert auf einmal, allerdings sind dann die Umlaute eben zerschossen.
Das würde ich als "funktioniert nicht" bezeichnen. (^-^)
Auch Einträge in .mailrc und/oder .nailrc a la: set sendcharsets=iso-8859-1,iso-8859-15,utf-8 set tty-charset=iso-8859-15 führen zu nichts.
Ich bin ziemlich ratlos, kann aber nicht einsehen, dass es nicht funktionieren soll. Wo liegt mein Fehler?
Mit welchem Befehl hast du dafür gesorgt, dass "mailtext" korrekt kodiert wurde? Ich sehe hier keinen. Das macht eben das kleine Perlscript. Im besten Falle wird mail dir den Text als Anhang servieren, weil nicht kodierte Zeichen entdeckt werden. -- Sandy Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, den 10.06.2007, 09:02 +0200 schrieb Sandy Drobic:
Rainer Wolff wrote:
Hallo Sandy,
danke für den Input. Dein PERL-Skript wäre sicherlich auch ein Ansatz, aber ich habe den Fehler noch nicht verstanden. Das mit der Umgebung hatte ich auch schon ansatzweise verfolgt. Das Problem nochmal:
Funktioniert nicht (wie mit cron): cat mailtext | sudo mail -s "TEST" name@domain.de
Funktioniert: cat mailtext | mail -s "TEST" name@domain.de
Jetzt dachte ich, es gibt Unterschiede, das sehe ich ja z.B. mit: sudo env
Also mache ich: env >umgebung
Und schreibe dann ein Skript nailtest:
. umgebung cat mailtext | mail -s "TEST" name@domain.de
und rufe es auf mit: sudo ./nailtest
und erhalte wieder die alte Fehlermeldung!
Ich habe weiter probiert: cat mailtext | recode ..ascii | sudo mail -s "TEST" name@domain.de
funktioniert auf einmal, allerdings sind dann die Umlaute eben zerschossen.
Das würde ich als "funktioniert nicht" bezeichnen. (^-^)
Auch Einträge in .mailrc und/oder .nailrc a la: set sendcharsets=iso-8859-1,iso-8859-15,utf-8 set tty-charset=iso-8859-15 führen zu nichts.
Ich bin ziemlich ratlos, kann aber nicht einsehen, dass es nicht funktionieren soll. Wo liegt mein Fehler?
Mit welchem Befehl hast du dafür gesorgt, dass "mailtext" korrekt kodiert wurde? Ich sehe hier keinen. Das macht eben das kleine Perlscript. Im besten Falle wird mail dir den Text als Anhang servieren, weil nicht kodierte Zeichen entdeckt werden.
Der Inhalt der Mail ist die Ausgabe eines Backuplaufs, und der wird explizit mit recode nach ISO-8859-1 umgewandelt. Das Problem ist jedoch gelöst (dank Attila, der mich privat angeschrieben hat): Es liegt daran, dass mail bzw. nail sich auf die Umgebungsvariable "LANG" verlässt, egal ob in .mailrc bzw. .nailrc etwas anderes steht, und auch egal wenn es in der Man-Page anders beschrieben ist. In der Umgebung, die Cron vorfindet, gibt es kein "LANG", daher ist "US-ASCII" als irgendein Default der einzig mögliche Zeichensatz. Mit einem Konstrukt a la: "export LANG=de_DE@euro && mail ..." klappt es. Meine funktionierende Skript-Zeile heißt nun: export LANG=de_DE@euro && mail -s "Daily Backup Report $(date +%d.\ %B\ %Y -d yesterday)" name@domain.de <$BACKUP_REPORT und alles funktioniert wunderbar. Danke an alle fürs Mitdenken! Viele Grüße Rainer
-- Sandy
Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 10. Juni 2007 21:10 schrieb Rainer Wolff:
(...). export LANG=de_DE@euro && mail -s "Daily Backup Report $(date +%d.\ %B\ %Y -d yesterday)" name@domain.de <$BACKUP_REPORT (...).
IMHO ist am "export LANG=de_DE@euro && mail ..."-Konstrukt etwas überflüssig: Eigentlich sollte auch so etwas wie "LANG=de_DE@euro mail ..." funktionieren. Gruß Jan -- Every man has the right to be wrong in his opinions, but no man has the right to be wrong in his facts. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Jan Ritzerfeld
-
Rainer Wolff
-
Sandy Drobic
-
Volker Kuhlmann