我在配置邮件功能时遇到了一些麻烦。我一直在尝试设置它,以便我可以将我的HTML模板分开保存到我的类文件中。我想做类似下面的事情。
mail('email@email.com', 'subject here', include('email/template.html'), 'from@from.com');
虽然它似乎不喜欢它,但是除了拥有一个非常长的消息字符串之外,还有它吗?
亲切的问候
答案 0 :(得分:1)
尝试file_get_contents
而不是include
。 include
处理文件并输出到流(数据发送到客户端),而不仅仅是返回内容 - 否则您将一直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代码。坏不好。