mail()函数 - 发送HTML模板

时间:2011-10-28 20:42:13

标签: php email include

我在配置邮件功能时遇到了一些麻烦。我一直在尝试设置它,以便我可以将我的HTML模板分开保存到我的类文件中。我想做类似下面的事情。

mail('email@email.com', 'subject here', include('email/template.html'), 'from@from.com');

虽然它似乎不喜欢它,但是除了拥有一个非常长的消息字符串之外,还有它吗?

亲切的问候

3 个答案:

答案 0 :(得分:1)

尝试file_get_contents而不是includeinclude处理文件并输出到流(数据发送到客户端),而不仅仅是返回内容 - 否则您将一直echo include('...')

虽然实际上,如果你正在寻找这种“高级”能力(并且你的主持人支持它),PEAR Mail是一个更好的选择。

答案 1 :(得分:1)

include()不会返回文件的内容。它执行文件。这意味着文件中的任何PHP代码都会被执行,并且任何“裸”的html都会输出到客户端。 include()返回唯一的东西是true / false值,表示成功/失败。

这是一个糟糕的设计,但你想要这样的东西:

ob_start();
include('email/template.html');
$email_text = ob_get_clean();

mail('email@gmail.com', 'subject', $email_text, ....);

output buffering函数将捕获include的“输出”并将其返回到$ email_text var中,然后将其传递给mail()函数。

请注意,只有在希望.html页面以PHP格式执行时才需要此方法。如果它只是普通的html,你可以使用file_get_contents()代替,这样可以节省PHP解析/编译/执行序列。

答案 2 :(得分:1)

你的“include()”声明被滥用......试试这个:

$template = file_get_contents('email/template.html');
mail('email@email.com', 'subject here', $template, 'from@from.com');

不要使用include指令,除非您实际包含一个要作为页面一部分解释的文件 - 这是错误的编程习惯。上面的答案使用ob_start()include()ob_get_clean();以恶劣的方式工作;它实际上将执行包含为PHP脚本。现在,如果模板由用户填充并由您保存,则用户将能够使用此构造在您的服务器上执行任意PHP代码。坏不好。