我正在尝试用PHP编写一个简单的批处理电子邮件进程,它循环遍历MySQL表中的许多订阅者,并发送一封带有我Wordpress数据库文章的HTML电子邮件。
在我的代码中,我有用于订阅者名称的电子邮件和占位符的HTML,然后是文章的正文,例如(一个非常简单的示例)
<html><body><h1>Hello ##NAME##</h1><div>##CONTENT##</div></body></html>
我先解析字符串,将## CONTENT ##替换为我的MySQL语句的输出,然后为每个订阅者替换名称,然后再发送一个简单的函数调用,例如
$headers = "From: The UK Horse Racing Tipster <$from>\r\n"
"X-Mailer: PHP/" . phpversion() ."\r\n"
"MIME-Version: 1.0\r\n"
"Content-Type: text/html; charset=utf-8\r\n"
"Content-Transfer-Encoding: 8bit\r\n\r\n";
$r = mail($to, $subject, $body, $headers);
然而,我遇到的问题包括:
- 有些人的邮件客户端正在输出HTML作为纯文本(我使用Thunderbird,它显示HTML,简单HTML和纯文本对我来说好,将HTML转换为其他模式 - 但其他人都在抱怨。
- 我引用的图像(如链接图像,例如http://mywebsite.com/logo.jpg没有显示 - 即使我点击加载远程内容按钮。我不知道为什么,代码没问题,服务器很快
- 在我从Wordpress获取的代码中,通过替换## CONTENT ##占位符将其插入到HTML模板中,我遇到了内容左侧奇数空格的问题。例如,如果我在Thunderbird中查看消息源,我从帖子中获取的内容由于某种原因是自动换行的,但是在屏幕的左侧,您可以注意到实际帖子或HTML中不存在的额外空格。我发了电子邮件。
例如,如果您注意到以下小例子,则可以看到由于左侧第一个空格而导致大量HTML标记被破坏。
<tr>
<td>
<p>Hi Rob</p><div><p>Here is today's newsletter
Rememember that our members now get to..<strong
>access all our information <table
></tr><tr><td>BLAH</td></tr></table><p><st
rong>some broken info from <a href="ww
w.mywebsite.com">mywebsite.com</a></p>
</tr>
</table>
这意味着我必须运行大量正则表达式才能删除所有这些空格!不需要和完全矫枉过正 - 再加上我永远无法处理每次出现破坏的标签,因为内容的长度会发生变化,所以我永远不知道空格会出现在标签/单词的哪个位置。
这显然可以使格式化的HTML看起来破碎,破碎的图像,带有间隙的单词和其他格式问题。
我不知道为什么会出现这些空格,但它只发生在我从数据库中获取并插入模板的文本中。
显然,如果可能,我想解决所有这些问题。
处理HTML电子邮件的最佳方法是什么,而不会进行全面的过度杀伤并编写正确的电子邮件解析器。
非常感谢任何帮助。
由于