php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.05.2008, 20:47  
L++
Neuer Benutzer
 
Registriert seit: 30.05.2008
Beiträge: 4
L++
Standard eMail-Weiterleitung aus Postfach ?

Hi Leute,

ich möcht erst mal weit ausholen, damit klar wird was ich benötige:

bin in einem kleinen verein mit ca. 40 mitgliedern. unsere webseite (www.unsereDomain.de) ist bei 1und1 gehostet und besitzt eine MySQL-datenbank. jedes mitglied hat ne eigene email-adresse.

oftmals gibt es emails, die man gleich an alle mitglieder schicken möchte. ist jedoch ätzend, jedesmal alle email-adressen in die email einzutippen. genauso ätzend wäre es, wenn jedes der 40 mitglieder bei sich eine verteilerliste in outlook pflegen müsste. kurzum: wir benötigen einen email verteiler.

der wunsch wäre, dass es eine email-adresse unserer Domain gibt, die zum beispiel so lautet: alleMitglieder@unsereDomain.de
emails die dorthin gesendet werden, sollen an alle mitglieder weitergeleitet werden.

nun hatte ich folgende idee:
auf der SQL-Datenbank habe ich eine Tabelle hinterlegt mit allen email-adressen unserer mitglieder.
zusätzlich habe ich einen cronjob angelegt, der ein bestimmtes php-skript alle 5 minuten aufruft.
dieses skript funktioniert leider nicht, sollte aber folgendes tun:

- das postfach von alleMitglieder@unsereDomain.de auf neue post prüfen
- falls neues mail vorhanden, dieses an alle empfänger weiterleiten (also die empfänger aus der mysql-db auslesen)
- anschliessend die email aus dem postfach löschen.

Meine probleme:
1.) wenn die emails anlagen haben oder html mails sind, dann kommen sie völlig "entstellt" oder teilweise mit fehlendem inhalt beim empfänger an.
2.) es funktioniert absolut unzuverlässig: manchmal sendet er alle 5 minuten das gleiche mail, weil er das löschen am ende wohl nicht ordentlich durchführt.

kurz gesagt: mit meinen bescheidenen php-kenntnissen hab ich nen echten murks zusammengesetzt und benötige EURE Hilfe, um etwas ordentliches hinzukriegen.

Meine Fragen an Euch:
1) Gäbe es einfachere / bessere Möglichkeiten, mein Problem prinzipiell anzugehen ? (bitte keine Alternativen auf fremden servern wie z. b. gmx - es muss vollständig auf unseren servern abgehandelt werden).

