アプリ版:「スタンプのみでお礼する」機能のリリースについて

一昨日にcronというものを知って、いろいろと弄り始めた初心者です。

cronで毎時1分にメールを送信させようと思いました。
cron1.sh というシェルスクリプト(?)で sendmail.php を実行させようとしています。

---- cron1.sh ---- (保存形式は[UTF-8] 改行コードは[LF])
#!/bin/sh

#PHP
export LANG=ja_JP.jis
/usr/local/bin/php /virtual/example/public_html/example.com/mail/sendmail.php

exit
-----------------

---- sendmail.php ---- (保存形式は[UTF-8] 改行コードは[CR+LF])
<?
$strMailFrom = "example@example.com";
// $header = "Content-Type: text/plain;charset=iso-2022-jp\r\n";
$header = "From: ".$strMailFrom;
mb_language("Japanese");
$address = 'example2@example.com';
$subject = '件名です';
$message = "本文です";
if(mb_send_mail($address, $subject, $message, $header)){
print("メール送信完了");
}else{
print("送信に失敗");
}
?>
---------------------

ちなみに起動させることまでは上手く行ったのですが、cronを経由して送信させたメールは文字化けが起こってしまいます。
また、実行結果メールも文字化けになっています。
(メーラーは Outlook です。)

ちなみに、sendmail.php から直接のメール送信では文字化けは起こりませんでした。

いくつか自力で調べてみたところ、環境変数に問題があるのかと思ったので、export LANG=ja_JP.jis の部分を、LANG=ja_JP.eucJP、LANG=ja_JP.sjis に変えてみたりしたのですが結果は変わらず。
ファイルの保存形式自体がダメなのか、もしくは何か根本的な部分がダメなのかわかりません。レンタルサーバーのため一時間に一度しかcronで起動させることができないので、なかなか問題解決に至りません。

よろしければ良いアドバイスをください。お願します。

PHPも先月学んだばかりで、最近になってはじめて文字コードや文字化けというものを意識するようになったばかりの初心者です。何か不足している情報などありましたら、補足させていただきます。

A 回答 (2件)

文字化けの原因はわかりませんが、cron で指定するコマンドを


cron1.sh から sendmail.php にしてみても文字化けしますか?

// crontab
1****root/virtual/example/public_html/example.com/mail/sendmail.php

sendmail.php の先頭に
#!/usr/local/bin/php

を付けて、実行可能なパーミッションにしておくとか。
試してないので、ダメだっらすみません。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
教えていただいた通りいくつか試してみましたが、レンタルサーバーなので一時間毎にひとつのパターンでしかテストできないので、かなり遅れてしまいましたが、結果ダメでした。

> cron で指定するコマンドを cron1.sh から sendmail.php にしてみても文字化けしますか?

文字化けよりも機能しなくなってしまいました……。

> sendmail.php の先頭に #!/usr/local/bin/php を付けて、実行可能なパーミッションにしておくとか。

sendomail.php の先頭に #!/usr/local/bin/php を付けてみましたが特に変化は見られませんでした。

申し訳ありません……。せっかくアドバイスいただいたのに問題解決に至りませんでした。何が問題なんでしょうか……。

お礼日時:2009/03/17 21:14

メールの送り方が駄目です。


MIMEエンコードしてから送らないと。
    • good
    • 0
この回答へのお礼

MIMEエンコードが分かりません。とりあえず自分で調べて以下のページを参考に mb_encode_mimeheader() を追加してみましたが、届いたメールの件名は(sendmail.php 直接の起動と cron1.sh からの起動の結果はどちらも同じで)「=?ISO-2022-JP?B?GyRCN29MPiRHJDkbKEI=?=」となってしまいました……。
http://q.hatena.ne.jp/1121403293

MINEエンコードの正しいやり方を教えていただけないでしょうか……?

<?
$strMailFrom = "example@example.com";
$header = "Content-Type: text/plain;charset=iso-2022-jp\r\n";
$header .= "From: ".$strMailFrom;
mb_language("Japanese");
$address = 'example2@example.com';
$subject = '件名です';

$subject = mb_encode_mimeheader($subject);

$message = "本文です";
if(mb_send_mail($address, $subject, $message, $header)){
print("メール送信完了");
}else{
print("送信に失敗");
}
?>

cron1.sh の内容は変更していません。

お礼日時:2009/03/18 11:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!