простая почта (), которая сгенерирует извлеченный отчет из mysql

#php #mysql #email

#php #mysql #Адрес электронной почты

Вопрос:

отправка почты на php с использованием простой mail() функции.

я хочу отправить почту, которая сгенерирует отчет, который извлекается из базы данных mysql, но mail() ожидает 4 параметра mail($to,$subject,$message,$from) , которые я не могу сгенерировать $message , поскольку он будет содержать тело письма с выбранными значениями и определенным форматом.

мой script.php для создания отчета:-

 <?php
$to  = 'abc@gmail.com' . ', ';
$subject = 'Test Mail';

$query=mysql_query("SELECT * from table_name ");

echo'<html>
<head>
<title>Testing</title>
</head>
<h1>Test User</h1>
<table border="1" cellspacing="1">

<tr>
<th>id</th>
<th>user</th>
<th>phoneCount</th>';

while($row = mysql_fetch_array($query))
 {
echo  "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['user'] . "</td>";
echo "<td>" . $row['phone'] . "</td>";
echo "</tr>";
}
echo "</table>";      
echo "</html>";

$headers  = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";
// More headers
$headers .= 'From: <from@example.com>' . "rn";
mail($to, $subject, $msg, $headers);
?>
 

поскольку я получил значение $ to, $ subject, $ headers, но $ msg создает проблему. как я могу отправить почту в этом формате. я не могу понять, как получить тело письма в $ msg, которое будет генерировать отчеты

Комментарии:

1. Вы отображаете свой контент на экране вместо того, чтобы записывать его в $msg свою переменную.

2. для чего мне нужна эта переменная store.is именно в части echo <html> мне нужно назначить переменную или запрос для оператора mysql. и если я назначу переменную, я не смогу увидеть ее в browsr

Ответ №1:

Ну, в простейшей форме вместо того, чтобы повторять содержимое, вы хотите присвоить его переменной.

У вас есть несколько вариантов для этого:

1) Объединение переменных

 $message = '<p>Line 1</p>';
$message .= '<p>' . $line2 . '</p>';
$message .= '<p>Line 3</p>';
 

Тогда содержимое $message будет:

 <p>Line 1</p><p>Line 2</p><p>Line 3</p>
 

2) Буферизация вывода

 ob_start(); // http://www.php.net/manual/en/function.ob-start.php

echo '<p>Line 1</p>';
echo '<p>' . $line2 . '</p>';
echo '<p>Line 3</p>';

$message = ob_get_clean(); // http://www.php.net/manual/en/function.ob-get-clean.php
 

3) Синтаксис Heredoc (этот подход может быть сложным, я бы не рекомендовал его прямо сейчас)

 $message = <<<EOT

<p>Line 1</p>
<p>$line2</p>
<p>Line 3</p>

EOT;
 

Каждый из этих 3 подходов позволит вам получить содержимое, назначенное в $message .

Однако по умолчанию mail будет отправлять только обычное текстовое электронное письмо. Если вы хотите отправить электронное письмо в формате HTML, вам нужно установить определенные заголовки, и в идеале вы должны установить составные границы и т.д. Я бы, вероятно, рекомендовал использовать библиотеку, подобную Zend, которую вы можете включать по частям. В противном случае вот простой пример: http://css-tricks.com/sending-nice-html-email-with-php /

Надеюсь, это поможет.

Ответ №2:

Измените эту часть вашего кода:

 echo'<html>
<head>
<title>Testing</title>
</head>
<h1>Test User</h1>
<table border="1" cellspacing="1">

<tr>
<th>id</th>
<th>user</th>
<th>phoneCount</th>';

while($row = mysql_fetch_array($query))
 {
echo  "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['user'] . "</td>";
echo "<td>" . $row['phone'] . "</td>";
echo "</tr>";
}
echo "</table>";      
echo "</html>";
 

должно быть что-то вроде приведенного ниже:

 $msg = '<html>
<head>
<title>Testing</title>
</head>
<h1>Test User</h1>
<table border="1" cellspacing="1">';

$msg = $msg . "<tr>";
$msg = $msg . "<th>id</th>";
$msg = $msg . "<th>user</th>";
$msg = $msg . "<th>phoneCount</th>";
while($row = mysql_fetch_array($query))
 {
$msg = $msg . "<tr>";
$msg = $msg ."<td>" . $row['id'] . "</td>";
$msg = $msg ."<td>" . $row['user'] . "</td>";
$msg = $msg ."<td>" . $row['phone'] . "</td>";
$msg = $msg ."</tr>";
}
$msg = $msg . "</table>";      
$msg = $msg . "</html>";
 

Комментарии:

1. синтаксическая ошибка, неожиданный ‘$ msg’ (T_VARIABLE) отсутствует точка с запятой или что-то в формате he, когда я запускаю его в браузере

2. возможно, <граница таблицы =»1″ cellspacing=»1″>’; заканчивающийся на ‘; будет в $msg = $msg . «<th> phoneCount</th>»‘; выполнение этого не показывает ошибки.

3. Чтобы очистить это, вы могли бы выбрать .= вместо = $msg . «бла» и вместо того, чтобы прерывать строку, вы могли бы интерполировать значения массива, например: «<td>{$row[‘id’]}</td>»