LINUX7.0でPHP4を使っているんですが、プログラムからHTMLメールを送れません。何かいい方法はありませんでしょうか?
mail()関数でも/usr/sbin/sendmailからでもいいのですが、ヘッダ部分がうまく付けることができていないようです。どなたか教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

なるほど。

Multipart だったんですね。
私はまた、mail 関数の使い方がわからないのかと、勘違いしました。
申し訳ありません。

で、回答ですが、私は IT Boost 様のスクリプトを使用させていただいております。

PHP -> メールの項にサンプルがあります。
php の mail でもできますが、車輪の再発明もどうかな?と思いましたので、使用させていただいております。

が、マルチバイト文字列関数が使用できることが前提となっているようですので、現時点のバージョンでは難しいかなと。もちろん、jstring などのモジュールをコンパイルされているのであれば、その限りではないかと思います。

また、php4.0.6 を使用していますが、特に不都合など無く、アップデートしてみてはいかがでしょうか。
# というより、あげたほうがいいと思います。
# 便利ですよ。:-)

参考URL:http://www.itboost.co.jp/
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいたサイトも見てみましたが、かなり勉強になりました。
とりあえずバージョンアップしてみることにします。
どうもありがとうございました。

お礼日時:2001/10/24 18:21

ヘッダ部分というのはどういったものでしょうか?


Return-Path? それとも Content-type でしょうか?

mail 関数でも、第三引数を指定すれば追加ヘッダを指定できるはずです。

また、php 4.0.6 以上で、適切にコンパイルされているのであれば、mb_send_mail という関数が使用できるはずです。
この関数であれば、エンコードまでしてくれると思います。

この回答への補足

i18nコンバートっていうのができなかったんで第三引数で
"From: xxxx@xxxxxxxxx\nContent-Type: multipart/alternative; boundary=\"THIS_LINE_IS_BOUNDARY\"
とContent-typeを指定した上で、本文部分では
$body = <<<EOF
--THIS_LINE_IS_BOUNDARY
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit

$honbun(HTML本文)

--THIS_LINE_IS_BOUNDARY
Content-Type: text/html; charset="iso-2022-jp"
Content-Transfer-Encoding: quoted-printable

$honbun
EOF;
と指定しました。かなり適当なつくりになっちゃいましたが、こんなんでいいんでしょうか。
本文中にはスタイルシートとテーブルとかが入ってるんですが、スタイルシートで指定したテーブルのスタイルが反映されませんでした。
なんかもっとスマートなやり方があると思うんですけど・・・。
php4.01なんでmb_send_mailってのも使えないみたいです。
php4.06に替えることを考えたほうがいいですかねぇ

補足日時:2001/10/24 10:11
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q#!/usr/local/bin/phpはどこに書くのですか?

phpでWebページを作っています。
レンタルサーバーのマニュアルに「PHPで記述したCGIスクリプトの1行目に #!/usr/bin/phpまたは #!/usr/local/bin/phpと記述して下さい。
」とありますが、hoge.phpの「<?php ~ ?>」の「<?php」の次の行に書くのでしょうか?それとも前の行に書くのでしょうか?
また、hoge.phpの中身が「<html><head></head><body> ~ <?php ~ ?> ~ </body></html>」の場合はどこに記述するのでしょうか?

初心者的な質問ですみませんが、よろしくお願いします。

Aベストアンサー

>1行目に書いたら、この「#!/usr/bin/php」という記述がブラウザに表示されてしまいました。
ということなら#!/usr/bin/phpの記述そのものが不要ということですね
phpをcgiとして動かすときに必要ということでしょうか
hoge.phpをhoge.cgiのファイル名で実行する場合その1行目に#!/usr/bin/phpが必要になります。
cgiの場合は実行権や改行コードに注意が必要となります。

Q#!/usr/local/bin/php

XAMPPで自宅サーバー勉強中です、
レンタルサーバーの時はPHPファイルの1行目に
#!/usr/local/bin/php
と記入し拡張子をabc.cgiとしていました、
自宅サーバーの場合の1行目と拡張子はどのように
書くのですか、よろしくお願いします。

Aベストアンサー

phpは、本来
#!/usr/local/bin/php
という記載は不要です。

拡張子を abc.cgi から abc.php とすれば、1行目がなくても動きます。

