So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden – PHP, Google Mail, Outlook

[ad_1]

Problem:

Wenn Sie ein Webprojekt entwickeln, das das Senden von E-Mails an Benutzer umfasst, ist es für Sie sehr wichtig zu wissen, ob diese E-Mails gelesen oder an diese Benutzer gesendet werden. Wenn Sie beispielsweise Marketing-E-Mails an die Liste Ihrer Abonnenten senden, müssen Sie unbedingt wissen, welche Benutzer Ihre E-Mails gelesen haben und welche nicht.

Dies wird Ihnen sehr helfen, Entscheidungen zu treffen, ob Sie die richtigen E-Mails senden oder nicht. Denn wenn der Benutzer Ihre Marketing-E-Mail lesen kann, aber nichts von Ihnen gekauft hat, bedeutet dies eindeutig, dass mit der E-Mail etwas nicht stimmt. Aber woher wissen Sie, ob die von PHP, Laravel oder einem anderen Framework, das Sie verwenden, gesendete E-Mail vom Benutzer geöffnet wird?

Lösung:

Folgen Sie diesem Tutorial, und Sie werden in der Lage sein, Ihrem Webprojekt solche Funktionen hinzuzufügen.

Senden der E-Mail:

Zum Versenden der E-Mail können Sie die beliebte Bibliothek „PHPMailer“ verwenden. Sie können auch die integrierte PHP-Funktion „mail()“ verwenden. Öffnen Sie die Eingabeaufforderung oder das Terminal in Ihrem Projektstammordner und führen Sie den folgenden Befehl aus (stellen Sie sicher, dass Composer auf Ihrem System installiert ist):

composer require phpmailer/phpmailer

Dadurch wird ein Ordner „Vendor“ in Ihrem Projektstammordner erstellt. Erstellen Sie in Ihrer MySQL-Datenbank eine Tabelle mit dem Namen „E-Mails“, die 4 Spalten enthält:

  1. ID (INTEGER) (Primärschlüssel, auto_increment, nicht null)
  2. E-Mail (TEXT) (nicht null)
  3. Inhalt (TEXT) (nicht null)
  4. read_at (DATETIME) (null)
So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden - PHP, Google Mail, Outlook - E-Mail-Tabelle
So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden – PHP, Gmail, Outlook – E-Mail-Tabelle

Senden Sie eine E-Mail mit dem folgenden Code in Ihrer PHP-Datei:

<?php

// import PHPMailer classes into the global namespace
// these must be at the top of your script, not inside a function
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
use PHPMailerPHPMailerException;

// load Composer's autoloader
require 'vendor/autoload.php';

// instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

// the person who will receive the email
$recipient = "recipient_email";

// content of email
$content = "This is the HTML message body <b>in bold!</b>";

// connect with database
$conn = mysqli_connect("localhost:8889", "root", "root", "test");

// insert in mails table
$sql = "INSERT INTO emails (email, content) VALUES ('" . $recipient . "', '" . $content . "')";
mysqli_query($conn, $sql);

// get inserted mail ID
$email_id = mysqli_insert_id($conn);

// append empty image tag with email content
// this will help to know when user read that email
$base_url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$content .= "<img src="https://adnan-tech.com/how-to-check-if-email-is-read-by-user-php-gmail-outlook/" . $base_url . "email_read.php?email_id=" . $email_id . "" style="display: none;" />";

try {
    // disable verbose debug output
    $mail->SMTPDebug = 0;

    // send using SMTP
    $mail->isSMTP();

    // set the SMTP server to send through
    $mail->Host="smtp.gmail.com";

    // enable SMTP authentication
    $mail->SMTPAuth = true;

    // SMTP username
    $mail->Username="[email protected]";

    // SMTP password
    $mail->Password = 'your_password';

    // enable TLS encryption
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;

    // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
    $mail->Port = 587;

    $mail->setFrom('[email protected]', 'Your name');

    // add a recipient
    $mail->addAddress($recipient);

    // set email format to HTML
    $mail->isHTML(true);
    $mail->Subject="Here is the subject";
    $mail->Body = $content;

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Sie müssen nur die E-Mail-Adresse und das Passwort mit Ihrer Gmail-Adresse und Ihrem Passwort ändern. Weitere Informationen zum Konfigurieren eines SMTP-Servers finden Sie unter lesen Sie dies.

So wird die E-Mail im Posteingang des Benutzers empfangen (Bild wird nicht angezeigt):

So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden - PHP, Gmail, Outlook - Posteingang
So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden – PHP, Gmail, Outlook – Posteingang

E-Mails und Lesezeit anzeigen:

Jetzt erstellen wir eine separate Seite für den Administrator, auf der er eine Liste aller von der Website gesendeten E-Mails sowie die Zeit sehen kann, zu der sie vom Benutzer gelesen werden. Erstellen Sie eine Datei namens „view_emails.php“ und fügen Sie den folgenden Code darin ein:

<?php

// connect with database
$conn = mysqli_connect("localhost:8889", "root", "root", "test");

// get all emails
$sql = "SELECT * FROM emails";
$result = mysqli_query($conn, $sql);

?>

<!-- basic style of table -->
<style>
    table, td {
        border: 1px solid black;
        border-collapse: collapse;
        padding: 25px;
    }
</style>

<table>

    <?php

    // show all emails
    while ($row = mysqli_fetch_object($result))
    {
        ?>
        <tr>
            <td><?= $row->id; ?></td>
            <td><?= $row->email; ?></td>
            <td><?= $row->content; ?></td>
            <td><?= $row->read_at == null ? "Not read" : $row->read_at; ?></td>
        </tr>
        <?php
    }

    ?>

</table>

Rufen Sie diese Seite direkt auf und Sie sehen eine Liste aller E-Mails mit der Uhrzeit, zu der sie gelesen wurden (nächster Schritt).

So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden - PHP, Google Mail, Outlook - Nicht gelesen
So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden – PHP, Gmail, Outlook – Nicht gelesen

Markieren Sie die Uhrzeit, zu der E-Mails gelesen werden:

Erstellen Sie eine Datei namens „email_read.php“ und fügen Sie den folgenden Code darin ein:

<?php

// this page will be executed only when the email is opened by user

// connect with database
$conn = mysqli_connect("localhost:8889", "root", "root", "test");

// get email ID
$email_id = $_GET["email_id"];

// update read_at value in emails table
$sql = "UPDATE emails SET read_at = NOW() WHERE id = '" . $email_id . "'";
mysqli_query($conn, $sql);

Sie werden nie die Ausgabe dieser Datei sehen, aber es wird die Zeit in der Datenbank markiert, wenn die E-Mail gelesen wird.

So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden - PHP, Gmail, Outlook - Lesen
So überprüfen Sie, ob E-Mails vom Benutzer gelesen werden – PHP, Gmail, Outlook – Lesen

Lassen Sie mich wissen, wenn Sie Probleme beim Befolgen dieses Tutorials hatten.



[ad_2]