PHP EMails auslesen und damit arbeiten

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von JMD.

    PHP EMails auslesen und damit arbeiten

    Moin,

    ich arbeite seit Januar sogut wie ununterbrochen an einem größerem Projekt und es fehlt nurnoch ein Part um dieses zu vollenden.
    Jedoch komm ich da absolut nicht weiter. :(

    Ich lasse mir in dem folgenden Code alle meine Emails auslesen. Ich kann sie anklicken, danach lesen, antworten oder einfach löschen. Ein normales Senden brauch ich nicht und hab es deshalb nicht.

    Code:

    PHP-Quellcode

    1. <?php
    2. // Anmelde Daten festlegen
    3. $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    4. $username = "emailadresse@gmail.com";
    5. $password = "mein passwort";
    6. // verbinden
    7. $inbox = imap_open($hostname, $username, $password) or die('Cannot connect to Gmail: '.imap_last_error());
    8. // email's abrufen
    9. $emails = imap_search($inbox,'SUBJECT "Support"');
    10. //
    11. if($emails) {
    12. // sortieren das die neusten email am anfang sind
    13. rsort($emails);
    14. if (isset($email_number)) {
    15. // email nachricht ausgeben, da ein email Identifikator mitgegeben wurde
    16. $overview = imap_fetch_overview($inbox, $email_number, 0);
    17. $message = imap_fetchbody($inbox, $email_number, 2);
    18. echo quoted_printable_decode($message);
    19. } else {
    20. // schleife durch jede email
    21. foreach($emails as $email_number) {
    22. // email infos bekommen
    23. $overview = imap_fetch_overview($inbox, $email_number, 0);
    24. $message = imap_fetchbody($inbox, $email_number, 2);
    25. // info variablen festlegen
    26. $seenstatus = ($overview[0]->seen ? 'read' : 'unread');
    27. $seenclass = ($overview[0]->seen ? 'success' : 'warning');
    28. $subject = imap_utf8($overview[0]->subject);
    29. $from = imap_utf8($overview[0]->from);
    30. $date = imap_utf8($overview[0]->date);
    31. $date = strtotime($date);
    32. $date = date("Y-m-d H:i:s", $date);
    33. // email infos aufgeben
    34. ?><article class="row mail" id="mail<?= $email_number ?>">
    35. <h4 class="<?= $seenstatus ?>">From: <?= $from ?> <span class="label label-<?= $seenclass ?>"><?= $seenstatus ?></span> <span class="label label-default">at <?= $date ?></span></h4>
    36. <h5>"<?= $subject ?>"</h5>
    37. <button class="btn btn-default btn-sm" onclick="appendIFrameFromID(<?= $email_number ?>)" >retrieve inner message</button>
    38. <button class="btn btn-default btn-sm" onclick="answerToID(<?= $email_number ?>)" >retrieve inner message</button>
    39. </article><hr>
    40. <?php
    41. //absenden
    42. flush();
    43. }
    44. }
    45. } else {
    46. die("No e-mails can be retrieved!");
    47. }
    48. ?>


    In der Index dateisteht dann an der entsprechenden Stelle:

    PHP-Quellcode

    1. echo '<div class="container">';
    2. define("MAILMODE", 1);
    3. require_once("mailer.php");
    4. echo '</div>';


    Mein Problem ist:
    dass ich nach dem einfügen die Fehlermeldung: Warning: imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl} INBOX in C:\xampp\htdocs\mailer.php on line 17 Cannot connect to Gmail: Too many login failures
    und 3 mal die Fehlermeldung: Unknown: [ALERT] Please log in via your web browser: support.google.com/mail/accounts/bin/answer.py?answer=78754 (Failure) (errflg=1) in Unknown on line 0
    zum schluss danach nochmal dass es zu viele Fehlversuche waren.

    Kumpel hat das ganze bei sich getestet und bei ihm läuft es.

    Zur Info: Momentan hab ich das ganze noch nicht öffentlich im Web sondern noch lokal per Xampp.
    Weiterhin sind die Einloggdaten mehrmals gecheckt und erfolgreich auf gmail ausprobiert worden.

    Ich hoffe ihr könnt mir helfen.


    Mit freundlichen Grüßen
    JMD

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JMD“ ()

    Hallo,

    mit der Klasse aus dem Link kann ich nur direkt eine Email schicken bzw eine auslesen. (zumindest war das das ergebnis meines Tests). Mit meinem Code werden jedoch: erst alle EMails die im Betreff "Support" enthalten haben ausgelesen (das ist wichtig) dann werden sie mir mit allen vorerst nötigen Daten untereinander angezeigt und ich kann mir eine Mail aussuche. Nach dem klick auf eine beliebige Mail wird mir diese angezeigt (Sprich der Inhalt) dann hab ich die möglichkeit darunter zu antworten oder sie einfach zu löschen. EIn normales senden wo ich eine Adresse angeben muss ist nicht nötig und wurde deshalb nicht implementiert. Nachdem die Mail gesendet wurde komm ich wieder zurück zur Mailauswahl.

    So ist zumindest mein Code aufgebaut.

    Was ich jedoch vergessen habe zu erwähnen ist das ich noch mit JavaScript gearbeitet habe:

    ich importiere: ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js

    und habe noch:

    Quellcode

    1. function appendIFrameFromID(id) {
    2. $mailframe = $("#mail"+id);
    3. $mailframe.find('iframe').remove();
    4. $mailframe.find('.loader').remove();
    5. // iframe erstellen
    6. $iframe = $("<iframe frameborder=\"0\">");
    7. $iframe.hide();
    8. $iframe.attr('src', "mailer.php?email_number="+id);
    9. $iframe.load(function() {
    10. $mailframe.find('.loader').remove();
    11. $iframe.slideDown();
    12. $('html,body').stop().animate({
    13. scrollTop: $iframe.offset().top
    14. });
    15. });
    16. $closebutton = $("<button class=\"btn btn-danger btn-sm\">");
    17. $closebutton.text("delete frame node");
    18. $closebutton.click(function(event) {
    19. $iframe.remove();
    20. $closebutton.remove();
    21. });
    22. // lade information erstellen
    23. $loadinfo = $("<div>");
    24. $loadinfo.addClass('loader');
    25. $loadinfo.text("Loading E-Mail... have patiance!");
    26. $mailframe
    27. .append($closebutton)
    28. .append($loadinfo)
    29. .append($iframe);
    30. }


    Gruß
    JMD