0

私は数日間この問題に苦しんでおり、解決策が見つからないことに出くわしたものを読んで試しています: これが私がやりたいことの結論です: 私はメンバー限定システムを持っています. メンバーがメッセージ ボードにメッセージを投稿すると、他のメンバー全員にメールで通知が届きます。単純。PHP スクリプトを使用して受信者 (電子メールと名前) のリストを CSV ファイルに作成し、ファイルを保存して後で cron ジョブで開き、電子メールを送信します。単純。ああ...名前は、MySQL DBに保存されているため、ヘブライ語のスクリプトです。スクリプトを手動で試してみました (ブラウザから実行したところ、うまくいきました)。ただし、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 は、DB から取得した名前と電子メールをそのまま使用して作成されています。これがエンコーディングと関係があることは確かですが、正確に何を指し示すことができないようです。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

注目に値するもう 1 つのことは、「Content-type:text/html」というテキストだけで、cron ジョブからの電子メールにエラーが表示されることです。

ちなみに、メールは受信者に問題なく届き、メールの本文はヘブライ語で表示されます。欠けているのは件名と名前だけです。

誰 ...?

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をサポートしていません。したがって、ヘブライ語を読み取ることはありません。ステップ 1 は、fputcsvfgetcsvを使用する代わりに、 fwriteでファイルを書き込み、 freadで読み取る必要があったことです。ステップ 2 は、単純な mail() 関数の代わりに mb_send_mail() 関数を使用し、それを呼び出す前に mb_language('he') および mb_internal_encoding('UTF-8') を設定することでした。今ではすべてうまく機能しています。Cron は完全にメールを送信します。

于 2013-04-20T13:25:07.857 に答える