仮に
#!/usr/local/bin/php
を入れたままにすると、自宅サーバーでは動くが、レンタルサーバーでは
動かない、という事が起こり得ますので、やめるのが得策です。

Q/usr/local/lib/phpとはどういう意味ですか?

include_pathを設定して、どのディレクトリからも用意にphpをインクルードできるようにしたいのですが、.htaccessへの書き方やパスの書き方があまりにもわからないので質問させていただきました。

PHPの勉強を始めたのは最近で、私の知っているパスはこれだけ。
1 http://~から始まる絶対URI?パス?
2 ./ とか ../ などの相対パス。
の2つだけ。

include_pathについて、検索エンジンで調べるとほとんどのサイトで次のように書いてありまして、私にはよく分かりません。

php_value include_path ".:/usr/local/lib/php"

まず、include_pathの書き方はこのようで良いというのはわかりましたが、/ から始まっているので、httpなくていいの?..なのか.なのかどっちなのかもわからない、初めて目にしたもので……。

PHPの勉強をしていると、よく/から始まるURLをみるのですが、これについて説明しているところが見当たらず、当り前の知識のような感じなのでしょうか?

これらについて、教えてください。

include_pathを設定して、どのディレクトリからも用意にphpをインクルードできるようにしたいのですが、.htaccessへの書き方やパスの書き方があまりにもわからないので質問させていただきました。

PHPの勉強を始めたのは最近で、私の知っているパスはこれだけ。
1 http://~から始まる絶対URI?パス?
2 ./ とか ../ などの相対パス。
の2つだけ。

include_pathについて、検索エンジンで調べるとほとんどのサイトで次のように書いてありまして、私にはよく分かりません。

php_value include_path...続きを読む

Aベストアンサー

