php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.01.2010, 15:24  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard [Erledigt] PHP mit SMTP verbinden

Hi Leute!

Ich habe mir eine kleine Klasse geschrieben, die E-Mails empfangen kann und das klappt auch ganz gut, aber wie verbinde ich jetzt mit einem SMTP-Server?

Ich habe mal, so wie es mir der Fehlercode ausgibt, wenn ich imap_mail nutze, SMTP und smtp_port mit php_ini(); definiert, aber es will trotzdem nicht klappen...


Hier mein Code:
PHP-Code:
CLASS MAIL{
    private 
$inServer null;

    
// Mainfunctions
    
private function check_type($structure){
        if(
$structure->type == 1){
            return 
true;
        }else{
            return 
false;
        }
    }




    public function 
getMail($id){
        
$message = array(); 
  
        
$header imap_header($this->inServer$id); 
        
$structure imap_fetchstructure($this->inServer$id); 
  
        
$message['subject'] = $header->subject;  
        
$message['from'] =   $header->fromaddress
        
$message['to'] =   $header->toaddress;  
        
$message['cc'] =   $header->ccaddress
        
$message['date'] =   $header->date
  
        if(
$this->check_type($structure)){ 
            
$message['body'] = imap_fetchbody($this->inServer,$id,"1");

            if(!
$message['body']){
                
$message['body'] = '[NO TEXT IN MESSAGE]';
            } 
        }else{ 
            
$message['body'] = imap_body($this->inServer$id); 

            if(!
$message['body']){
                
$message['body'] = '[NO TEXT IN MESSAGE]';
            }  
        }

        return 
$message;
    }


    
    public function 
getMails($search){
        
$messages = array();

        
$mailIds imap_search($this->inServer$search);
        
        if(
is_array($mailIds)){
            for(
$i 0$i count($mailIds); $i++){
                
$messages[] = $this->getMail($mailIds[$i]);
            }
        }

        return 
$messages;
    }

    public function 
sendMail($from$to$subject$text){
        
imap_mail($to$subject$text"From: $from");
    }

    
    public function 
MAIL($imap$smtp$user){
        
$server null;

        if(
$imap['mode'] == "imap"){
            
$server .= $imap['host'].":".$imap['port']."/imap";

            if(
$imap['ssl']) $server .= "/ssl";
        }
        
        
// Set InputServer
        
$this->inServer imap_open("{".$server."}"$user['username'], $user['password']) or die("Verbindung konnte nicht aufgebaut werden: " imap_last_error());

        
// Set OutputServer
        
ini_set('SMTP'$smtp['0']);
        
ini_set('smtp_port'$smtp['1']);
    }

    public function 
close(){
        
imap_close($this->inServer);
    }
}



// Mail-Daten empfangen
$imap = array(
        
"host" => "imap.gmail.com",
        
"port" => 993,
        
"ssl" => true,
        
"mode" => "imap"
    
); 

$imap_user = array(
        
"username" => "testuser@gmail.com",
        
"password" => "passwort"
    
);

$smtp['0'] = "smtp.gmail.com/ssl";
$smtp['1'] = 465;


$mail = new MAIL($imap$smtp$imap_user);

echo
"<pre>\n";
print_r($mail->getMails("UNSEEN"));


$mail->sendMail("name@absender.de""name@empfaenger.de""Test""Testnachricht");

$mail->close(); 
Weiß da vielleicht jemand weiter?

Ich würde ja sagen, dass gmail auch ein Benutzernamen und ein Passwort benötigt, aber der Localost meint da was anderes...

MfG. DjScaleo
djscaleo ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.01.2010, 15:37  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

PHP: Runtime Configuration - Manual

php's mail() kann kein smtp mit auth, nur ohne!
Und nur dazu dienen die 2 ini-werte.

Schau dir dazu doch einfach mal ein der vielen Mailer-Klassen an die es gibt, das Rad muss man echt nicht neu erfinden.
-> Mail() ist tot, es lebe mail()

Mit Zend_Mail kann man übrigends sowohl versenden, als auch Postfächer auslesen (POP3/IMAP/MAILDIR/MBOX)
Zend Framework: Documentation
robo47 ist offline  
Alt 06.01.2010, 11:29  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard

Danke.
djscaleo ist offline  
Alt 20.02.2010, 16:57  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard

Hallo noch mal,

Ich schreib jetzt einfach mal hier weiter, da es sich mal wieder um mein SMTP Problem handelt...

PhpMailer klappt bei mir nicht (Could not execute: /usr/sbin/sendmail Mailer Error: Could not execute: /usr/sbin/sendmail) und so wollte ich mal versuchen, mir die Kurzfassung aus anderen Klassen zu schreiben...

