我正在使用PHP构建电子邮件模板系统。这个想法是可以使用相同的系统发送各种自动电子邮件,例如当人们加入网站等时。每封电子邮件的内容都保存在MySQL数据库中,我使用占位符来表示动态元素,如姓名,电子邮件占位符采用名称前后两个下划线的形式:__name__
,(注意,stackoverflow标记可能会转换下划线以使占位符名称在此处以粗体显示),并且单独的字段与占位符匹配它代表的变量,例如:
__name__=[($user['name'])], __email=[($user['email'])]
当我构建电子邮件时,系统会占用占位符并将它们保存在关联数组中:
$placeholders( '__name__' => $user['name'], '__email__' => $user['email'] );
这正是数组的显示方式。我使用explode来删除封闭的[(
和)]
括号。
我可以遍历电子邮件内容,并使用Parsedown
和preg_replace
将占位符与相应的变量交换,例如:
$body = 'Dear __name__, your email is __email__'
变为:
$body = 'Dear $user['name'], your email is $user['email']
但是,这正是内容在实际发送的最终电子邮件中的显示方式。这些变量的值(我之前在数组$ user中成功建立)没有出现在最终文本中,例如:
'Dear John, your email is john@smith.com'.
在发送电子邮件之前,如何让PHP用变量值替换变量?
PS我也尝试过:
'Dear ' . $user['name'] . 'Your email is ' . $user['email']
(即使用倒置的逗号和一段时间来区分变量与文本的其余部分)但无济于事。它看起来像: 亲爱的默瑟先生,
感谢您在mercermania.com上注册您的详细信息。
请立即验证您的电子邮件地址
我们现在需要验证您注册时提供的电子邮件地址确实属于您。请点击以下链接:
http://www.mercermania.com/activation/?x=' 。 $ user_info ['电子邮件']。 '&安培; Y =' 。 $ user_info ['有效']。 '
我以前做过,所以知道可以做到但是对于我的生活我不记得怎么做了!
非常感谢任何帮助。
PS我正在使用PHP Mail :: factory发送电子邮件,并且实际发送了一封电子邮件,并且已收到,因此这不是问题。