#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>»