2) (falls meine idee doch nicht so schlecht ist Findet jemand an dem Code den Fehler, damit es zukünftig zuverlässig und fehlerfrei (auch bei html-mails) läuft ?

Vielen Dank im Voraus für Eure Gedanken.

Gruß,
L++

Anbei mein kläglicher Code-versuch:

PHP-Code:
<?php

$verteiler      
"alleMitglieder"
$pop3_pwd       "abcdef";
$mysql_host     "unserHostBei.1und1.de";
$mysql_username "unserUser"
$mysql_password "unserSQL-PW";    
$mysql_db       "unsereDB"
$mysql_table    "MySQL-Tabelle_mit_Adressen_der_Mitglieder";
$pop3_address   "pop.1und1.de"
$pop3_port      "110";

require(
"_POP3.php"); 

   
$pop3_user $verteiler."@unsereDomain.de";
   
$pop3      = new phPOP3(); 
   if(!
$pop3->pop3_receive($pop3_address$pop3_port$pop3_user$pop3_pwd)) {
      die(
"[b][Fehler][/b] Es konnte keine Verbindung zum POP3-Server aufgebaut werden.");
   }
   
mysql_connect($mysql_host,$mysql_username,$mysql_password);
   
mysql_select_db($mysql_db);
   
$mailbox $pop3->pop3_list();
   if(
$mailbox["messages"]>0) {
      for(
$i=1;$i<$mailbox["messages"]+1;$i++) { 
         
$message $pop3->pop3_retrieve($i);
         if(!
$message) {
            echo 
"[b][Fehler][/b] Fehler beim abrufen der Nachricht $i
"
;
            exit;
         }
         
$result mysql_query("SELECT email FROM ".$mysql_table);
         while(
$data mysql_fetch_array($result)){
            
$EmpfNr=0;
            
mail($data[$EmpfNr],$message->subject,$message->body,"From: ".$message->from."\r\nContent-Type: ".$message->ctype);
            
$EmpfNr++;
         }
         
$pop3->pop3_delete($i);
      }
   }
   
mysql_close();
   
$pop3->pop3_quit();
   unset(
$result);
   unset(
$data);
?>

...und natürlich der vollständigkeit halber noch die klasse die ich irgendwo im internet mal gefunden habe, die oben mit require eingebunden ist:

PHP-Code:
<?php
        
class phPOP3
        
{
                var 
$socket = -1;
                var 
$apopid "";
                var 
$status;

                function 
phPOP3() {
                }

                function 
pop3_receive($server$port$username$password ) {
                if( 
$this->pop3_connect$server$port )) {
                    if( 
$this->apopid != "" ) {
                        return 
$this->pop3_apop$username$password );
                            } else {
                        if( 
$this->pop3_user$username )) {
                            return 
$this->pop3_pass$password );
                        }
                    }
                } else {
                    return 
false;
                }
                }

                function 
pop3_command$command ) {
                        if( 
$this->socket ) {
                                
$command        =        $command "\r\n";
                                @
fputs$this->socket$command );
                                @
$line                        fgets$this->socket1024 );
                                
$this->status"lastresult" ]               = substr$line0);
                                
$this->status"lastresultmessage" ]        = $line;
                                if(
$this->status"lastresult" ] != "+" ) return 0;
                        }
                        else {
                                return 
0;
                        }
                        return 
1;
                }

                function 
pop3_connect$server$port ) {
                        
$this->socket fsockopen$server$port );
                        if( !
$this->socket ) return 0;
                        
$line        fgets$this->socket1024 );
                        if(
eregi("server ready (\<.*\>)",$line,$substr)) {
                         
$this->apopid $substr[1];
                        }
                        
$this->status"lastresult" ] = substr$line0);
                        
$this->status"lastresultmessage" ] = $line;
                        if( 
$this->status"lastresult" ] != "+" ) return 0;
                        return 
1;
                }

                function 
pop3_apop$username$password ) {
                        
$pass_md5       =   md5($this->apopid.$password);
                        
$command        =   "APOP " $username " " .$pass_md5;
                        
$result         =   $this->pop3_command$command );
                        if(!
$result) {
                                
fclose$this->socket );
                                
$this->socket = -1;

                        }
                        return 
$result;
                }

                function 
pop3_user$username ) {
                        
$command        =        "USER " $username;
                        
$result                =        $this->pop3_command$command );
                        if( !
$result ) {
                                
fclose$this->socket );
                                
$this->socket = -1;
                        }
                        return 
$result;
                }


                function 
pop3_pass$password ) {
                        
$command        =   "PASS " $password;
                        
$result         =   $this->pop3_command$command );
                        if( !
$result ) {
                                
fclose$this->socket );
                                
$this->socket = -1;
                        }
                        return 
$result;
                }

                function 
pop3_stat() {
                        
$this->pop3_command"STAT" );
                        if( !
eregi"+OK (.*) (.*)"$this->status"lastresultmessage" ], $result ) ) return 0;
                        return 
$result[1];
                }

                function 
pop3_list() {
                        
$this->pop3_command"LIST" );
                        if( 
$this->status"lastresult" ] != "+" ) return 0;
                        
$i 0;
                        while( 
substr$line fgets$this->socket1024 ), 0) != "." ) {
                                
$mailbox$i ] = $line;
                                
