Hosting-Setup verursacht smtp-Mail problem in PHP script

Apache, Lighttpd, nginx, Cherokee
paykoman
Posts: 87
Joined: 2006-07-16 14:18

Hosting-Setup verursacht smtp-Mail problem in PHP script

Post by paykoman » 2014-04-17 19:13

Hallo Forum,

nun ich habe ein eigenes kleines CMS entwickelt und musste dort einige Anpassungen machen, somit wurde auch das E-mailsystem überarbeitet.
Jetzt bin ich seit vorgestern bereits den Fehler am suchen denn mein eingebauter PHPmailer 5.2.7 sendet von meiner XAMPP Installation oder auch von beiden meiner Rootserver (Webspace) die E-Mails doppelt...

Also das Script hat einen eingetragenen SMTP Server (vom Webspace auf einem meiner Server) von wo aus die E-mails gesendet werden, so und egal wo ich das script installiere (also mein CMS ob lokal oder aufm Server) die E-mails werden doppelt gesendet.

Das Script habe ich schon gründlich debuggt und in seine Einzelteile zerlegt aber leider ohne Erfolg, heute habe ich dieses nem Kumpel gesendet welcher das Script auf seiner lokalen Maschine unter "Parallels mit Debian 7" installierte und hier der Fehler seltsamer weise nicht aufgetreten ist dann hat er es auf seinem vServer installiert und wieder war vom Fehler keine Spur.

Somit vermute ich dass das Script wohl nicht das Problem ist sondern meine Serverkonfiguration und hier könnt ihr mir sicher am besten weiter helfen und hoffe ihr habt da ein paar Vorschläge für mich! Noch als informationen, bei ALLEN tests auch bei seinen instalaltionen wurde immer mein SMTP-Server verwendet (immer der gleiche), somit kann man wohl auch den Fehler nicht am STMP vermuten zumal das alte E-mailscript auch funktionierte und nur 1 E-mail sendete und nicht zwei.


Nun ich vermute mal ihr benötigt trotzdem noch mein PHP-Script um evtl. zu vermuten wo der Fehler sein könnte und am ende folgen auch alle phpinfo(); Informationen. Bitte berücksichtigt dass das Script eigentlich nicht statisch ist, habe diese Klasse nur zum Debuggen gebaut und die mailvars() Funktion stammt auch aus altn Zeiten und wird noch überarbeitet werden sobald es wieder läuft =)


Mail-Daten und an Funktion übergeben:

Code: Select all

ClassFactory::init('mail', 'fw');

$mailvars = array(
      'greeting' => $wwm->trans('global', 'Dear'),
      'salutation' => 'Herr',
      'firstname' => 'Vorname',
      'lastname' => 'Nachname',
      'title' => $wwm->trans('plug_auth', 'Activate your new passwörd'),
      'email' => 'email4@gmx.de',
      'token' => 'ioufo72h043f742',
      'pass' => '12345678',
      'SSL' => Func::getHost(),
      'rel_uri' => REL_URI,
);
mail::send('auth_newpassword', 1, $mailvars, 'Vorname_Nachname@gmx.de', 'Vorname Nachname');



E-Mail Klasse (bereitet die Daten auf und sendet sie letztendlich an den PHPmailer)

Code: Select all

<?php
class mailCore
{
   public static function send($thismail, $priority, $mailvars, $to, $toname, $file = NULL, $filename = NULL)
   {
      // here can set path to mail Templates (use on cronjobs or sent to different user as online) else we use the session from user
      $iso = explode('-', $_SESSION['wwm']['sett']['useriso']); // Sprache des users
      $maillang = ( isset($mailvars['lang']) ) ? $mailvars['lang'] : $iso[0];
      
      // Load Mailer and create new instance
      require_once(BASE_URI.'fw/mailer/PHPMailerAutoload.php');
      $mail = new PHPMailer;
      $mail->isSMTP();
      
      // Set a priority of this mail 1 = high, 3 = Normal, 5 = low
      $mail->Priority = $priority;
      
      // Specify the send server
      $sendServer = self::sendas( $thismail );                      // this func find correct server automatically
      if( sett::$_['mail_sendsrv'] != 'php' AND is_array($sendServer) )
      {
         $mail->Host = $sendServer['mainsrv'].";".$sendServer['baksrv'];      // specify main and backup server
         $mail->SMTPAuth = true;                                    // turn on SMTP authentication
         $mail->SMTPSecure = $sendServer['secure'];                     // '', 'ssl' or 'tls'
         $mail->Port = $sendServer['port'];                           // Port
         $mail->Username = $sendServer['username'];                     // Username
         $mail->Password = $sendServer['password'];                     // Password
      }
      else
      {
         $mail->Host = 'localhost';
         $mail->SMTPAuth = false;
      }
      $mail->From = $sendServer['address'];
      $mail->FromName = $sendServer['name'];
      
      // Add a recipient
      $mail->AddAddress($to, $toname);
      
      // set word wrap to 50 characters
      $mail->WordWrap = 50;
      
      // Attachment
      if( $file != NULL )
      {
         $mail->AddAttachment($file, $filename); // $filename is Optional
      }
      
      // Send the system E-mails as html?
      $mail->IsHTML( (sett::$_['mail_sendhtml']) ? true : false );
      
      // Add subject
      $mail->Subject = $mailvars['title'];
      
      // Create content of E-Mail
      $mail->Body = self::MailVars('body', $mailvars, $thismail, $maillang);
      
      // Send the System html E-Mails can optional add a text variant and if user see not html can switch to a text version
      if( sett::$_['mail_sendhtml'] AND sett::$_['mail_txtonhtml'] ){ $mail->AltBody = self::MailVars('altbody', $mailvars, $thismail, $maillang); }
      
      // now send
      if( !$mail->Send() ){
         echo 'Message was not sent.';
         echo 'Mailer error: ' . $mail->ErrorInfo;
      }else{
         echo 'Message has been sent. ';
      }
   }
   