たくさん説明どころがあって悩ましいですね。(笑

まず、ご自分でもなんとなく気づいている感じですが、
URLとパスは別のものだと考えてしまった方がよいと思います。

URLはインターネット上の場所を示します。
パスというときは一般に、そのマシン内にあるファイルやディレクトリの場所を示します。

次に絶対と相対の違いについて。
絶対URLや絶対パスは、省略なしで場所を示すことをいいます。
相対URLや相対パスは、現在の自分の場所から相対的に場所を示すことをいいます。

URLならば、http://で始まっていると、省略なしの絶対URLになります。
パスの場合、/から始まっていると、省略なしの絶対パスになります。

相対についてはパスの場合だけ説明してみましょう。
まず、動かしたいPHPのスクリプトが/home/sample/test.phpにあるとしましょう。
このとき、/home/sample/hoge/以下にあるphpファイルをインクルードするためには、
以下のように記述すればよいはずです。

php_value include_path "hoge"

これがスクリプトの位置から見た相対パス指定です。

相対パスの書き方にはいくつか特殊なものがあって、
自分がいるディレクトリを示すときには「.」もしくは「./」、
自分がいるディレクトリの親ディレクトリを示すときには「..」もしくは「../」
と書くことになっています。

上記のスクリプトの例でいうと、「..」は/homeディレクトリを指すことになります。

あと、Linux系の設定では、複数のパスを同時に指定する場合に、
「:」で区切る場合が多いので、include_pathでも同様なのだと思います。

たくさん説明どころがあって悩ましいですね。(笑

まず、ご自分でもなんとなく気づいている感じですが、
URLとパスは別のものだと考えてしまった方がよいと思います。

URLはインターネット上の場所を示します。
パスというときは一般に、そのマシン内にあるファイルやディレクトリの場所を示します。

次に絶対と相対の違いについて。
絶対URLや絶対パスは、省略なしで場所を示すことをいいます。
相対URLや相対パスは、現在の自分の場所から相対的に場所を示すことをいいます。

URLならば、http:/...続きを読む

Q/usr/local/binへのパス追加

PHP、もしくはLinuxの質問をさせていただきます。

ソースからPHPをインストールした場合、
またはpearコマンドでライブラリをインストールした場合など、
php、phpize、phingなどのコマンドのエイリアスが/usr/local/binに作成されたりされなかったりしている気がしています。
複数の環境でインストールを実行しているので、環境要因かもしれません。
これらは、何らかの設定でエイリアスが作成されたりされなかったりするものなのでしょうか?

OSはCentOS5です。

Aベストアンサー

configure オプションを適切に設定しないと、デフォルトで振舞われちゃうので環境で差がでちゃうのかも。

configure --help でオプションを確認して必要なものを設定してみてはどうでしょう?

それ以外の理由は解らないのですが、出来上がった Makefile を確認してみてはどうでしょうか?

Qmb_send_mail sendmailについて

PHPが使える無料レンタルサーバーで会員管理画面を作ろうとしているものです。だいぶ完成してきて、残りは登録した人に会員登録したことをメールで自動送信することができるようになれば完成というところまできました。無料レンタルサーバーの利用についての説明の中ではsendmailは利用可となっています。私はメール送信のプログラムを作ったことがないので、しきりに本を読みながら悪戦苦闘しております。本の中のサンプルを参考に下のようなソースを書いて、テストしていますがダメでした。
$mailto="*****@***.biglobe.ne.jp";
$mailsbj="新規登録";
$mailbody="登録者ができました";
$mailheader="From:****@yahoo.co.jp\nReply-To:*****@***.biglobe.ne.jp\nX-Mailer:phpversion();"
mb_language("ja");
if(mb_send_mail($mailto,$mailsbj,$mailbody,$mailheader)){
echo "メールの送信に成功";
}
else{
echo "メール送信失敗";
}


利用している無料レンタルサーバ内のsendmailの説明の中には
sendmailのパス:/usr/lib/sendmail
と記入されています。

web上で色々調べてみましたが、どうも今一よくわかりませんでした。mb_send_mailは使えないと言うことでしょうか?
もし、sendmailを使用してメール送信をする場合にはどんなソースを書けばよいのでしょうか。
どなたかご指導宜しくお願いいたします。

PHPが使える無料レンタルサーバーで会員管理画面を作ろうとしているものです。だいぶ完成してきて、残りは登録した人に会員登録したことをメールで自動送信することができるようになれば完成というところまできました。無料レンタルサーバーの利用についての説明の中ではsendmailは利用可となっています。私はメール送信のプログラムを作ったことがないので、しきりに本を読みながら悪戦苦闘しております。本の中のサンプルを参考に下のようなソースを書いて、テストしていますがダメでした。
$mailto="*****@***...続きを読む

Aベストアンサー

>> エラー表示がでてこないのでどこでエラーになっているのか、分からない状態です。

厄介なレンタルサーバですね。
perlでsendmailができるならphpからのメールも許可されているはずですので、単純なプログラムのミスが原因だとは思いますが、エラー表示が一切出ないとすると単純なタイプミスさえ原因を追う手段が無くなるのでityounomiさんのおっしゃるとおり諦めるしかないかな。

ただ分からないのが・・
>> テストしていますがダメでした。
エラーも表示されないのにどうしてPHPではダメと判断できたのでしょう。
せめて、元の質問内のスクリプトの結果に何が表示されたのか("メールの送信に成功" or "メール送信失敗" または他の表示)くらいは開示しておくともっと頼りになる人から回答が得られたかもしれませんね。

>> 調べてみたらphpにはsendmailという関数はないのですね

PHPでのメール関数としては、mail()やmb_send_mail()だけですが、
sendmailのパスが分かっているのならシステムコマンドのsendmailをphpから以下ように直接操作する手段も有ります。
$to="*****@***.biglobe.ne.jp";
$body="hogehoge"; //ここにヘッダー込みで本文を書く
SendEmail($to,$body);
function SendEmail($to,$body){
 $mp = popen("usr/lib/sendmail ${to}", "w");
 fputs($mp, $body);
 pclose($mp);
}
他にソケットを使ってメールを送る方法も有りますが、少々敷居が高いです。興味が有ったら検索してみれば例がいっぱい見つかります。

お力になれずに済みませんでした。特殊な設定のサーバを利用しているようなのでレンタル先のサポートに聞くしかなさそうです。
では!

>> エラー表示がでてこないのでどこでエラーになっているのか、分からない状態です。

厄介なレンタルサーバですね。
perlでsendmailができるならphpからのメールも許可されているはずですので、単純なプログラムのミスが原因だとは思いますが、エラー表示が一切出ないとすると単純なタイプミスさえ原因を追う手段が無くなるのでityounomiさんのおっしゃるとおり諦めるしかないかな。

ただ分からないのが・・
>> テストしていますがダメでした。
エラーも表示されないのにどうしてPHPではダメと判断できた...続きを読む


人気Q&Aランキング

おすすめ情報