Отправка Mysql $ body в виде данных таблицы, а не вложения - PullRequest
0 голосов
/ 30 декабря 2018

Мне нужно отправить данные из mysql db по электронной почте.Я использую php mailer в качестве отправителя почты.Я нашел решения, где я могу отправить его в виде вложения, но не в виде отформатированного тела.Когда я делаю get_file_contents, «displaywebpage.php» считывает только форматирование Html, и весь php выходит в виде строк.Не звоню БД или что-нибудь.Когда я проверяю в браузере на myserver / displaywebpage.php работает отлично, но при отправке электронной почты он не работает.

Вот mailsend.php

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);  
$body = file_get_contents('displaywebpage.php');


try {
//Server settings
$mail->SMTPDebug = 2;                                
$mail->isSMTP();                                      
$mail->Host = 'smtp.gmail.com'; 
$mail->SMTPAuth = true;                             
$mail->Username = 'xx@gmail.com';                
$mail->Password = 'mypassword';                           
$mail->SMTPSecure = 'tls';                            
$mail->Port = 587;                                   

//Recipients
$mail->setFrom('xx@gmail.com', 'Mailer');
$mail->addAddress('to_xy@gmail.com', 'Joe User');     
// $mail->addAddress('ellen@example.com');              
$mail->addReplyTo('xx', 'Mailer');
// $mail->addCC('cc@example.com');
//  $mail->addBCC('bcc@example.com');

//Attachments
// $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//  $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

//Content
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = $body;
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
  echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>

, а вот displaywebpage.php

 <?php

$con = mysqli_connect("localhost","user","pass");
 if(!$con){
       die("Database Connection failed".mysqli_error());
}else{
$db_select = mysqli_select_db($con,'test2');
     if(!$db_select){
           die("Database selection failed".mysqli_error());
}else{

   }
}

 $records = mysqli_query($con,"SELECT * FROM test2 ORDER by field2");



?>

<!-- This piece of PHP code defines the structure of the html table -->

 <!DOCTYPE html>
<html>
     <head>
    <title> web report </title>
    </head>

    <body>

    <table width="500" border="2" cellpadding="2" cellspacing='1'>

       <tr bgcolor="#2ECCFA">
                 <th> user</th>
                 <th>Device</th>
                 <th>Last Contact</th>
       </tr>

<!-- We use while loop to fetch data and display rows of date on html table -->

<?php

 while ($course = mysqli_fetch_assoc($records)){

       print "<tr>";
           print "<td>".$course['user']."</td>";
           print "<td>".$course['Device_ID']."</td>";
           print "<td>".$course['Last_Contact']."</td>";
       print "</tr>";

 }
?>
        </table>

   </body>

</html>

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

include файл и захватить его вывод, используя буферизацию вывода :

ob_start();
include 'displaywebpage.php';
$body = ob_get_contents();
ob_end_clean();
0 голосов
/ 30 декабря 2018

file_get_content получить все содержимое файла, но не выполнит файл !

Для решения вашей проблемы у вас есть два варианта (если вы хотите сохранитьваша логика):

  1. Используйте Ajax для вызова displaywebpage.php и возврата содержимого (которое даст вам выполненный код)

  2. getсодержимое файла displaywebpage.php, используя file_get_content , а затем запустите ваш PHP-код внутри mailsend.php, а затем замените ваши строки содержимым, которое вы уже получили.

ВВ случае, если вы хотите использовать второй вариант (который, как мне кажется, вам будет проще), вы должны удалить все коды PHP из displaywebpage.php и добавить их в mailsend.php, используя str_replace вместоСтрока в ваш HTML:

$body = '<tr>
 <td>[user]</td>
 <td>[Device_ID]</td>
 <td>[Last_Contact]</td>
</tr>'; // this is inside your displaywebpage.php which you got using *file_get_content*


$user = $course['user'];
$device_id = $course['Device_ID'];
$last_content = $course['Last_Contact'];

$body .= str_replace ('[user]', $user, $body);
$body .= str_replace ('[Device_ID]', $device_id, $body);
$body .= str_replace ('[Last_Contact]', $last_content, $body);
...