PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sendmail-Frage - python<>shell



vegaS
10.11.2006, 20:37
Hallo,
da bin ich wohl Anfänger :(

Wieso funktioniert bei mir folgendes Python-Skript einwandfrei:

#!/usr/bin/python

def mail(mail_from,mail_to,mail_subject,mail_text):
import smtplib,string
mail_text="To: "+mail_to+"\nSubject: "+mail_subject+"\n\n"+mail_text
server = smtplib.SMTP('localhost')
server.sendmail(mail_from,mail_to,mail_text)
server.quit()

mail_from = "test@test.de"
mail_to = "test@test.de"
mail_subject = "test"
mail_text = "Hallo, nur ein Test.\n"

mail(mail_from,mail_to,mail_subject,mail_text)

aber dieses shell-Skript funktioniert nicht:


#!/bin/sh

mail_from="test@test.de"
mail_to="test@test.de"
mail_subject="test"
mail_text="Hallo, nur ein Test.\n"

(echo "To: $mail_to"
echo "From: $mail_from"
echo "Subject: $mail_subject"
echo ""
echo ""
echo "$mail_text"
echo ""
echo "") | /usr/sbin/sendmail -oi -t

exit 0

auch auf der Kommandozeile geht nix. ?(


root@box:/usr/sbin$ sendmail -t
From: test@test.de
To: test@test.de
Subject: test

Hallo, nur ein Test.
.

Wie kann ich auf der shell nach der gleichen Methode senden, wie es python tut.

danke
vegaS

theton
11.11.2006, 07:23
Mit 'mail'.

vegaS
11.11.2006, 09:17
tatsache! danke! :D

Aber wieso klappt es mit mail?
Geht es beim Senden direkt an den Ziel-Server und
erwartet lokal keinen eingerichteten Account?

vegaS

Jabo
11.11.2006, 11:57
Geht es beim Senden direkt an den Ziel-Server und
erwartet lokal keinen eingerichteten Account?

Hallo,

ich verstehe die Frage nicht wirklich....

Es ist ein Mailprogramm (wie Evolution oder KMail - nur halt für die Kommandozeile), das an den lokalen MTA die Nachricht übergibt. Dabei hast du ja ne Konsole auf bzw. das Script läuft als ein bestimmter User. Soviel zur Sender-Seite.

Von der Empfänger-Seite weiß "mail" natürlich nicht, ob die Adresse korrekt ist und existiert. Dort schlägt sie einfach auf und der dortige MDA versucht sie zuzustellen. Das kann natürlich auch ein "virtual user" sein oder ein Alias, der auf einen richtigen User zeigt oder was auch immer.

vegaS
12.11.2006, 10:10
Hallo Jabo,

ich habe auf meinem Server keinen mail-Account (pop, smtp) eingerichtet, so wie ich es zum Beispiel bei Evolution, KMail, Thunderbird mache. Trotzdem kann ich mit /usr/bin/mail mails senden. (Mit /usr/sbin/sendmail geht es nicht !?!?)

Normalerweise sende ich eine Mail per SMTP an meinen "Mail-Server", einen Rechner von gmx, web oder dem meiner eigene Domain. Dazu muss ich extra "pop before smtp" machen, um auch ja der zu sein, der ich bin.

Jetzt habe ich mir vorgestellt, es muss zwei Möglichkeiten geben, eine mail zu senden:
1, so wie es zum Beispiel gmx erwartet (smtp mit Passwort beim pop)
2, so wie die mail von gmx direkt an den Zielserver geleitet wird (natürlich ohne Passwort)

Anders gefragt: Wenn ich mit mail eine 'mail' sende, geht diese dann direkt an den Mailserver der Ziel-Domain (smtp-connect)? Also verbindet sich mein Rechner beim senden je nach Ziel-Adresse mit verschiedenen Servern und nicht immer mit dem gleichen ... smtp.test.de

Argh, X(
ich kann mich nicht richtig ausdrücken...

vegaS

Jabo
12.11.2006, 11:01
ich habe auf meinem Server keinen mail-Account (pop, smtp) eingerichtet, so wie ich es zum Beispiel bei Evolution, KMail, Thunderbird mache.

Hm, das ist aber ein kleiner Unterschied...

Wenn du so einen grafischen Mail-Client benutzt, um via GMX Post zu versenden, mußt du natürlich die GMX-Daten eintragen, sonst nimmt GMX die nicht an.

Aber *innerhalb* deines Systems geht SMTP auch, und du bist ja als User angemeldet! Du kannst ja auch beispielsweise Systemnachrichten in eine lokale Mailbox leiten, z.B. die Meldungen von "cron" an den User "root". Lokal *ist* dein User-Account eine Mailadresse! Prinzipiell kannst du auch an "dich@gmx.de" von der Kommandozeile mailen - der Absender ist dann "du@dein_Rechner", was wegen der Spamproblematik aber von den meisten großen Mailprovidern geblockt wird (das ist jetzt aber ein weiteres Thema...)

Das erklärt aber, wieso mail im Prinzip geht (bei lokalen Usern wie "root" oder deinem eigenen Login kann "@Rechner<.tld>" wegfallen: mail -s Test root plus irgend welcher Text sollte klappen, root kriegt die direkt ins Postfach).

vegaS
12.11.2006, 11:20
Dass es lokal funktioniert, verstehe ich ja.

Aber ich sende ja ohne Account an eine externe eMail-Adresse.
Wozu braucht man also Accounts? Wieso klappt das mit dem Programm 'mail' und nicht mit 'sendmail'?

Schau ich mir die Route im Header der mail an, so sehe ich, dass mein Linux-Rechner direkt an den mx0 meiner mail-domain gesendet hat. Das beantwortet meine Frage....

Bei gmx als Ziel-Domain klappt es auch, aber die mail rutscht in den Ordner "SpamVerdacht". Klar, denen ist die Route der mail zu kurz - offensichtlich gab es ja keinen Provider des Absenders...

ich hoffe ich habe es jetzt verstanden :-)
vegaS

P.S: wir sind o.T., sorry

Jabo
12.11.2006, 14:04
Hallo,

ich habe übrigens gerade mal dein Shellscript genommen und mir damit eine Mail von "root" an "jens" geschickt (nur diese Variablen auch angepaßt, dann chmod +x und ausgeführt). Die kam sofort an....



Aber ich sende ja ohne Account an eine externe eMail-Adresse.
Wozu braucht man also Accounts?

Na ja, du mailst ja von einem gültigen Account (auf deinem Rechner) *an* ein gültiges Account... nur halt nicht mit deiner GMX-Adresse als Absender, sondern mit deiner lokalen... Um mit deiner GMX-Adresse als Absender zu mailen, brauchst du ein Account von denen - und *deren* SMTP-Server, nicht deinen! Wenn du dein GMX-Login übergibst, aber SMTP geht von *deinem* Rechner aus, lehnt GMX die Annahme der Mail ab, egal wohin sie dann soll.


Schau ich mir die Route im Header der mail an, so sehe ich, dass mein Linux-Rechner direkt an den mx0 meiner mail-domain gesendet hat. Das beantwortet meine Frage....

Eben, du hast einen MTA am Start, der genau das kann, Mail zustellen.



Bei gmx als Ziel-Domain klappt es auch, aber die mail rutscht in den Ordner "SpamVerdacht". Klar, denen ist die Route der mail zu kurz - offensichtlich gab es ja keinen Provider des Absenders...

Na, erstens mal hast du keinen DNS-Eintrag als "MX" - und selbst wenn, über DynDNS zum Beispiel, dann vermutlich eine dynamisch zugewiesene IP - und GMX taggt die als Spam, weil die beispielsweise von SORBS (http://www.de.sorbs.net/faq/dul.shtml) gelistet wird. Dort tragen Provider wie etwa Hansenet ihre dynamisch zu vergebenden IP-Blöcke ein und wenn von so einer IP eine Mail kommt, dann war's schon mal kein regulärer "MX", sondern was Gebasteltes.

Wolfgang
12.11.2006, 14:18
Hallo

Wenn du versuchst mit einer dynamischen IP Mails an einem Mailserver einzutüten, musst du schon Glück haben wenn sie überhaupt angenommen wird.
Um genau das möglich zu machen, gibt es die verschiedenen Authentifizierungsmöglichkeiten der Mailserver.

Im Grunde kannst du das ganze Spielchen auch mal mit telnet direkt durchführen, dann siehst du wie die Gegenstelle antwortet.
Hier mal ein kleiner Dialog, eines richtig eingerichteten Mailservers, der keine mails von dynamischen IP annimmt:


telnet servername.de 25
Trying XXX.YYY.ZZZ.94...
Connected to servername.de.
Escape character is '^]'.
220 servername.de ESMTP Postfix (Debian/GNU)
HELO Nietzsche
250 servername.de
mail from: wolle@nietzsche
250 Ok
rcpt to: root@server.de
554 Service unavailable; Client host [8x.1x4.112.xx0] blocked using dynablock.njabl.org; Dynamic/Residential IP range listed by NJABL dynablock - http://njabl.org/dynablock.html
quit
221 Bye
Connection closed by foreign host.



Servername und IP gefälscht.

Mail macht nicht anderes, als diesen Dialog durchzuspielen.

Gruß Wolfgang