Also fing ich an:
PHP-Code:
CLASS MAIL_SMTP{
    private 
$smtp null;

    private 
$timeout 5;

    private 
$from = array();
    private 
$to = array();
    private 
$cc = array();
    private 
$bcc = array();
    private 
$subject null;
    private 
$content null;

    
// connect
    
public function connect($server$port){
        
$this->smtp = @fsockopen($server$port$errno$errstr$this->timeout);

        
stream_set_timeout($this->smtp$this->timeout);

        echo 
fgets($this->smtp4096);
    }

    
//close
    
public function close(){
        
fclose($this->smtp);
    }

Doch sobald ich connect aufrufe, passiert für 5 sekunden erst mal nichts außer laden und dann kommt eine leere Seite. Das liegt daran, dass ich nac den 5 Sekunden ja meinen Stream abbreche (set_timeout()).

Aber wie bekomme ich es denn jetzt hin, dass es mal endlich klappt?

Vielleicht hat auch jemand Lösungen für den PhpMailer?!?


MfG. DjScaleo
djscaleo ist offline  
Alt 20.02.2010, 17:36  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Kannst du mal deinen schnipsel zu dem fehler zeigen:
Zitat:
Could not execute: /usr/sbin/sendmail Mailer Error: Could not execute: /usr/sbin/sendmail
Weil das sieht so aus wie wenn du entweder direkt via sendmail (einer linux-binary via exec) deine mail senden willst und das hat mit SMTP nichts zu tun ... ich tippe da aktuell wohl auf einen Konfigurations/Nutzungs-Fehler von phpmailer.

PHPMailer unterstützt 3 Arten Mails zu versenden:

via php's mail()-funktion
via SMTP (login auf mailserver mit passenden zugangsdaten ... etc)
via sendmail -> sendmail ist ein programm unter linux das man via exec/system ausführen kann)

Die oben genannte Fehlermeldung deutet auf sendmail hin, worauf man wohl nicht bei jedem hoster zugriff hat.
robo47 ist offline  
Alt 21.02.2010, 11:47  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard

Oh, da hab ich versehentlich das falsche Beispiel genommen...

Ich hab jetzt mal das richtige mit dem richtigen phpmailer (also nicht lite) gearbeitet.

Auf einem Webspace klappt das ganze auch, aber auf meinem Localhost bekomme ich immer folgenden error:
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in M:\xampplite\htdocs\alt\test\mail\class.smtp.php on line 197

Hat da vielleicht einer eine Lösung? Ich möchte ja nicht immer alles zum Testen hochladen...

MfG. DjScaleo
djscaleo ist offline  
Alt 21.02.2010, 13:51  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Würde sagen dir fehlt die openssl-extension, schau mal ob du ne php_openssl.dll im php-extensions-ordner hast.
Danach schaust du in deiner php.ini dass die extension auch geladen wird.
apache neu starten und mal phpinfo() checken.

Dann sollte bei "Registered Stream Socket Transports" ssl dabei sein.
robo47 ist offline  
Alt 21.02.2010, 15:05  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard

Danke!

Jetzt klappts endlich!
djscaleo ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Simple Machines Forum, SMTP und STARTTLS phw Server, Hosting und Workstations 1 24.06.2009 20:36
[Erledigt] SMTP zum senden von Mails verwenden! krachmacha PHP Tipps 2009 10 01.05.2009 20:32
Phpmailer - data not accepted / SMTP Fehler: Daten werden nicht akzeptiert Soese PHP Tipps 2008 4 16.11.2008 13:05
PHPMailer Problem ochsi PHP Tipps 2008 7 08.07.2008 10:34
Anmelden bei SMTP PHP Tipps 2007 7 14.11.2005 12:06
SMTP probleme beim versenden PHP Tipps 2007 2 11.11.2005 11:37
[Erledigt] Mail versenden über externen Server mit SMTP und Port 25 PHP Tipps 2005-2 2 07.10.2005 22:23
PEAR Spreadsheet_Excel_Writer Zellen verbinden PHP Tipps 2005-2 1 30.09.2005 20:49
Email über "fremden" SMTP Server schicken PHP Tipps 2005-2 0 18.09.2005 00:44
mail von lokalem Server an SMTP im Netz -after_pop- Problem PHP-Fortgeschrittene 7 12.08.2005 14:40
Kann mich nicht mit MySQL verbinden! PHP Tipps 2005-2 8 23.07.2005 09:38
mail() versucht die Mails als wwwrun an den SMTP Server zu l Server, Hosting und Workstations 3 15.06.2005 11:25
AVM KEN als lokalen SMTP Server ansprechen workaholic PHP Tipps 2005 3 04.02.2005 13:20
SMTP Error PHP Tipps 2005 2 21.01.2005 11:54
Brauche hilfe bei php mit smtp! PHP Tipps 2004 1 03.06.2004 21:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php ini_set smtp, php smtp, http://www.php.de/php-einsteiger/63010-erledigt-php-mit-smtp-verbinden.html, could not execute: /usr/sbin/sendmail, ini_set smtp, php smtp mail, smtp php, php ini set smtp, php smtp ssl, php smtp ini_set, php ini_set() smtp, php mit smtp verbinden, warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support ssl/crypto in class.smtp.php on line 197, ini_set() smtp, php smtp extension, linux php ini_set smtp beispiel, php extension smtp, ini_set smtp php, php smtp test, php smtp empfangen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum