PHPMailer也是发送电子邮件和mail()函数的好选择,但问题是为电子邮件正文生成动态内容,并且主题不是最好的。
例如我创建了一个带有正文模板的php文件或一个具有相同功能的类,但是很难维护。
您对组织该代码有何建议?
有没有办法创建电子邮件模板? (像树枝)。 你如何组织文件夹和文件? 那有什么文件推荐吗? 谢谢你的帮助
答案 0 :(得分:1)
与您在PHP中已经用于生成动态HTML的内容没有什么不同。除了不是通过您的Web服务器将生成的HTML输出发送到客户端UA,您将通过MTA将其发送到电子邮件UA。
20年前,有人想要创造一个好的模板引擎来生成动态内容(它被称为PHP)。事实证明它今天仍然非常有用。假设您的电子邮件中有一个类似于此的模板文件。
<table>
<?php foreach($rows as $row) { ?>
<tr>
<?php foreach($row as $column) { ?>
<td><?=$column?></td>
<?php } ?>
</tr>
<?php } ?>
</table>
假设有一些模板系统可以将这些模板渲染成这样的东西。
class Template {
protected $templateFile = "";
protected $templateVars = [];
public function __construct($templateFile, Array $templateVars= []) {
$this->templateVars = $templateVars;
$this->templateFile = $templateFile;
}
public function __toString() {
export($this->templateVars, EXTR_SKIP);
ob_start();
include $this->templateFile;
return ob_get_clean();
}
}
现在,您可以进一步扩展这个非常简单的模板抽象,以包含诸如电子邮件主题行,发件人电子邮件地址等内容......
class SendEmail {
public function __construct($to, $subject, $template, Array $data) {
$template = new Template($file, $data); // create the email template
$this->emailBody = (string) $template; // generate the content
$this->to = $to;
$this->subject = $subject;
}
public function send() {
// Send email using PHP mailer or whatever here
}
}
答案 1 :(得分:-1)
$tempalteContent = mysqli_query($conn, "select * from newsletter_template where name like '%$template%'");
if (mysqli_num_rows($tempalteContent) > 0) {
$validate = 0;
$messageFinal = '';
$message = '';
$row = mysqli_fetch_array($tempalteContent);
$template_id = $row['id'];
$productInc = $row['productsInc'];
$blogInc = $row['blogInc'];
$templateMsg = htmlspecialchars_decode($row['description']);
$divData = '';
$blogData = '';
if ($blogInc == 1 && $productInc == 1) {
/* * Product Query* */
$productQuery = mysqli_query($conn, "select * from newsletter_products where newsletter_tempalte_id = $template_id");
if (mysqli_num_rows($productQuery) > 0) {
$width = '';
$website = "http://demo.com/";
if (mysqli_num_rows($productQuery) > 2) {
$width = '100%';
} else if (mysqli_num_rows($productQuery) > 1) {
$width = '100%';
}
for ($i = 0; $i <= mysqli_num_rows($productQuery); $i++) {
$row[$i] = mysqli_fetch_array($productQuery);
$product_id[$i] = $row[$i]['product_id'];
$productDetails[$i] = mysqli_query($conn, "select * from products where product_id = $product_id[$i]");
if (mysqli_num_rows($productDetails[$i]) > 0) {
$rowproduct[$i] = mysqli_fetch_array($productDetails[$i]);
$productName[$i] = $rowproduct[$i]['product_name'];
$productImg[$i] = $website . $rowproduct[$i]['product_img'];
$productDesp[$i] = htmlspecialchars_decode($rowproduct[$i]['product_desp']);
$divData .= "<div style='width:" . $width . ";float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $productImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $productName[$i] . "</b><span style='font-size:12px;'>" . $productDesp[$i] . "</span></div>";
}
$validate++;
}
}
/* * Blog Query* */
$blogQuery = mysqli_query($conn, "select * from newsletter_blogs where newsletter_template_id = $template_id");
if (mysqli_num_rows($blogQuery) > 0) {
$width = '';
$website = "http://demo.com/";
if (mysqli_num_rows($blogQuery) > 2) {
$width = '100%';
} else if (mysqli_num_rows($blogQuery) > 1) {
$width = '100%';
}
for ($i = 0; $i <= mysqli_num_rows($blogQuery); $i++) {
$row[$i] = mysqli_fetch_array($blogQuery);
$blog_id[$i] = $row[$i]['blog_id'];
$blogDetails[$i] = mysqli_query($conn, "select * from blog where id = $blog_id[$i]");
if (mysqli_num_rows($blogDetails[$i]) > 0) {
$rowblog[$i] = mysqli_fetch_array($blogDetails[$i]);
$blogName[$i] = $rowblog[$i]['title'];
$blogImg[$i] = $website . $rowblog[$i]['img'];
$blogDesp[$i] = htmlspecialchars_decode($rowblog[$i]['desp']);
$blogData .= "<div style='width:100%;float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $blogImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $blogName[$i] . "</b><span style='font-size:12px;'>" . $blogDesp[$i] . "</span></div>";
}
$validate++;
}
}
$message = $templateMsg . $divData . $blogData;
} else if ($productInc == 1 && $blogInc == 0) {
$productQuery = mysqli_query($conn, "select * from newsletter_products where newsletter_tempalte_id = $template_id");
if (mysqli_num_rows($productQuery) > 0) {
$width = '';
$website = "http://demo.com/";
if (mysqli_num_rows($productQuery) > 2) {
$width = '100%';
} else if (mysqli_num_rows($productQuery) > 1) {
$width = '100%';
}
for ($i = 0; $i <= mysqli_num_rows($productQuery); $i++) {
$row[$i] = mysqli_fetch_array($productQuery);
$product_id[$i] = $row[$i]['product_id'];
$productDetails[$i] = mysqli_query($conn, "select * from products where product_id = $product_id[$i]");
if (mysqli_num_rows($productDetails[$i]) > 0) {
$rowproduct[$i] = mysqli_fetch_array($productDetails[$i]);
$productName[$i] = $rowproduct[$i]['product_name'];
$productImg[$i] = $website . $rowproduct[$i]['product_img'];
$productDesp[$i] = htmlspecialchars_decode($rowproduct[$i]['product_desp']);
$divData .= "<div style='width:" . $width . ";float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $productImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $productName[$i] . "</b><span style='font-size:12px;'>" . $productDesp[$i] . "</span></div>";
}
$validate++;
}
}
$message = $templateMsg . $divData;
} else if ($blogInc == 1 && $productInc == 0) {
$blogQuery = mysqli_query($conn, "select * from newsletter_blogs where newsletter_tempalte_id = $template_id");
if (mysqli_num_rows($blogQuery) > 0) {
$width = '';
$website = "http://demo.com/";
if (mysqli_num_rows($blogQuery) > 2) {
$width = '100%';
} else if (mysqli_num_rows($blogQuery) > 1) {
$width = '100%';
}
for ($i = 0; $i <= mysqli_num_rows($blogQuery); $i++) {
$row[$i] = mysqli_fetch_array($blogQuery);
$blog_id[$i] = $row[$i]['blog_id'];
$blogDetails[$i] = mysqli_query($conn, "select * from blog where id = $blog_id[$i]");
if (mysqli_num_rows($blogDetails[$i]) > 0) {
$rowblog[$i] = mysqli_fetch_array($blogDetails[$i]);
$blogName[$i] = $rowblog[$i]['title'];
$blogImg[$i] = $website . $rowblog[$i]['img'];
$blogDesp[$i] = htmlspecialchars_decode($rowblog[$i]['desp']);
$blogData .= "<div style='width:100%;float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $blogImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $blogName[$i] . "</b><span style='font-size:12px;'>" . $blogDesp[$i] . "</span></div>";
}
$validate++;
}
}
$message = $templateMsg . $blogData;
} else {
$message = $templateMsg;
}
$messageFinal = '<div style="width:100%">' . $message . '</div>';
echo $validate;
} else {
echo "Fail";
exit();
}
$subscribers = explode(',', $_POST['subscribers']);
for ($i = 0; $i < count($subscribers); $i++) {
$to = $subscribers[$i];
$subject = $template;
$from = 'demo@demo.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: Demo' . "\r\n" .
'Reply-To: Your Email Id' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// Compose a simple HTML email message
$message = '<!DOCTYPE html><html><body>';
$message .= $messageFinal . $footer;
$message .= '</body></html>';
// Sending email
if (mail($to, $subject, $message, $headers)) {
$validate++;
} else {
$validate = 0;
}
}