我正在使用电子邮件模板进行简单的PHP表单验证。我有一个名为" index.html"的简单形式。并使用表单方法提交按钮" post"并采取行动为" sendmail.php"。在我的sendmail.php中,我有smtp-mailer.php和电子邮件模板,名为" email-template.html"。我如何通过sendmail.php将一个变量从index.html传递给mail-template.php ...抓住我的观点???我知道使用SESSION。但我不知道我应该在哪里打电话以及如何取这个?任何想法...... ???
<form method="post" action="sendemail.php">
Email: <input name="email" id="email" type="text" /><br />
Message:<br />
<textarea name="message" id="message" rows="15" cols="40"></textarea><br />
<input type="submit" value="Submit" />
</form>
<?php
include "class.smtp.php";
include "class.phpmailer.php";
session_start();
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
$_SESSION['message'] = $message;
$Body = file_get_contents('email-template.php');
...
...
?>
<table border="1">
<tr>
<td colspan="2">
<h3>
<?php
session_start();
$message = $_SESSION['message'];
echo "Your registration is: ".$message.".";
?>
</h3>
</td>
</tr>
</table>
更新:我做了同样的事......但没有回复......我是否错过了sendmail.php中的内容
答案 0 :(得分:8)
您正试图将您的电子邮件放在自己的模板文件中,这很棒,但您需要在其中实际执行PHP代码以填写变量。
将email-template.html重命名为email-template.phtml。这是php模板的一个相当标准的扩展。 值得注意的是,在PHP中不推荐使用$ _REQUEST,因为它同时使用POST和GET参数,并且您决定用户需要POST表单。
在 sendmail.php :
中包含并执行模板文件<?php
include "class.smtp.php";
include "class.phpmailer.php";
function render_email($email, $message) {
ob_start();
include "email-template.phtml";
return ob_get_contents();
}
$email = $_POST['email'] ;
$message = $_POST['message'];
$body = render_email($email, $message);
...
...
render_email包含模板文件,将两个变量$ email和$ message暴露给该模板文件,然后返回包含模板的输出。
您可以像之前尝试的那样在template.phtml中使用这些变量。 电子邮件-template.phtml:强>
<table border="1">
<tr>
<td colspan="2">
<h3>
Your registration is:<?= htmlspecialchars($message) ?>
</h3>
</td>
</tr>
</table>
答案 1 :(得分:1)
你可以用3种方式做到这一点。使用会话或使用cookie在链接中注入var。我个人建议会话,因为用户无法修改它们,当用户关闭浏览器时它们会过期。
你需要将index.html重命名为index.php,这样你就可以将php代码插入到这个文件中,然后你需要写这样的东西:
<?php
session_start();
$_SESSION['name'] = "value";
?>
这样设置会话,现在每次需要调用会话时都使用此代码:
<?php
session_start();
$var = $_SESSION['name'];
?>
现在使用
echo "$var";
你想打印var的地方
不要忘记session_start();
,否则您将无法致电或设置会话
如果您想使用cookie或将var注入url,请随时询问,我将向您解释如何;)
您在sendmail.php中的代码有点混乱,这里是固定的:
<?php
include "class.smtp.php";
include "class.phpmailer.php";
session_start();
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
$_SESSION['message'] = $message;
$Body = file_get_contents('email-template.php');
...
...
?>
然后在email-template.php中,您将使用以下代码:
<table border="1">
<tr>
<td colspan="2">
<h3>
<?php
session_start();
$message = $_SESSION['message'];
echo "Your registration is: ".$message.".";
?>
</h3>
</td>
</tr>
</table>
答案 2 :(得分:1)
为什么不尝试在 email-template.html 中添加一些邮件占位符,然后将其替换为 sendmail.php
中的真实邮件例如: 电子邮件-template.html 强>
<table border="1">
<tr>
<td colspan="2">
<h3>{{message-placeholder}}</h3>
</td>
</tr>
</table>
然后在 sendmail.php
<?php
include "class.smtp.php";
include "class.phpmailer.php";
session_start();
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
$_SESSION['message'] = $message;
$Body = file_get_contents('email-template.php');
$Body = str_replace('{{message-placeholder}}', $message, $Body);
...
...
?>
这样你就可以拥有html模板了,你可能也会有一些非常基本的模板。你也可以摆脱那些会话的东西
答案 3 :(得分:1)
对于那些仍然面临这个问题的人,我认为这就是它的全部内容。
在模板中,应指定要显示的字符串(使用特殊字符),而不是通过php打印。
<强> email_template.php 强>
<table border="1">
<tr>
<td colspan="2">
<h3>
Your Registration number is: #registration_number#
</h3>
</td>
</tr>
返回 sendmail.php ,应该打开并读取模板(使用fopen和fread),并且在邮寄之前使用str_replace替换指定的字符串
<强> sendmail.php 强>
<?php
include "class.smtp.php";
include "class.phpmailer.php";
session_start();
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
$_SESSION['message'] = $message;
$template_loc = fopen("../path/to/email_template.php");
$template_read = fread($template_loc, filesize("../path/to/email_template.php"));
$template_read = str_replace("#registration_number#", $message, $template_read);
$Body = $template_read; #or directly use $template_read as body
...
...
?>
建议: 1)电子邮件模板中的CSS应始终为内联。 2)对于发送电子邮件,第三方API提供更多功能,例如跟踪已发送的电子邮件等。
答案 4 :(得分:0)
尝试这样的事情
$name = 'John Doe';
$vars = ('NAME' => $name);
$message = file_get_contents('email_template.html');
foreach($vars as $search => $replace){
$message = str_ireplace('%' . $search . '%', $replace, $message);
}
mail('john@doe.com', 'Subject', $message, $headers);
因此email_template.html
内部会有%NAME%
,str_ireplace
会将其替换为John Doe
,您将发送变量$message
作为电子邮件html。
我认为这是最好的做法。
我认为它会对你有所帮助。