PHP Cron脚本 - 从CSV文件和电子邮件中读取(UTF-8?)

时间:2013-04-18 17:51:36

标签: php mysql utf-8 cron hebrew

我正在努力解决这个问题几天,阅读并尝试我遇到的任何解决方案没有找到解决方案: 这是我想要做的底线:我只有一个成员系统。当会员在留言板上发布消息时,所有其他人都会通过电子邮件收到通知。简单。 我使用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”

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

任何人......?

2 个答案:

答案 0 :(得分:0)

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

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

你能告诉我们你得到的msg错误:)这些字符是如何显示的?

答案 1 :(得分:0)

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