Mail-Versand ohne SMPT-Sever

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

Hi @ all,

gibt es eine Möglichkeit mit Python E-Mails (mit Anhang) ohne externen Mailserver zu versenden (wie das bei PHP möglich is)?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Erklär mir doch mal bitte, wie man mit PHP Mails ohne einen Mailserver verschickt?

Das geht mit PHP genauso wenig wie mit Python.

Für ein nützliches Script siehe hier: simplemail.py
Zuletzt geändert von nemomuk am Samstag 3. April 2010, 22:47, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bonzo1993 hat geschrieben:(wie das bei PHP möglich is)
Wie ist es denn in PHP moeglich? Da das reichlich sprachunabhaengig ist, liesse sich das nachbilden.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

cofi hat geschrieben:
Bonzo1993 hat geschrieben:(wie das bei PHP möglich is)
Wie ist es denn in PHP moeglich?
Ist es nicht.
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

entweder ganz einfach mit der mail()-Funktion oder mit einer anderen Bibliothek:

Code: Alles auswählen

<?php
  require_once("hmm/htmlMimeMail.php"); 
  $mail = new htmlMimeMail();
  $mail->setFrom("absender@test.de");
  $mail->setSubject("Mail mit Anhang");
  $mail->setText("siehe Anhang");

  $inhalt = $mail->getFile("bild.jpg");
  $mail->addAttachment($inhalt, "mail_bild.jpg");

  $mail->send(array("newuser@localhost"));
?>

Wo habe ich hier einen externen SMTP-Mailserver (bei dem ich mich anmelden hätte müssen, oder dem ich die Daten senden hätte müssen) gebraucht?? Nirgendswo! Nicht umsonst gibt es bei der Forensoftware phpBB die Möglichkeit entweder mit externen SMTP-Mailserver die Daten zu versenden, oder ohne...
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

so.. es funktioniert sowohl in PHP als auch in Python:

Code: Alles auswählen

# Import smtplib for the actual sending function
import smtplib

# Here are the email package modules we'll need
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

COMMASPACE = ', '

# Create the container (outer) email message.
msg = MIMEMultipart()
msg['Subject'] = 'Our family reunion'
# me == the sender's email address
# family = the list of all recipients' email addresses
msg['From'] = me
msg['To'] = COMMASPACE.join(family)
msg.preamble = 'Our family reunion'

# Assume we know that the image files are all in PNG format
for file in pngfiles:
    # Open the files in binary mode.  Let the MIMEImage class automatically
    # guess the specific image type.
    fp = open(file, 'rb')
    img = MIMEImage(fp.read())
    fp.close()
    msg.attach(img)

# Send the email via our own SMTP server.
s = smtplib.SMTP()
s.sendmail(me, family, msg.as_string())
s.quit()
beide male brauch ich keinen externen (SMTP)-Mailserver...
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Weil bei PHP als auch bei der smtlib von Python standardmäßig mit localhost verbunden wird und du dennoch auf einen normalen SMTP-Server zurückgreifst.
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

Betonung liegt auf extern und das is localhost wirklich nicht...
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Bonzo1993 hat geschrieben:Betonung liegt auf extern und das is localhost wirklich nicht...
Dann wird die Frage klarer aber nicht verständlicher. Unter "extern" verstehst du offensichtlich einen Mailserver, der auf einer anderen Maschine läuft (oder vielleicht auch unter einer anderen IP erreichbar ist, was nicht das gleiche ist).

Natürlich kannst du mit einem auf dem gleichen System laufenden Mailserver genau so Mails verschicken wie mit einem weiter entfernten. Die Frage zielte folglich wohl eher dahin, ob das ohne Authentifizierung möglich ist. Dazu kann man nur ein deutliches "Vielleicht!" sagen. Wenn der Mailserver so konfiguriert ist, dass er von lokalen Sendern einen Zugriff ohne Authentifizierung erlaubt, dann geht das. Wenn nicht, nicht.
Apophis
User
Beiträge: 6
Registriert: Mittwoch 19. Mai 2010, 09:21

Im Prinzip kann man ja mit jedem Mailserver E-Mails an jede E-Mail Adresse schicken. Wenn die E-Mail Adresse nicht zum eigenen System gehört, muss der Mailserver den Mailserver der Zieldomain kontaktieren um die Nachricht zu verschicken. Eigentlich sollte es da kein Problem sein den Mailserver auf der Zieldomain direkt anzusprechen ohne die Mail erst über einen lokalen oder externen Server zu schicken.
Problematisch könnte es höchstens werden wenn andere Mail Server durch ne Firewall gespert werden, sodass Mails immer über einen zulässigen Server versendet werden müssen.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Apophis hat geschrieben:Im Prinzip kann man ja mit jedem Mailserver E-Mails an jede E-Mail Adresse schicken. Wenn die E-Mail Adresse nicht zum eigenen System gehört, muss der Mailserver den Mailserver der Zieldomain kontaktieren um die Nachricht zu verschicken. Eigentlich sollte es da kein Problem sein den Mailserver auf der Zieldomain direkt anzusprechen ohne die Mail erst über einen lokalen oder externen Server zu schicken.
Jahrelang ging das auch. Allerdings wird heutzutage kein ernsthaft konfigurierter Mail-Server einfach ungeprüft irgendwelche Mails annehmen. Die Nummer 1 Anti-Spam Maßnahme ist es, keine Mails von IPs anzunehmen, die nicht selbst als Mailserver ausgezeichnet sind.

Und selbst wenn das Skript auf einem Server mit korrekten MX und reverse DNS Einträgen liegt, ist die Nummer 2 Anti-Spam Maßnahme das so genannte Greylisting, also das ablehnen der Mails beim ersten Versuch. Ein Mailserver versucht es immer wieder. Ein schnell dahin gebasteltes SMTP Skript wohl eher nicht. Genau aus dem Grund ist die Maßnahme ja gut gegen Spam.

Man sollte also immer einen Mailserver zum Mail versandt nutzen (klingt irgendwie logisch). Auch wenn es theoretisch ohne geht (indem man selbst einen SMTP Server bastelt), kommen Mails in der Praxis dann meistens einfach nicht an.
Bottle: Micro Web Framework + Development Blog
Antworten