• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!
Ich habe ein Problem ich habe ein Registrierungs Formular wo sich Leute mit einer Email Adresse anmelden können aber sie müssen ihre Email Addresse mit einem code Bestätigen das ganze mach ich mit einem xmhttpRequest das Programm führt alles aus was in der php Datei steht außer denn Befehl mail();

ihr nochmal der Quell Code für die mail

PHP:
    $email = $_GET['email'];
    $code = rand("11111","999999");
    $betreff = "Email Code";
    $text = "Danke das sie sich bei Tellycream Registriert haben \r\n\r\n Hier ist ihr bestätigungs code ".$code;
    $mail = $email . "," . $betreff . "," . $text . ",Tellycream [email protected]";

    mail($mail);
 
Werbung:
Schmeiß weg !

mail() ist der letze Müll.
Selbst Php Profis nutzen das nicht weil man das alles gar nicht richtig konfigurieren kann.

Dafür gibt es php mailer die das richtig gut machen.
Dann hast du keine probleme mehr damit.
Bei mail() kommen viele Emails gar nicht an oder landen im Spam Ordner


Mach mal dein Error report an und lies mal was da steht
 
Werbung:
Werbung:
ich habe dazu jetzt ein lern Video angeschaut aber jetzt funktioniert mein Kompleter xmlhttpRequest nicht mehr
hier der Code:
PHP:
    use PHPMailer/PHPMailer/PHPMailer;
    require_once "PHPMailer/PHPMailer.php";
    require_once "PHPMailer/SMTP.php";
    require_once "PHPMailer/Exception.php";

    $mail = new PHPMailer();  

    $mail->isSMTP();
    $mail->Host = "smpt.gmail.com";
    $mail->SMTPAuth = true;
    $mail->Username = "[email protected]";
    $mail->Password = "MEiN Passwort";
    $mail->Port = 465;
    $mail->SMTPSecure = "ssl";

    $mail->isHTML(isHTML:true);
    $mail->setFrom($email, "Christoph");
    $mail->addAddress(address:"[email protected]");
    $mail->Subject = "Code";
    $mail->Body = "hallo das ist die msg";
 
PHP:
$mail->isHTML(isHTML:true);
Diese Zeile würde ich noch mal genauer kontrollieren.

Und "funktioniert nicht" ist keine Problembeschreibung.
 
Werbung:
er führt ja das ganze xmlhttpRequest nicht aus
Dann machst du wohl was falsch. Leider sind meine hellseherischen Qualitäten nicht besonders ausgeprägt, so dass ich ohne den aktuellen Quellcode zu kennen, nichts dazu sagen kann.

Richtig debuggen

  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Wenn Du ein IMAP Konto irgendwo hast dann kannst Du Dich ja mit php dort einwählen,
und von dort eine Email versenden. Natürlich musst Du dann im Prinzip sämtliche Schritte machen, die Du auch sonst machen musst.

Als Erstes musst Du Dich in Dein Konto einwählen.

PHP:
    /*
    $user - imap_user
    $pass - imap_pass
    $host - imap/pop host (zB. "imap.google.com" oder "pop3.google.com")
    */
    
    $mbox = imap_open("{$host:993/imap/ssl/}INBOX", $user, $pass);
    
    // oder wenn Du lieber poppst
    
    $mbox = imap_open("{$host:995/pop3/ssl/}", $user, $pass);

    // $mbox ist der Stream, den brauchen wir später

jetzt bist Du erst mal drin. Ruh' Dich aus.
Als nächstes erzeugen wir die Mail (Angenommen wir wollen einem guten Freund aus Berlin, der Viren sammelt, einen neuen Virus senden, den uns neulich ein Freund aus Amerika zugespa... pardon, zugesandt hat.)

PHP:
 /*  

    Das sind hier schon mal paar Variablen die wir gleich brauchen wern,
    die kannst Dir schonmal zurecht legen.

    $v - Versender Email,
    $e - Empfänger Email,
    $b - Der Betreff,

    $zh - Eventuelle zusätzliche Headers (optional, kann man leer lassen),
    $cc - Carbon Copy  (optional),
    $bcc - Blind Copy  (optional),
    $r - Antwort Adresse  (optional),

    $d - die Kurzfassung max. 2 Zeilen,
    $m - der Text deiner Email, (kann auch HTML Code sein),

    Dann deine Anhänge als Array
    $att = array();
    $att[1]  - Dein Anhang1, zB "C:\tmp\virus1.exe";
    $att[2]  - Dein Anhang2, zB "C:\tmp\virus2.exe";
    ...
    $att[n]  - Dein Anhangn ... usw ..
*/

    $att = array{"C:\tmp\virus1.exe","C:\tmp\virus2.exe", .... }

    $head = array( "from"=>$v, "to"=>$e, "cc"=> $cc);

    $body = array();

    // den Teil brauch man immer
    $body[1]["type"] = TYPEMULTIPART;
    $body[1]["subtype"] = "mixed";

    // diesen nächsten Teil brauchst Du nur wenn Du einen oder mehrere Viren
    // versenden willst.

$i = 2;
foreach ( $att as $anhang  ){
    $cn = fread(fopen($anhang,"r"),filesize($anhang));fclose(fopen($anhang, "r"));
    $body[$i]["type"] = TYPEAPPLICATION;
    $body[$i]["encoding"] = ENCBINARY;   
          // eventuell kann man auch 32 oder 64 bit encodieren,
          // z.B. $body[$i]["encoding"] = ENCBASE64;
    $body[$i]["subtype"] = "octet-stream";
    $body[$i]["description"] = basename($anhang);
    $body[$i]['disposition.type'] = 'attachment';
    $body[$i]['disposition'] = array ('filename' => basename($anhang));
    $body[$i]['type.parameters'] = array('name' => basename($anhang));
    $body[$i]["contents.data"] = $cn;
         // wenn man weiter oben die encapsulated base 64 angesagt hat dann müss man
         // hier auch konsequent base 32 oder 64 encoden:
         // z.B. $body[$i]["contents.data"] = base64_encode($cn);
    $i++;
}

    // wenn Du mehr als einen Virus versenden willst, dann musst Du diesen zweiten Teil
    // eben öfter schreiben, und dann wird halt der nächste Abschnitt statt $body[3]
    // eben ...$body[4] ... oder ...$body[n] ...

    // Den ersten[1] und letzten[3] Teil brauch man immer, weil da ja die eigentliche
    // Email ist. drin ist
    $body[3]["type"] = TYPETEXT;
    $body[3]["subtype"] = "plain";
    $body[3]["description"] = $d;
    $body[3]["contents.data"] = $m . "\n\n\n\t";

  /*
    es ist wichtig zu verstehen dass diese $body array eine sogenannte 
    mehrdimensionale array ist, quasi eine indexierte array deren elemente
    assoziative arrays sind, deswegen heisst die Email auch "multipart"
    
    Array
       (
            [1] => Array {
                    [type] = TYPEMULTIPART
                    [subtype] = "mixed"
            }
            [2] => Array {
                    [type] = TYPEAPPLICATION
                    [encoding] = ENCBINARY
                    [subtype] = "octet-stream"
                    usw ...
            }
            [3] => Array {
                    usw ...
            }
       }

  */

    // zuletzt setzt Du dann quasi die Teile zusammen
    $email = imap_mail_compose ( $head , $body );

    // und jetzt versendest Du das gute Teil
    imap_mail( $e, $b, $email, $zh, $cc, $bcc, $r);


so kompliziert ist das doch gar nicht ...
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben