0

我在这个问题上苦苦挣扎了几天,阅读并尝试了我遇到的任何问题,但没有找到解决方案:这是我想做的底线:我有一个仅限会员的系统。当成员在留言板上发布消息时,所有其他人都会通过电子邮件收到通知。简单的。我使用 PHP 脚本在 CSV 文件中创建收件人列表(电子邮件和姓名),存储该文件以供 cron 作业稍后打开并将电子邮件发送出去。简单的。哦...名称是希伯来语脚本,因为它们存储在 MySQL 数据库中。我已经手动尝试了脚本(通过浏览器运行它,一切都很顺利)。但是,通过 cron 运行它不会读取名称并将其留空:

while($arrMailAttrib = fgetcsv($hFile))
{
    $sAptName   = $arrMailAttrib[0];
    $sAptNum    = $arrMailAttrib[1];
    $sTo        = $arrMailAttrib[2];
    $sSubject   = $arrMailAttrib[3];
    $sMsgURL    = $arrMailAttrib[4];
    $sBody      = "<span style=\"font-family: Arial, Helvetica, sans-serif; direction: rtl !important; vertical-align: right; display: block;\" lang=\"he\" dir=\"rtl\"> <p>שלום $sAptName (מספר חבר $sAptNum),</p> <p>הודעה חדשה בנושא '$sSubject' נוצרה בלוח המודעות הוירטואלי.</p> <p>על מנת לצפות בהודעה ישירות במערכת <a href=\"$sMsgURL\">כאן</a></p> <p>על מנת להכנס למערכת  הכנס ל: <a href=\"http://www.somesite.com\">http://www.somesite.com</a> </p> <p><font size=\"-1\" color=\"#999999\">זוהי הודעת אימייל אוטומטית. נא לא להגיב לכתובת אימייל זו.</font></p> <p>&nbsp;</p> </span>";
    if(defined('_DEBUG_')) {fputs($hLogFile, "sending email with subject '$sSubject' to $sTo\n");}
    mail($sTo, $sSubject, $sBody, $sHeaders);
}

CSV 是使用从数据库中获取的名称和电子邮件直接创建的。我很肯定这与编码有关 - 但我似乎无法确定到底是什么。这是 CSV 文件中的几行:שמואלי,

1,בהיר,someone1@gmail.com,הודעה נסיונית,http://www.somesite.com/_new.message_present.php?fldMsg=111
    כהן,2,someone2@gmail.com,הודעה נסיונית,http://vwww.somesite.com/_new.message_present.php?fldMsg=112
    שפיר,4,someone3@hotmail.com,הודעה נסיונית,http://www.somesite.com/_new.message_present.php?fldMsg=113
    ליבוביץ,5,someone4@metis.asia,הודעה נסיונית,http://www.somesite.com/_new.message_present.php?fldMsg=114

另一件值得注意的事情是,我收到来自 cron 作业的电子邮件错误,其中仅包含以下文本:“Content-type:text/html”

顺便说一句 - 电子邮件对收件人来说很好,电子邮件的正文以希伯来语显示。唯一缺少的是主题和名称。

任何人 ...?

4

2 回答 2

0

可能是编码问题试试这个:在记事本中打开你的 .csv 文件,然后选择 -> 另存为。在“另存为”框的底部,有一个标记为“编码”的选择框。选择 UTF-8。选择 UTF-8 后,选择“另存为类型”下的任何类型,然后将文件保存为与原始文件名略有不同的文件名。

您还必须将此行添加到您的 php 代码中: header("Content-Type: text/html; charset=UTF-16LE");

你能告诉我们你到底得到了什么消息错误:)字符是如何显示的?

于 2013-04-18T18:01:40.533 回答
0

好的,找到了解决方案。这适用于所有遇到类似问题的人,不一定是希伯来语,而是任何其他多字节语言: fgetcsv不支持 multibyte。因此,它永远不会阅读希伯来语。第一步是我必须用fwrite写入文件并用fread读取它,而不是使用fputcsvfgetcsv。第二步是使用 mb_send_mail() 函数而不是普通的 mail() 函数,在调用它之前,设置 mb_language('he') 和 mb_internal_encoding('UTF-8')。现在一切正常。Cron 完美地发送电子邮件。

于 2013-04-20T13:25:07.857 回答