Ankündigung

Einklappen
Keine Ankündigung bisher.

2x mailversand nacheinander 2 mail kommt nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 2x mailversand nacheinander 2 mail kommt nicht

    Hallo Forummer
    In meiner App kann ich Rechnungen mit fpdf erstellen welche ich auf wunsch per mail versende.
    Das funktionier mit einer mailklasse ausgezeichnet.
    Nun möchte ich nach dem Versand der rechnung per mail eine 2 mail an mich senden mit der Bestätigung, dass das mail versant wurde.
    Leider kommt das 2 Mail an mich nicht an.
    Sieht jemand einen offensichtlichen Fehler ?
    Besten Dank für das durchsehen und wenn möglich eine Rückmeldung.

    Versand:
    Code:
            //Dokument Mailen
    
            $pdf_mail = NEW my_mail();
            $pdf_mail->set_object_pdf($pdf);
            $pdf_mail->set_to($mail);
            $pdf_mail->set_filename($my_ac_rech->get_cs_Rechnungsnummer().$my_ac_rech_Status.".pdf");
            $info = "1 Mail geht an: ".$mail."\r\n";
            $info .= $pdf_mail->send_mail()."\r\n\n";
    
            //Bestätigung an eigene Mail senden
            //Mitteilung
            $home_message = $my_ac_rech_Status." mit Identivikation ".$my_ac_rech->get_cs_Rechnungsnummer();
            $home_message .= "\r\n gesendet am ".$my_ac_info->getDatum("d.m.Y");
            $home_message = wordwrap($home_message, 70, "\r\n");
            $home_message = "<p>".$home_message."</p>";
    
            //Mail
            $mail = $_SESSION['ts_fi_f'][0]['mail'];
            $pdf_mail_home = NEW my_mail();
            $pdf_mail_home->set_object_pdf();
            $pdf_mail_home->set_to($mail);
            $pdf_mail_home->set_subject("Mailbestätigung für ".$my_ac_rech->get_cs_Rechnungsnummer());
            $pdf_mail_home->set_message($home_message);
            $pdf_mail_home->set_from("tsv_web@{$_SERVER['SERVER_NAME']}");
            $info .= "2 Mail geht an: ".$mail;
            $info .= "\nBestaetigungsmail:";
            $info .= "\n".$pdf_mail_home->send_mail();
    die $info variablen zeigen die entsprechenden Emailadressen an die auch wirklich stimmen.
    Mailklasse:
    Code:
    <?php
    
    class my_mail
    {
        private $to;
        private $from           = "meineMail@meineDomain.xx";
        private $subject        = "Sende email mit PDF Anhang";
        private $message        = "<p>Bitte beachten sie den Anhang.</p>";
        private $filename       = "rechnung.pdf";
    
        private $mail_ok        = "Mail wurde erfolgreich versandt an: ";
        private $mail_no        = "FEHLER: Mail konnte wegen eines unbekannten Fehlers nicht versendet werden" ;
        private $mail_def       = "FEHLER: E-Mail Adresse ungültig!";
        private $mail_body_txt  = "Dokumentenversand aus Timesave-web.";
        private $chkMail        = true;
        private $info           = "";
        private $headers        = "";
        private $body           = "";
        private $attachment     = "";
        private $pdfdoc;
        private $separator;
        private $eol;
    
        //Constructor der Klasse
        function __construct()
            {
                $this->separator      = md5(time());
                $this->eol            = PHP_EOL;
            }
    
        //Destructor der Klasse
        function __destruct()
            {
            }
    
        //pdf Object übergeben
        public function set_object_pdf($pdfObject = false)
            {
                if($pdfObject != false)
                    {
                        $this->pdf = $pdfObject;
                        $this->pdfdoc = $this->pdf->Output("", "S");
                        $this->attachment = chunk_split(base64_encode($this->pdfdoc));
                    }
    
            }
    
        //Variablen abfüllen
        public function set_to($value)
            {
                $this->to = $value;
            }
    
        public function set_from($value)
            {
                $this->from = $value;
            }
    
        public function set_subject($value)
            {
                $this->subject = $value;
            }
    
        public function set_message($value)
            {
                $this->message = $value;
            }
    
        public function set_body_txt($value)
            {
                $this->mail_body_txt = $value;
            }
    
        public function set_filename($value)
            {
                $this->filename = $value;
            }
    
        public function send_mail()
            {
                $this->set_headers();
                // send message
                if($this->test_mail_adr()=="")
                    {
                        $this->chkMail = mail($this->to, $this->subject, $this->body, $this->headers);
                    }
                else{$this->info = $this->test_mail_adr();}
    
                $this->fkt_chkMail();
    
                return $this->info;
            }
    
        //Fehlermeldungen Mailversand oder Mailadresse----------------------------------------
        //Text wenn der E-Mailversand funktioniert hat.                     Supi
        public function set_mail_to($value)
            {
                $this->mail_ok = $value;
            }
    
        //Text wenn der E-Mailversand nicht funktioniert hat.               Schei...
        public function set_mail_no($value)
            {
                $this->mail_no = $value;
            }
    
        //Text wenn die E-Mailadresse nicht stimmt oder unmöglich ist.      Schei...
        public function set_mail_def($value)
            {
                $this->mail_def = $value;
            }
    
        //Mailadresse auf richtigkeit prüfen--------------------------------------------------
        private function test_mail_adr()
            {
                if(!preg_match( '/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/' , $this->to))
                    {
                        return $this->mail_def;
                    }
                else{return "";}
            }
    
        //Info über das gelingen des Mailversands
        private function fkt_chkMail()
            {
                if($this->chkMail)
                    {
                        $this->info = $this->mail_ok.$this->to." von: ".$this->from;
                    }
                else
                {
                        $this->info = $this->mail_no;
                }
                return $this->info;
            }
    
        //informationen im Header abfüllen und mit Separator und Zeilenschaltungen versehen
        private function set_headers()
            {
                // main header
                $this->headers  = "From: ".$this->from.$this->eol;
                $this->headers .= "MIME-Version: 1.0".$this->eol;
                $this->headers .= "Content-Type: multipart/mixed; boundary=\"".$this->separator."\"";
    
                // no more headers after this, we start the body! //
    
                $this->body = "--".$this->separator.$this->eol;
                $this->body .= "Content-Transfer-Encoding: 7bit".$this->eol.$this->eol;
                $this->body .= $this->mail_body_txt.$this->eol;
    
                // message
                $this->body .= "--".$this->separator.$this->eol;
                $this->body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$this->eol;
                $this->body .= "Content-Transfer-Encoding: 8bit".$this->eol.$this->eol;
                $this->body .= $this->message.$this->eol;
    
                // attachment
                if($this->attachment!="")
                    {
                        $this->body .= "--".$this->separator.$this->eol;
                        $this->body .= "Content-Type: application/octet-stream; name=\"".$this->filename."\"".$this->eol;
                        $this->body .= "Content-Transfer-Encoding: base64".$this->eol;
                        $this->body .= "Content-Disposition: attachment".$this->eol.$this->eol;
                        $this->body .= $this->attachment.$this->eol;
                        $this->body .= "--".$this->separator."--";
                    }
            }
    }
    
    ?>

  • #2
    Es sollte nicht mail() für den Mail-Versand verwendet werden. Nimm eine fertige Mailer-Klasse wie z.B. PHPMailer.

    Kommentar


    • #3
      OK mache ich.
      Ist denn die original mail von php schei..?

      Kommentar


      • #4
        Zitat von Marlon Beitrag anzeigen
        OK mache ich.
        Ist denn die original mail von php schei..?
        1. Hängt das stark davon ab, wie der Server konfiguriert ist.
        2. Muss bei Versand mit mail() einiges beachtet werden und man hat praktisch keine Kontrolle darüber, was passiert.

        Kommentar


        • #5
          ist mit PHPMailer eine einfache Sache
          Hier mal der komplette Code, nachdem man PHPMailer einmal installiert hat.

          PHP-Code:
          <?php
          //PHPMailer Klasse verwenden
          use PHPMailer\PHPMailer\PHPMailer;
          require 
          '../vendor/autoload.php';

          $mail = new PHPMailer;   // Instanz erzeugen

          $mail->isSendmail();     // vom eigenen Hoster veschicken

          $mail->setFrom('from@example.com''Absendername');  // Absender

          $mail->addReplyTo('replyto@example.com''an mich'); // Rücksenden an

          $mail->addAddress('whoto@example.com''John Doe');  // an wen geht die Nachricht

          $mail->Subject 'PHPMailer sendmail test';          // Betreffzeile

          $mail->Body 'This is a plain-text message body';   // Textnachricht hier rein

          $mail->addAttachment('rechnung.pdf');                // Anhang hinzufügen sonst Zeile entfernen

          $mail->send();                       // Absenden 1. Mail

          $mail->ClearAllRecipients();         // Empfänger löschen, wichtig

          $mail->AddAddress($adminemail);      // eigene Adresse hinzufügen

          $mail->Send();                       // Absenden an sich selbst
          ?>

          Kommentar


          • #6
            Ohne Composer sähe das Einbinden so aus: https://www.php-rocks.de/thema/154-p...einbinden.html
            Danach ist wieder alles wie von protestix in #5 geschrieben ( ab Zeile 6 - Instanziierung )
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar

            Lädt...
            X