Проблема добавления таблиц HTML в скрипт PHP Mail - PullRequest
0 голосов
/ 01 октября 2019

У меня есть следующий почтовый скрипт со структурой, показанной ниже:

<?php
$to = 'example@testing';
$subject = 'Testing';
$from = 'test@email.com';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Create email headers
$headers .= 'From: '.$from."\r\n".
    'Reply-To: '.$from."\r\n" .
    'X-Mailer: PHP/' . phpversion();

// Compose a simple HTML email message
$message = '<html><body>';
$message .= '<h1 style="color:#f40;">Hi!</h1>';
$message .= '<p style="color:#080;font-size:18px;">This is a test.</p>';
$message .= '</body></html>';

// Sending email
if(mail($to, $subject, $message, $headers)){
    echo 'Your mail has been sent successfully.';
} else{
    echo 'Unable to send email. Please try again.';
}
?>

Затем я хотел бы также поместить следующую таблицу в тело, но при добавлении следующего PHP не работает:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
        <style type="text/css">
            tr.header
            {
                font-weight:bold;
            }
            tr.alt
            {
                background-color: #777777;
            }
        </style>
        <script type="text/javascript">
            $(document).ready(function(){
               $('.striped tr:even').addClass('alt');
            });
        </script>
        <title></title>
    </head>
    <body>
        <?php

            $server = mysql_connect("localhost","root", "");
            $db =  mysql_select_db("MyDatabase",$server);
            $query = mysql_query("SELECT first_name, last_name, sign_date FROM Table1 WHERE sign_date = NOW()");
        ?>
        <table class="striped">
            <tr class="header">
                <td>first_name</td>
                <td>last_name</td>
                <td>sign_date</td>
            </tr>
            <?php
               while ($row = mysql_fetch_array($query)) {
                   echo "<tr>";
                   echo "<td>".$row[first_name]."</td>";
                   echo "<td>".$row[last_name]."</td>";
                   echo "<td>".$row[sign_date]."</td>";
                   echo "</tr>";
               }

            ?>
        </table>

                <?php

            $server = mysql_connect("localhost","root", "");
            $db =  mysql_select_db("MyDatabase",$server);
            $query = mysql_query("SELECT employee_id, job_title, address FROM Table1 WHERE sign_date = NOW()");
        ?>
        <table class="striped">
            <tr class="header">
                <td>employee_id</td>
                <td>job_title</td>
                <td>address</td>
            </tr>
            <?php
               while ($row = mysql_fetch_array($query)) {
                   echo "<tr>";
                   echo "<td>".$row[employee_id]."</td>";
                   echo "<td>".$row[job_title]."</td>";
                   echo "<td>".$row[address]."</td>";
                   echo "</tr>";
               }

            ?>
        </table>

    </body>
</html>

Как их можно просто сложить вместе. Кажется, что PHP не читается и игнорируется при объединении двух, какой самый эффективный способ заставить эти два сценария работать вместе?

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Скорее всего, вы можете объединить две части следующим образом - код PHP должен быть запущен перед отправкой почты (я нашел "but when adding the following, the PHP does not work" немного запутанным)

<?php

    $server = mysql_connect("localhost","root", "");
    $db =  mysql_select_db("MyDatabase",$server);


    $to = 'example@testing';
    $subject = 'Testing';
    $from = 'test@email.com';

    // To send HTML mail, the Content-type header must be set
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    // Create email headers
    $headers .= 'From: '.$from."\r\n".
        'Reply-To: '.$from."\r\n" .
        'X-Mailer: PHP/' . phpversion();


    $message="
        <html>
            <head>
            <title></title>
            <style>
                tr.header { font-weight:bold; }
                tr.alt { background-color: #777777; }
                tr:nth-of-type(even) td{background-color:#777777}
            </style>
            </head>
        <body>
            <table class='striped'>
                <tr class='header'>
                    <td>first_name</td>
                    <td>last_name</td>
                    <td>sign_date</td>
                </tr>";


    $query = mysql_query('SELECT first_name, last_name, sign_date FROM Table1 WHERE sign_date = NOW()');
    while ( $row = mysql_fetch_array( $query ) ) {
        $message.='
                <tr>
                    <td>'.$row['first_name'].'</td>
                    <td>'.$row['last_name'].'</td>
                    <td>'.$row['sign_date'].'</td>
                </tr>';
    }

    $message.="
            </table>

            <table class='striped'>
                <tr class='header'>
                    <td>employee_id</td>
                    <td>job_title</td>
                    <td>address</td>
                </tr>";


        $query = mysql_query('SELECT employee_id, job_title, address FROM Table1 WHERE sign_date = NOW()');
        while ($row = mysql_fetch_array($query)) {
            $message.='
                <tr>
                    <td>'.$row[employee_id].'</td>
                    <td>'.$row[job_title].'</td>
                    <td>'.$row[address].'</td>
                </tr>';
        }


    $message.="
            </table>
        </body>
    </html>
    ";



    // Sending email
    if(mail($to, $subject, $message, $headers)){
        echo 'Your mail has been sent successfully.';
    } else{
        echo 'Unable to send email. Please try again.';
    }
?>
0 голосов
/ 01 октября 2019

Когда вы добавляете HTML к телу, он становится строкой. Строка может преобразовывать переменные php в строки. Но не могу выполнить PHP-код. Вы должны будете выполнить код PHP заранее. Добавьте данные из кода PHP в HTML, а затем добавьте HTML в тело сообщения.

РЕДАКТИРОВАТЬ:

Это пример того, как это будет работать:

<?php

$html = generateHTML();

$to = 'example@testing';
$subject = 'Testing';
$from = 'test@email.com';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Create email headers
$headers .= 'From: '.$from."\r\n".
    'Reply-To: '.$from."\r\n" .
    'X-Mailer: PHP/' . phpversion();

// Compose a simple HTML email message
$message = $html;


// Sending email
if(mail($to, $subject, $message, $headers)){
    echo 'Your mail has been sent successfully.';
} else{
    echo 'Unable to send email. Please try again.';
}

function generateHTML(){
    $html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script><style type="text/css">tr.header{font-weight:bold;}tr.alt{background-color: #777777;}</style><script type="text/javascript">$(document).ready(function(){$(".striped tr:even").addClass("alt");});</script><title></title></head><body><table class="striped"><tr class="header"><td>first_name</td><td>last_name</td><td>sign_date</td></tr>';

    $server = mysql_connect("localhost","root", "");
            $db =  mysql_select_db("MyDatabase",$server);
            $query = mysql_query("SELECT first_name, last_name, sign_date FROM Table1 WHERE sign_date = NOW()");

    while ($row = mysql_fetch_array($query)) {
        $html.="<tr>";
        $html.="<td>".$row[first_name]."</td>";
        $html.="<td>".$row[last_name]."</td>";
        $html.="<td>".$row[sign_date]."</td>";
        $html.="</tr>";
    }

$html.='</table><table class="striped"><tr class="header"><td>employee_id</td>td>job_title</td><td>address</td></tr>';

$server = mysql_connect("localhost","root", "");
            $db =  mysql_select_db("MyDatabase",$server);
            $query = mysql_query("SELECT employee_id, job_title, address FROM Table1 WHERE sign_date = NOW()");

while ($row = mysql_fetch_array($query)) {
    $html.="<tr>";
    $html.="<td>".$row[employee_id]."</td>";
    $html.="<td>".$row[job_title]."</td>";
    $html.="<td>".$row[address]."</td>";
    $html.="</tr>";
}
$html.= '</table></body></html>';
return $html;
}
?>
...