$i++;
                        }
                        
$mailbox"messages" ] = $i;
                        return 
$mailbox;
                }

                function 
pop3_retrieve$message_id ) {
                        
$command        =        "RETR " $message_id;
                        
$this->pop3_command$command );
                        if( 
$this->status"lastresult" ] != "+" ) return 0;
                        
$i             0;
                        
$header        1;
                        
$date          ""
                        
$from          ""
                        
$reply_to      ""
                        
$subject       ""
                        
$to            ""
                        
$ctype         "";
                        while( 
substr$line fgets$this->socket1024 ), 0) <> "." ) {
                                if( !
$header ) {
                                        
$body$i ] = $line;
                                        
$i++;
                                } else {
                                        if( 
substr$line0) == "Date: " ) {
                                                
$date substr$line);
                                        } else if( 
substr$line0) == "From: " ) {
                                                
$from substr$line);
                                        } else if( 
substr$line010 ) == "Reply-To: " ) {
                                                
$reply_to substr$line10 );
                                        } else if( 
substr$line0) == "Subject: " ) {
                                                
$subject substr$line);
                                        } else if( 
substr$line0) == "To: " ) {
                                                
$to substr$line);
                                        } else if( 
substr$line014 ) == "Content-Type: " ) {
                                                
$ctype substr$line14 );
                                        } else if( 
ereg("boundary"$line) ) {
                                                
$ctype .=  $line;
                                        }
                                }

                                if( ( 
$header == ) && ( strlen$line ) == ) ) {
                                        
$header 0;
                                }
                        }

                        
$body"lines" ] = $i;
                        return new 
message$body$date$from$reply_to$subject$to$ctype );
                }

                function 
pop3_delete$message_id ) {
                        
$command        =        "DELE " $message_id;
                        return 
$this->pop3_command$command );
                }

                function 
pop3_quit() {
                        return 
$this->pop3_command"QUIT" );
                        
fclose$this->socket );
                        
$this->socket = -1;
                }

                function 
pop3_show_error() {
                        echo 
$this->status"lastresultmessage" ] . "
"
;
                }
        }

        class 
message {
                var 
$body;
                var 
$date;
                var 
$from;
                var 
$reply_to;
                var 
$subject;
                var 
$to;
                var 
$ctype;
                function 
message$body$date$from$reply_to$subject$to$ctype ) {
                        
$this->body           =        $body;
                        
$this->date           =        $date;
                        
$this->from           =        $from;
                        
$this->reply_to       =        $reply_to;
                        
$this->subject        =        $subject;
                        
$this->to             =        $to;
                        
$this->ctype          =        $ctype;
                }
        }
?>
L++ ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.05.2008, 20:59  
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

Und wie wäre es direkt bei 1und1 eine Weiterleitung anzulegen die an alle Adressen weiterleitet ?

Das Problem mit php ist (gerade wenn man nur ein normales Webspace-Paket hat) dass execution_time und memory_limit da eventuell schnell etwas überfordert sind, wenn mal ne Mail mit etwas größerem Anhang oder ähnlichem kommt.
robo47 ist offline  
Alt 30.05.2008, 21:11  
L++
Neuer Benutzer
 
Registriert seit: 30.05.2008
Beiträge: 4
L++
Standard

hi robo47,

das war natürlich auch mein erster gedanke.
aber bei 1und1 geht das leider nicht. (weiterleitung max. an 2 email-adressen).
nicht mal bei größeren paketen - 1und1 ist da etwas "merkwürdig".

L++
L++ ist offline  
Alt 31.05.2008, 09:10  
Erfahrener Benutzer
 
Registriert seit: 27.08.2004
Beiträge: 239
vollkommenegal
Standard