   private static function MailVars( $type, $mailvars, $content, $maillang) // Replace
   {
      $settarr = array(
            'HTTP_HOST' => $_SERVER['HTTP_HOST'],
            'thcolor' => $_SESSION['sett']['generally']['mail']['thcolor'],
            'thtxtcolor' => $_SESSION['sett']['generally']['mail']['thtxtcolor'],
            'lnkcolor' => $_SESSION['sett']['generally']['mail']['lnkcolor'],
            'bordercolor' => $_SESSION['sett']['generally']['mail']['bordercolor'],
            'fotco' => 'Re'.'al'.'i'.'ze'.'d wi'.'th '.'<'.'a '.'hr'.'ef'.'="'.'h'.'t'.'t'.'p'.':'.'/'.'/'.'w'.'w'.'w'.'.'.'g'.'f'.'w'.'2'.'d'.'a'.'y'.'.'.'c'.'o'.'m"'.'>g'.'f'.'w'.'2'.'d'.'a'.'y.'.'c'.'o'.'m<'.'/'.'a> - F'.'r'.'a'.'m'.'e'.'w'.'o'.'r'.'k / C'.'M'.'S',
            'altfotco' => 'Re'.'al'.'i'.'ze'.'d wi'.'th : w'.'w'.'w.'.'g'.'f'.'w'.'2'.'d'.'a'.'y.'.'c'.'o'.'m - F'.'r'.'a'.'m'.'e'.'w'.'o'.'r'.'k / C'.'M'.'S',
            'impress_company' => $_SESSION['sett']['generally']['impress']['company'],
            'impress_owner' => $_SESSION['sett']['generally']['impress']['owner'],
            'impress_street' => $_SESSION['sett']['generally']['impress']['street'],
            'impress_city' => $_SESSION['sett']['generally']['impress']['city'],
            'impress_ustid' => $_SESSION['sett']['generally']['impress']['ustid'],
            'impress_tel' => $_SESSION['sett']['generally']['impress']['tel'],
            'impress_fax' => $_SESSION['sett']['generally']['impress']['fax'],
            'impress_email' => $_SESSION['sett']['generally']['impress']['email']
      );
   
      if( $type == 'body' )
      {
         $ext = (sett::$_['mail_sendhtml']) ? '.html' : '.txt';
         $body  = file_get_contents(BASE_URI.'app/translations/'.$maillang.'/mails/header'.$ext);
         $body .= file_get_contents(BASE_URI.'app/translations/'.$maillang.'/mails/'.$content.$ext);
         $body .= file_get_contents(BASE_URI.'app/translations/'.$maillang.'/mails/footer'.$ext);
         $body .= ($ext == '.html') ? '{fotco}' : '{altfotco}';
            
         foreach( $mailvars as $var => $val )
         {
            if( !is_array($val) )
            {
               $body = str_replace('{'.$var.'}', $val, $body);
            }
         }
         foreach( $settarr as $var => $val )
         {
            $body = str_replace('{'.$var.'}', $val, $body);
         }
         return $body;
      }
      else // altbody
      {
         $altbody = file_get_contents(BASE_URI.'app/translations/'.$maillang.'/mails/header.txt');
         $altbody .= file_get_contents(BASE_URI.'app/translations/'.$maillang.'/mails/'.$content.'.txt');
         $altbody .= file_get_contents(BASE_URI.'app/translations/'.$maillang.'/mails/footer.txt');
         $altbody .= '{altfotco}';
            
         foreach( $mailvars as $var => $val )
         {
            if( !is_array($val) )
            {
               $altbody = str_replace('{'.$var.'}', $val, $altbody);
            }
         }
         foreach( $settarr as $var => $val )
         {
            $altbody = str_replace('{'.$var.'}', $val, $body);
         }
         return $altbody;
      }
   }
   
