smtp sendmail geht nicht =(

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

smtp sendmail geht nicht =(

Postby Paykoman » 10. March 2013 19:29

Hallo,

da ich nem Kumpel das Programmieren nahe bringen möchte und bisher immer auf dem Server gearbeitet habe, bin ich nun dabei eine locale Umgebung einzurichten inkl. SVN.
Soweit klappt alles schon fleißig, jedoch meine class zum email versenden via smtp funktioniert nicht mehr =(
Dabei will ich natürlich mit dem smtp server auf meinem Rootserver verbinden um die email zu versenden, offensichtlich scheint dies aber mit xampp nicht so einfach zu gehen.
Hat da Jemand einen tipp was ich machen muss?

Hier mal mein Script:
Code: Select all
<?php
/* * * * * * * * * * * * * * SEND EMAIL FUNCTIONS * * * * * * * * * * * * * */   

//This will send an email using auth smtp and output a log array 
//logArray - connection,
function authSendEmail($to, $nameto, $subject, $message, $sendas) 
{

/* * * * CONFIGURATION START * * * */
   $from = "mail@domain.com";
   $namefrom = "myfromname";
   $smtpServer = "smtp.domain.com";
   $username = "service@domain.com";
   $password = "mypw";
   $port = "25";
/* * * * CONFIGURATION END * * * * */

   $localhost = "localhost";
   $timeout = "30";
   $newLine = "\r\n";

//Connect to the host on the specified port 
$smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout); 
$smtpResponse = fgets($smtpConnect, 515); 
if(empty($smtpConnect))   

$output = "Failed to connect: $smtpResponse"; 
return $output; 

else

$logArray['connection'] = "Connected: $smtpResponse"; 

 
//Request Auth Login 
fputs($smtpConnect,"AUTH LOGIN" . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['authrequest'] = "$smtpResponse"; 
 
//Send username 
fputs($smtpConnect, base64_encode($username) . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['authusername'] = "$smtpResponse"; 
 
//Send password 
fputs($smtpConnect, base64_encode($password) . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['authpassword'] = "$smtpResponse"; 
 
//Say Hello to SMTP 
fputs($smtpConnect, "HELO $localhost" . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['heloresponse'] = "$smtpResponse"; 
 
//Email From 
fputs($smtpConnect, "MAIL FROM: $from" . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['mailfromresponse'] = "$smtpResponse"; 
 
//Email To 
fputs($smtpConnect, "RCPT TO: $to" . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['mailtoresponse'] = "$smtpResponse"; 
 
//The Email 
fputs($smtpConnect, "DATA" . $newLine); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['data1response'] = "$smtpResponse"; 
 
//Construct Headers 
$headers = "MIME-Version: 1.0" . $newLine; 
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine; 
$headers .= "To: $nameto <$to>" . $newLine; 
$headers .= "From: $namefrom <$from>" . $newLine; 
 
fputs($smtpConnect, "To: $to\nFrom: $from\nSubject: $subject\n$headers\n\n$message\n.\n"); 
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['data2response'] = "$smtpResponse"; 
 
// Say Bye to SMTP 
fputs($smtpConnect,"QUIT" . $newLine);   
$smtpResponse = fgets($smtpConnect, 515); 
$logArray['quitresponse'] = "$smtpResponse";   

//insert var_dump here -- uncomment out the next line for debug info
//var_dump($logArray);

?> 


Wäre für eure Hilfe echt dankbar, weil mich das aktuell echt aufhält =(

MFG: Paykoman
Paykoman
 
Posts: 8
Joined: 03. January 2011 20:25

Re: smtp sendmail geht nicht =(

Postby Nobbie » 10. March 2013 22:07

Die Idee, nicht die dämliche mail() Funktion zu benutzen, die finde ich schon einmal sehr gut.

Aber andererseits selbst jetzt mit fsockopen() das SMTP Protokoll (was wirklich hakelig ist) abzubilden, das halte ich dann doch für übertrieben. Ich empfehle deswegen grundsätzlich die Phpmailer Class, die wirklich ausgezeichnet funktioniert und eine intelligente API zur Verfügung stellt.

Wie es der Zufall will, gibt es einen aktuell (sogar festgepinnten - welche Ehre für mich...) geschriebenen Beitrag im englischen Board, den Du aber sicherlich problemlos verstehen und nachvollziehen kannst:

viewtopic.php?f=16&t=52984

Die Funktion mailX(), die ich da vorstelle, ist natürlich wirklich das unterste Ende der Fahnenstange - nichtsdestotrotz wird sie für die allermeisten Ansprüche schon genügen. Du musst natürlich die richtigen "Credentials" einfügen.

Unabhängig von der gewählten API gibt es natürlich immer noch die Möglichkeit, dass Deine Emails in Firewalls hängen bleiben (vielleicht sogar der eigenen) oder ähnlichen Problemchen.
Nobbie
 
Posts: 6919
Joined: 09. March 2008 13:04


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 9 guests