Auch wenn es Dir nicht gefällt, aber ich muss robo47 zustimmen. Sowas macht man nicht in PHP, sondern nutzt dafür eine Mail-Weiterleitung. Wenn 1und1 das nicht anbietet, würde ich wirklich wechseln, denn das ist ein Minimum an Service.
Was mich allerdings wundert ist, dass Du Cronjobs hast, aber keine richtige Mail-Weiterleitung? Cronjobs gibt's doch auch nur in den größeren Paketen, oder nicht? Oder ist das ein externer Service?

cya
vollkommenegal ist offline  
Alt 31.05.2008, 12:56  
phyton
Gast
 
Beiträge: n/a
Standard

hallo L++!
wenn du deinen provider nicht wechseln willst, kannst du auch das skript nehmen, jedoch besteht die gefahr, wie robo47 gesagt hat, dass es speicherprobleme geben kann.

PHP-Code:
<?php
/*natürlich kannst du das ganze auch dynamisch mit ner datenbank machen, ich habs zur besseren lesbarkeit mal statisch gemacht*/
$anz 40//Anzahl der E-Mail Adressen
$adressen = array("nutzer1@unseredomain.de""nutzer2@unseredomain.de""nutzer3@unseredomain.de"); //E-Mail Adressen

for($i=0$i<$anz$i++)
{
  if(
email($adressen[$i],
              
$betreff,
              
$inhalt,
              
$header))
    
$error $error 0;
  else
    
$error $error 1;
}
if(
$error>0)
  echo 
"Es gab Fehler...";
?>
 
Alt 31.05.2008, 19:37  
L++
Neuer Benutzer
 
Registriert seit: 30.05.2008
Beiträge: 4
L++
Standard weiterleitung

@vollkommenegal:
also mir ist das auch völlig schleierhaft, weshalb 1und1 sowas nicht anbietet. du kannst schon emails weiterleiten, aber eben maximal an 2 adressen. auf nachfrage bei 1und1 hat mir der dortige supportmitarbeiter den tip gegeben, dass ich einfach die weiterleitung wie ein schneeball-system erstellen soll: weiterleitung einer email an 2 andere emails, dabei wieder jeweils an weitere 2, und immer weiter, bis letztlich die mail zuletzt an die besagten 40 mitgliederadressen weitergeleitet seien.
...hammer, was ? sowas saudoofes hatte ich echt noch nie gehört...

@pyhton:
konnte dir leider nicht ganz folgen: innerhalb der schleife verschickst du per email(); ein mail an die empfänger. aber bei mir gehts ja ums "weiterleiten" eines eingegangenen emails aus einem postfach, nicht ums "neu erstellen" von emails. fehlt da nicht noch etwas code zum auslesen meines postfaches ? könntest du das noch dazu schreiben ? (sorry, bin da nicht so fit drin.)

L++

NACHTRAG bzw. Korrektur: ich mach schon sooo lange an diesem Problem rum, dass ich gar nicht bemerkt habe, dass 1und1 inzwischen die Anzahl von Weiterleitungen auf 10 erhöht hat. Immernoch "rückständig" wie ich finde, aber schon besser als 2. Möchte aber trotzdem meine Idee umsetzen und bitte weiterhin um Eure Tips.
L++ ist offline  
Alt 01.06.2008, 10:36  
Erfahrener Benutzer
 
Registriert seit: 27.08.2004
Beiträge: 239
vollkommenegal
Standard Re: weiterleitung

Zitat:
Zitat von L++
Möchte aber trotzdem meine Idee umsetzen und bitte weiterhin um Eure Tips.
Dann empfehle ich Dir, zum Versenden der HTML-Mails die Klasse PHPMailer zu nutzen: http://sourceforge.net/project/showf...group_id=26031

Beispiel-Code liegt bei...

cya
vollkommenegal ist offline  
Alt 06.06.2008, 00:01  
L++
Neuer Benutzer
 
Registriert seit: 30.05.2008
Beiträge: 4
L++
Standard danke für den tip

werd ich mir mal genauer ansehen.
sieht auf den ersten blick schon mal ganz gut aus.