   private static function sendas( $thisMail )
   {
      global $db;
         
      /**
       * A list of E-Mail-servers
       */
      $key = 'mailservers';
      $servers = Cache::get($key);
      if( !$servers )
      {
         $result = $db->fetchquery("SELECT * FROM `".DBP."settings_mailsrv`");
         if( !empty($result) AND Func::countDim($result) > 1 )
         {
            foreach( $result as $srv ){
               $servers[$srv['address']] = $srv;
            }
         }
         elseif( !empty($result) )
         {
            $servers[$result['address']] = $result;
         }
//             Cache::setToCache($key, $servers, '999999');
      }
         
      /**
       * Which email should be sent from which server
       */
      $key = 'mailsfrom';
      $mailsfrom = Cache::get($key);
      if( !$mailsfrom )
      {
         $result = $db->fetchquery("SELECT * FROM `".DBP."settings_mailsfrom` ORDER BY `srvid` ASC");
         if( !empty($result) AND Func::countDim($result) > 1 )
         {
            foreach( $result as $srv ){
               $mailsfrom[$srv['mail']] = $srv['srvid'];
            }
         }
         elseif( !empty($result) )
         {
            $mailsfrom[$result['mail']] = $result['srvid'];
         }
//             Cache::setToCache($key, $mailsfrom, '999999');
      }
   
      if( empty($servers) )
      {
         return 'No Emailserver available!';
      }
      elseif( !empty($servers) AND !empty($mailsfrom) AND !array_key_exists($thisMail, $mailsfrom) )
      {
         return 'For this E-Mail was not set an E-mail-Server!';
      }
      else{ return $servers[$mailsfrom[$thisMail]]; }
   }
}


phpinfo();
Meiner #1
Meiner #2
Seiner


Ich hoffe Jemand mag mir helfen denn es muss dringend gelöst werden da mein CMS sonst unbrauchbar ist =(


MFG: Paykoman

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Hosting-Setup verursacht smtp-Mail problem in PHP script

Post by Joe User » 2014-04-17 19:52

Bei m1 wurde phpinfo() doppelt ausgeführt, absichtlich?

m1 und m2 haben ioncube geladen, s hingegen nicht. Das kann auf ein Cacheproblem bei ioncube hindeuten, muss aber nicht.

Ansonsten ist nach dem ersten flüchtigen Blick nichts Auffälliges zu sehen, ausser dass sich in den geposteten Scriptausschnitten die $mailvars zu überschneiden scheinen, was ein Cacheproblem verursachen könnte.
Da ich aber weder ioncube noch phpmailer jemals genutzt habe, kann meine erste Vermutung auch völlig falsch sein.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

paykoman
Posts: 87
Joined: 2006-07-16 14:18

Re: Hosting-Setup verursacht smtp-Mail problem in PHP script

Post by paykoman » 2014-04-17 20:11

Ohh m1 und m2 sind vertauscht sehe ich gerade.. bei m1 (eig. m2) istn loadbalancer dahinter schätzungsweise daher doppelt...
Bei dem anderen ist kein Loadbalancer dahinter ist mein Testserver mit einfacher Konfiguration.

Hmm die Überschneidung sehe ich jedoch nicht aber wenn es daran liegt hätte es. ggf. bei meinem Kumpel auch doppelt gesendet werden müssen (sollte das PHPscript den Fehler verursachen) oder nicht?

Hmm jut schaue ich mal ob ich ioncube ausgeschalten bekomme, glaube das habe ich eh nicht eingerichtet (dürfte ja kein Bestandteil des Loadbalancer gewesen, ich weiß es nimmer ist zulange her xD).

Ich melde mich dann...

::EDIT::

Nein das habe ich defenetiv nicht installiert, wie bekomme ich den Mist aus?
Sehe aber es ist ja nur ein De/Encoder, ob er da wirklich das Problem ist? Hmmm?
Last edited by paykoman on 2014-04-17 20:52, edited 2 times in total.

paykoman
Posts: 87
Joined: 2006-07-16 14:18

Re: Hosting-Setup verursacht smtp-Mail problem in PHP script

Post by paykoman » 2014-04-18 13:08

Erledigt!