我有一个php文件,用于发送时事通讯。最近,我转到一个新的服务器,他们使用PEAR Mail而不是默认的PHP邮件发送邮件,我不得不更新我的脚本以发挥作用。但还是不起作用。我得到的是TXT版本,而不是HTML版本。
如果我在setHTMLBody()中手动输入html代码,它就能工作,但是当我用我的ob_start ob_start变量替换它时,它就不能工作了。
这是我的剧本;
ob_start();
include "URL/To/File.php";
$output_string = ob_get_contents();
ob_end_clean();
$headers['From'] = 'from@email.com';
$headers['Subject'] = 'Newsletter Subject';
require_once('Mail.php');
require_once('Mail/mime.php');
$message = new Mail_mime();
$message->setTXTBody("Your client doesn't support HTML.");
$message->setHTMLBody(''.$output_string.'');
$mail =& Mail::factory('mail');
$result = $mail->send('myemailaddress@gmail.com', $message->headers($headers), $message->get());
if (PEAR::isError($result)) {
echo("<span>" . $result->getMessage() . "</span>");
} else {
echo("<span style='color: #f7941c; font-weight: bold'>Congratulations!
Your mail has been sent successfully</span>");
}如何正确地输入下面的一行?它现在不起作用了。
$message->setHTMLBody(''.$output_string.'');发布于 2019-10-10 06:55:32
所以我现在对这个话题很冷淡(手机方面的工作),不过让我们看看我能不能帮你解决这个问题。所以我查了一下setHTMLBody函数。对于期望的参数应该是哪种类型有点模糊。在PHP中,您可以使用gettype($example)获得类型(就像console.log(typeof example);在JavaScript中一样,尽管PHP通常更宽容类型(计算具有字符串类型的数字将在PHP中工作,而不是JavaScript))。
函数的名称意味着它应该使电子邮件HTML的这一部分。现在,在我的web平台上构建的所有模块中,电子邮件是最具挑战性的,而不是因为它本身就很复杂,尽管它非常主观。例如,一些服务器可能期望您提供<html>元素,其他服务器可能期望您提供<body>元素,而其他服务器则不关心您是否省略了它(我不确定如果有任何规范在这里声明什么是“正确的”)。我并没有刻意压缩电子邮件中的数据(只是在网络邮件中输出,尽管它的技术上下文在那时丢失了)。长话短说:客户端的用户代理(浏览器、电子邮件应用程序等)应该处理压缩,而不是您。
PHP的内容有点复杂。我不喜欢使用相同的函数/方法来进行压缩,并且能够在将输出发送到客户端之前捕获并找到/替换输出。我认为您正在使用它进行压缩,尽管您也可以使用它来替换代码位,不管出于什么原因。在这种情况下,排除故障的最佳方法(假设ob应该工作,最有可能是替换代码)是使用字符串并在此环境之外测试它。当我测试cron作业时,我总是先在正常的环境中测试它们(不过请记住,cron作业运行在一个更有限的环境中,所以为了在那里进行调试,我只需要让print_r($_SERVER)通过电子邮件发送信息)。
因此,我认为您的ob代码混淆了解析器的setHTMLBody()函数。分解您的代码直到您有了工作位,然后将您必需的和越来越复杂的位添加到它中,直到您遇到了一个问题,然后因为您知道您刚刚添加了什么,那么您将能够更容易地挑出问题。
我需要进一步的澄清,不过我可以稍后编辑这个答案。让我知道你在哪里,我总是检查通知,即使需要一天。
我有几十种工具,当我开发的时候。我不确定这个工具是否会验证,虽然它可能会帮助你,因为你正在处理电子邮件。https://www.mail-tester.com/帮助我解决了一些与电子邮件相关的问题(这与这个问题无关)。
https://stackoverflow.com/questions/58309553
复制相似问题