THX.
L++
L++ ist offline  
Alt 06.10.2008, 21:35  
Neuer Benutzer
 
Registriert seit: 06.10.2008
Beiträge: 5
d.ari befindet sich auf einem aufstrebenden Ast
Standard

Hallo L++,
hast du nun eine Lösung des Problems gefunden?

Bin auch an der Realisierung interessiert, da ich die Mailadressen aus einer schon vorhandenen Joomla-Dateinbank nutzen möchte. So würde ich mir das ständige Pflegen des Mailverteilers sparen, der zur Zeit unabhängig von der Benutzerdatenbank läuft.

Gruß, d.ari
d.ari ist offline  
Alt 06.10.2008, 23:44  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Bei 40 Empfängern kannst du dir doch die komplette Liste in ein bcc legen und den Kram mit Outlook Express ansprechen.

Wenn das nicht geht, dann halt per php 40 mal mail() in einer Schleife. Das sind doch nur ein paar Zeilen Code, wenn du es rough und dirty magst: Die Liste fest in ein Array innerhalb des Scripts und den zu mailenden Text jeweils als txt-Datei hochladen. Hier mal auf die Schnelle:
PHP-Code:
$absender 'ich@du.de';
$betreff 'Post fonne 4ma';
$mailtext file_get_contents('mailtext.txt');
$liste = array(
   
'ich@du.de',
   
'du@du.de',
   
'er@du.de' );
foreach(
$liste as $mail) {
  
mail("$mail","$betreff","$text","From:$absender");

Keine Ahnung ob da Tuppfühler drinne sind, ich hab das nur so runtergeschrieben.
Wolla 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
Abfrage ob email adresse schon vorhanden ist TeazY PHP Tipps 2008 10 16.12.2007 12:22
eMail Postfach funktion JanM PHP Tipps 2006 3 13.07.2006 18:40
DB Abfrage nach email funktioniert nicht tinchen Datenbanken 3 15.05.2006 13:20
Newsletter email abfrage Problem mokus PHP Tipps 2006 7 18.04.2006 16:35
email test shocky PHP Tipps 2006 2 16.03.2006 13:55
Email Header und Alternativer Text... PHP Tipps 2007 22 10.11.2005 16:38
[Erledigt] automatisch Email PHP Tipps 2005-2 3 26.07.2005 12:53
Weiterleitung funtkioniert nicht PHP Tipps 2005-2 12 05.07.2005 09:47
[Erledigt] doppelte email adressen suchen Datenbanken 9 20.05.2005 19:38
Email aus textarea PHP Tipps 2005 3 14.04.2005 21:37
Zeitversetzte Email versenden pcschröda PHP-Fortgeschrittene 9 29.01.2005 05:47
Wie implementiere ich mein Email Formular? PHP Tipps 2004-2 2 14.11.2004 17:02
Suche eMail Formular in PHP Beitragsarchiv 2 12.10.2004 16:24
email funktion des phpbb selbst benutzen PHP Tipps 2004 0 22.09.2004 13:18
Email per PHP formatieren PHP Tipps 2004 4 26.07.2004 09:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
1und1 email verteiler, 1und1 email weiterleitung löschen, email verteiler 1und1, 1und1 mails automatisch weiterleiten, php mail weiterleiten cronjob, joomla email weiterleitung, 1und1 email nach weiterleitung löschen, http://www.php.de/php-tipps-2008/45972-email-weiterleitung-aus-postfach.html, php email verteiler, joomla mail weiterleiten, 1und1 emailweiterleitung, 1&1 email verteiler, 1und1 email weiterleitung mehrere adressen, email verteiler bei 1und1, mehrere 1und1 postfächer weiterleiten, 1und1 mail \nach weiterleitung löschen\, emails automatisch weiterleiten 1und1, 1und1 emails nach weiterleitung löschen, php emails weiterleiten, php email weiterleiten

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:23 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.