Probleme mit E-Mail-Versenden

droger

Grünschnabel
hi
ich habe hier im forum die beiden tutorials gesehen, mit denen man emails erstellen und versenden kann:
http://www.tutorials.de/forum/php-tutorials/231819-emails-mit-php-erstellen.html
http://www.tutorials.de/forum/php-t...eliebigen-server-verschicken.html#post1208272

im ersten tutorial steht etwas von imap. was muss ich da genau ändern wenn das nicht unterstützt wird?

und noch eine frage: muss ich eventuell das hier aus dem 2ten tutorial:

PHP:
public function __construct($host="localhost",$authentication=false,$username="",$password="",$ssl=false)

so abändern:

PHP:
public function __construct($host,$authentication,$username,$password,$ssl=false)

wenn ich die diw variabeln im voraus bestimme?


und noch etwas, ist das hier so richtig bzw. würde das so funktionieren:

PHP:
<?php 
$from = "webmaster@domain.ch";
$to = "webmaster@domain.ch";
$subject = "test";
$body = "test";

$host = "smtp.domain.ch";
$logintype = false;
$user = "webmaster@domain.ch";
$password = "passwort";

require('email.class.php'); 
require('smtpconnection.class.php'); 
$mail=new email($from,$to,$subject,$body); 
$mail->addattachment('email.class.php'); 
$mail->addattachment('smtpconnection.class.php'); 
$smtp=new smtpconnection($host,$logintype,$user,$password); 
if ($smtp->sendmail($mail->composemail())) 
    { 
        echo 'Mail has been sent'; 
    } 
else 
    { 
        echo 'Mail could not be sent'; 
    } 
unset($smpt); 
unset($mail); 
?>
 
und so funktioniert das nicht?

PHP:
$to = "bla@bli.de";
$subject = "Betreff";
$message = "die nachricht";
$headers = "From: Micha Sndli\r\n";
mail($to, $subject, $message, $headers);
 
die funktion mail() kenne ich schon, jedoch kann man dann ne mail nicht über einen belibigen server versenden. oder wie hast du das gemeint? ich möchte die mails über den mailserver meiner domain versenden, und nicht über die funktion mail() (lokaler mailserver)

diese beiden klassen sollten funktionieren ich weiss nur nicht genau wie ich das machen muss, da ich von klassen keine ahnung habe.
 
Also, erstmal der Reihe nach die Fragen klaeren.

droger hat gesagt.:
im ersten tutorial steht etwas von imap. was muss ich da genau ändern wenn das nicht unterstützt wird?
Die eMail-Klasse nutzt eine der IMAP-Funktionen um die Mail als Quoted-Printable zu kodieren.
Wenn Dir die IMAP-Funktionen nicht zur Verfuegung stehen musst Du diese beiden Zeilen anpassen.
PHP:
$mail.="Content-Transfer-Encoding: quoted-printable\r\n";
$mail.=imap_8bit($this->body)."\r\n\r\n";
Wenn Du die wie folgt abaenderst sollte es auch kein Problem geben.
PHP:
$mail.="Content-Transfer-Encoding: 8bit\r\n";
$mail.=$this->body."\r\n\r\n";

droger hat gesagt.:
und noch eine frage: muss ich eventuell das hier aus dem 2ten tutorial:

PHP:
public function __construct($host="localhost",$authentication=false,$username="",$password="",$ssl=false)

so abändern:

PHP:
public function __construct($host,$authentication,$username,$password,$ssl=false)

wenn ich die diw variabeln im voraus bestimme?
Nein, das musst Du nicht. An den Funktionsdeklarationen musst Du eigentlich garnichts machen. Die Werte die dort angegeben sind sind lediglich Default-Werte die genutzt werden wenn nichts angegeben wird.
Wenn Du ueber den lokalen Mailserver schicken willst ohne Dich anzumelden kannst Du somit das SMTPConnection-Objekt ganz einfach so erstellen:
PHP:
$smtp=new smtpconnection();
Oder wenn Du ueber einen anderen Server aber ohne Login verschicken willst, dann so:
PHP:
$smtp=new smtpconnection($mailserver);

droger hat gesagt.:
und noch etwas, ist das hier so richtig bzw. würde das so funktionieren:

PHP:
<?php 
$from = "webmaster@domain.ch";
$to = "webmaster@domain.ch";
$subject = "test";
$body = "test";

$host = "smtp.domain.ch";
$logintype = false;
$user = "webmaster@domain.ch";
$password = "passwort";

require('email.class.php'); 
require('smtpconnection.class.php'); 
$mail=new email($from,$to,$subject,$body); 
$mail->addattachment('email.class.php'); 
$mail->addattachment('smtpconnection.class.php'); 
$smtp=new smtpconnection($host,$logintype,$user,$password); 
if ($smtp->sendmail($mail->composemail())) 
    { 
        echo 'Mail has been sent'; 
    } 
else 
    { 
        echo 'Mail could not be sent'; 
    } 
unset($smpt); 
unset($mail); 
?>
Wenn wir nun meinen letzten Punkt in Betracht ziehen kannst Du das ganze, da ja kein Login am Mailserver stattfinden soll wie folgt kuerzen:
PHP:
<?php 
$from = "webmaster@domain.ch";
$to = "webmaster@domain.ch";
$subject = "test";
$body = "test";

$host = "smtp.domain.ch";

require('email.class.php'); 
require('smtpconnection.class.php'); 

$mail=new email($from,$to,$subject,$body); 
$mail->addattachment('email.class.php'); 
$mail->addattachment('smtpconnection.class.php'); 
$smtp=new smtpconnection($host); 
if ($smtp->sendmail($mail->composemail())) 
    { 
        echo 'Mail has been sent'; 
    } 
else 
    { 
        echo 'Mail could not be sent'; 
    } 
unset($smtp); 
unset($mail); 
?>
So sollte es dann im Grunde gehen.
Ein anderer User hier hat aber auch noch ein Problem mit der Klasse, ausserdem gibt's wohl auch noch Probleme beim Cc und Bcc. Daher wollte ich die beiden Klassen sowieso noch mal naeher unter die Lupe nehmen und mal schauen ob da irgendwo was krumm ist. Bei meinen vorherigen Tests lief eigentlich alles ganz gut, muss halt nochmal was genauer gucken.

Und halte Dich hier im Forum bitte an Gross- und Kleinschreibung. Es ist mir egal wenn Du klein schreibst wenn Du mir PNs schickst, aber hier im Forum legen wir schon Wert darauf.
 
Habe das nochmals so versucht, wie du jetzt gesagt hast. Jedoch konnte ich die Mails immer noch nicht versenden, habe es über 2 Email Server versucht. kann es auch sein, dass mein Webserver falsch eingestellt ist, bzw. eine Funktion oder so ausgeschalten ist?
 
Um zu sehen was da genau schief laeuft koenntest Du entweder Debug-Outputs in die Klasse einbauen (an den Stellen wo die Methode sendmail() vorzeitig beendet wird) oder aber, was eigentlich besser ist, mit einem Sniffer mal den Datenaustausch beobachten.
 
Zurück