Cody O'Meara Ответов: 1

Html тело не форматируется правильно для почты


Я пытаюсь отправить электронное письмо с помощью PHPMailer. Когда электронное письмо отправляется, оно отображает не таблицу, а часть кода.
Вот как письмо приходит в виде текста
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT fullName, result FROM results where dateTime > CURDATE() "); $stmt->execute(); // set the resulting array to associative $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { echo $v; } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; echo ""; ?>

Источник:
<pre>	$mail->isHTML(true);
    $mail->Body    = '
	<html>
<style>
table {
  border-spacing: 0;
  
  border: 1px solid #ddd;
}

th, td {
  text-align: left;
  padding: 16px;
}

tr:nth-child(even) {
  background-color: #f2f2f2
}
</style>
<body onload="sortTable()">
<center>
<?php
echo "<table id=\'myTable\' style=\'border: solid 1px black;\'>";
 echo "<tr><th>FullName</th><th>result</th></tr>";

class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }

    function current() {
        return "<td style=\'width: 150px; border: 1px solid black;\'>\' . parent::current(). \'</td>";
    }

    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}

$servername = "localhost";
$username = "REMOVED";
$password = "REMOVED";
$dbname = "REMOVED";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT fullName, result FROM results where dateTime > CURDATE() ");
    $stmt->execute();

    // set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
</center>
<script>
function sortTable() {
  var table, rows, switching, i, x, y, shouldSwitch;
  table = document.getElementById("myTable");
  switching = true;
  /*Make a loop that will continue until
  no switching has been done:*/
  while (switching) {
    //start by saying: no switching is done:
    switching = false;
    rows = table.rows;
    /*Loop through all table rows (except the
    first, which contains table headers):*/
    for (i = 1; i < (rows.length - 1); i++) {
      //start by saying there should be no switching:
      shouldSwitch = false;
      /*Get the two elements you want to compare,
      one from current row and one from the next:*/
      x = rows[i].getElementsByTagName("TD")[0];
      y = rows[i + 1].getElementsByTagName("TD")[0];
      //check if the two rows should switch place:
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        //if so, mark as a switch and break the loop:
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      /*If a switch has been marked, make the switch
      and mark that a switch has been done:*/
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
    }
  }
}
</script>


</body>
</html>';
	
	
	
	

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


Что я уже пробовал:

Чтобы устранить неполадки, я попытался вынуть что-нибудь с помощью " - >", И это, кажется, то, что является причиной, например, я подчеркнул их:

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT fullName, result FROM results where dateTime > CURDATE() ");
$stmt->execute();


Я могу быть совершенно неправ, но не уверен в этом на данный момент.

Также следует отметить, что все, что находится в теле почты, работает при отображении на обычной странице.

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Я ненавижу ломать вам голову, но вы не можете запустить какой-либо код в HTML-письме. Это был бы огромный риск для безопасности.


Cody O'Meara

Может быть, вы знаете другое решение, чтобы как-то добраться до того, что я пытаюсь сделать? Его единственные данные, так что, возможно, он может прочитать их из другого файла, а не запрашивать напрямую?

Я бы подумал, что есть способ, как компании отправляют электронные письма с кнопками, личной информацией, а что нет?

Спасибо за ответ!

Dave Kreskowiak

Единственный способ сделать это-построить таблицу на стороне сервера до отправки электронного письма.

Кнопки-это стандартный HTML, поэтому никакой код не должен выполняться там.