- 締切済み
PHP で form を使って mail を送る方法とそのホームページからのみの mail を受け取る方法
私のホームページの中でPHPを使ってメールフォームを作成し、ホームページの読者からのコメントを私のメールアドレスに受け取るようにしました。 自分でこのコードをテストして見た所、ちゃんと自分自身のメールアドレスにテストメールが届きます。ですが、ジャンクメール(ごみメール)も多く届くようになりました。 そこで質問です。私のホームページからのメールと他のメールを自動的に区別したいのですが、どうしたら良いのでしょうか? 今、考えているのは、 私のホームページからのメールに「特定の送り主」のメールアドレス(私のホームページからのメールだという印として)をつける、 受け取る私のメールサイト(例えば hotmail)のフィルターを使ってこの「特定の送り主」以外からのメールを自動的に削除、あるいはブロックする、 というようなものです。ですが、どのようにしたら、 『私のホームページからのメールに「特定の送り主」のメールアドレス(私のホームページからのメールだという印として)をつける』 という事が出来るのでしょうか? 私のメールフォームには読者のメールアドレスを記入する欄も設けてあり、この「読者のメールアドレス」と上記「特定の送り主」メールアドレスを区別しないといけません。 あるいは、私とは別のアイデアでジャンクメールを止める方法はありませんか? (このために1つ新しく hotmail アカウントを持っているのです。私のホームページからのメール以外は受け取りたくはないのです。) よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
コード見ました。 「sendmail」という関数はPHP標準では存在しないのですが、mail関数かmb_send_mail関数をラップしたものでしょうか。 各引数には何を渡すことになっているのかがわかりませんので、変数名でなんとなく判断します。 とりあえず、$subjectに渡しているであろうユーザが書いた件名は本文(おそらく$message変数でしょうね)にかくとして <?php $subject = '■■■お問い合わせあり■■■'; //きめうちで。 ?> このような感じで、記述してやり、本文($message)の内容を、 <?php $message = " 件名:{$subject} 本文: {$body} "; ?> とか、といったような書式にしてやると。 そうすれば、必ず件名は一定で、送られてくるメールの内容には、ユーザが書いた文字が入っているようになるでしょう。 こんな感じでいかがでしょう。
- hogehoge78
- ベストアンサー率80% (433/539)
遅くなりましたが、あけましておめでとうございます。 話がそれてしまったようで申し訳ございません。 hotmailのフィルタ機能がどの程度のものか、わかりませんが、 PHPにてhotmailに対してメールを送信するのであれば、 (1)メールのfrom情報は常に一定 (2)メールの件名も常に一定に出来る ということと思いますので、どちらか(または両方で)フィルターをかけてやればいいのではないでしょうか。 方法としては、フォームに入力されたメール送信者のメールアドレスや、件名としたものをすべてメールの本文に入れてしまって、 メールの件名を「■■■■■お問い合わせ■■■■■」などと固定値にしてやれば、 件名に関してはフィルターが容易になると思います。 メールのfrom(送信者)の情報も、固定値で質問者さんの何らかのメールアドレスが入っていることと思いますので、それでフィルターをかけることも出来ると思います。 別の回答者さんが言っていた特殊なヘッダをくっつける、という方法に関しましては、 ただいまhotmailのアカウントにログインし、フィルターの設定を見てみたところ、 フィルター設定が出来そうにないです。(方法論としては良いと思うのですが。) ただ、疑問なのが、「ジャンクメールが増えた」という点です。 メールアドレスを直接どこにも公開していないのに増えるというのは何かおかしい気がします。 後はPHPの作りとかによるのでなんともいえないのですが、メール送信機能の部分や、訪問者に記入させるフォームのHTMLとかをここで公開していただくことは出来ませんか?(誰かが作ったフリーウェアとかならそのURLとか)
- hogehoge78
- ベストアンサー率80% (433/539)
■Captcha認証について コレは仰るとおり画像認証のことです。 動的に画像を生成して、生成された画像に記述されている文字列を記入させる、って奴ですね。 私が触ったことがあるのは下記のライブラリぐらいです。 http://www.phpcaptcha.org/documentation/quickstart/ クイックスタートページのURLですが、ここの上のほうにあるDownloadからライブラリのダウンロードが出来ます。(バージョンは、1.0.3.1をダウンロードしたほうがよさそうです) ダウンロードするとパッケージ内にサンプルコードもありますのでこれで実装してみてはいかがでしょう。
お礼
回答をありがとうございます。 年末年始のため、返事が大変遅れて申し訳ありません。 「はなし」(回答)が別の方向(画像認証?)に向いているようなので元?に戻したいと思います。 「画像認証」などという高度?な事はわかりませんが、私が望むのは、 『私のホームページからのメールに「特定の送り主」のメールアドレス(私のホームページからのメールだという印として)をつける』か「WEBからのメール送信はメールのヘッダに追加情報を埋め込み、受信するメールで判別する」ことを望んでいます。メールの受信は hotmail で行いたいと思います。 どのようにしたら良いでしょうか? また新たに下記のような質問を立ち上げました。 「PHPによるWEBからのメール送信で、メールのヘッダに追加情報を埋め込み、受信するメールで判別する方法」 です。(この質問サイトや上記のサイト、どちらに回答をして頂いても私にメールが届くので、どちらに回答されてもかまいません)
- memphis
- ベストアンサー率40% (975/2395)
メールフォームのソースには貴方のメールアドレスの記載は無いのですよね? それなら、No.2さんも書いているように画像認証などをしてロボットなどから送られないようにしたほうがいいです。 また、WEBからのメール送信はメールのヘッダに追加情報を埋め込み、受信するメールで判別すればいいです。
お礼
回答番号 No.2, No.3 の方、回答を有難うございます。 >メールフォームのソースには貴方のメールアドレスの記載は無いのですよね? 私のPHPの code には私のメールアドレスが書いてありますが、browser (Firefox や Internet Explorer)の View->Page source では見る事が出来ません。(どうしてでしょう?) >画像認証などをしてロボットなどから送られないようにしたほうがいいです。 どうやったら画像認証をする事が出来るのでしょうか? >WEBからのメール送信はメールのヘッダに追加情報を埋め込み、受信するメールで判別すればいいです。 はい、この「メールのヘッダに追加情報を埋め込み、、、」のひとつの手段としてメールの送り主のメールアドレス(この場合私のメールフォームからのアドレス)を追加情報として埋め込み、このメールを受信する hotmail でこのアドレスの送り主からだけを受け取り、それ以外は迷惑メールとして自動的に削除したいのです。hotmail では(あるいは他のメーリングシステムでも?)、指定したメールアドレス以外のメールを自動的に消す、無視する事が出来ますから、特定のメールアドレスを指定したらそれ以外のメールは迷惑メールフォルダーに入りますが、すぐに消されて迷惑メールフォルダーはいつも空です。この hotmail のシステムを利用したかったのでこの質問をしたのです。 どうやったら送り主のメールアドレス以外にヘッダに追加情報を埋め込み、受信する hotmail で判別出来ますか?あるいは hotmail に代わる別の方法がありますか? また、No.2さんからの >Webサイト上のフォームでスパム対策するなら最低限Captchaくらい実装しようね。 とはどういう事をいうのでしょうか?「Captcha」とは画像認証の事でしょうか?まだまだ web の初心者で申し訳ありません。質問だらけですがよろしくお願いします。
- oraora777
- ベストアンサー率20% (56/268)
これったPHP一切関係ないよね。 質問者が使っているメーラーの問題だよね。 Webサイト上のフォームでスパム対策するなら最低限Captchaくらい実装しようね。
- yambejp
- ベストアンサー率51% (3827/7415)
(1)とにかく予測がつかないような名前でメアドをつくる。 (2)そのメアドは絶対にインターネットにさらさないようにする。 (3)フォームからメールを送付する際にセッションなどをうまくつかう などでよいかと。 受け側でフィルターするのはなにかと面倒です。
お礼
早々の回答を有難うございます。 また、質問ですが、 (2)そのメアドは絶対にインターネットにさらさないようにする。 は、PHPでは私のホームページの page source を簡単に見る事は出来ないと思いますので、私のメールアドレスを特定する事は難しいと思います。あるいは別の方法で私のメールアドレスを読者から隠す事が出来るのでしょうか? (3)フォームからメールを送付する際にセッションなどをうまくつかう。 セッションをうまく使うとはどういう事でしょうか?私はまだまだPHPの初心者です。よろしくお願いします。
お礼
たびたびの回答を有難うございます。 なるほど、 「フォームに入力されたメール送信者のメールアドレスや、件名としたものをすべてメールの本文に入れてしまって、」 メールの件名や私のメールアドレスでフィルターをかける方法がありますね。まだPHPに慣れていないので多少時間がかかるかもしれませんが、試行錯誤しながら試してみます。 >別の回答者さんが言っていた特殊なヘッダをくっつける、という方法に関しましては、 >ただいまhotmailのアカウントにログインし、フィルターの設定を見てみたところ、 >フィルター設定が出来そうにないです。(方法論としては良いと思うのですが。) そうなんですよ、特殊なヘッダをつけても hotmail フィルター設定が出来そうにないんですよ、あるいは私がそのやり方を知らないからかもしれませんが。 >ただ、疑問なのが、「ジャンクメールが増えた」という点です。 >メールアドレスを直接どこにも公開していないのに増えるというのは何かおかしい気がします。 はい、不思議ですがマシン(プログラム)が自動的に送っているのだと思います。例えば私がメインに使用しているメールアドレスを abc1@hotmail.com だとして、新たに abc2@hotmail.com や abc3@hotmail.com といったアドレスを新たに作って使用するのであれば、番号が違うだけでほぼ似たアドレスですからマシン(プログラム)も容易くアドレスを探し出してジャンクメールを送りつけるのだと思います。 ちなみにコードは、ファイルネームを send_mail.php として 、、、 elseif(!empty($message) && $errors == 0) { $reciever_email = "MyEmailAddress@hotmail.com"; if (sendmail($reciever_email, $from , $from , $reciever_email , $name, $subject , $message)) { $error = "<b>Successfully Sent.</b><br>"; unset($from); unset($name); unset($subject); unset($message); $from = ""; $name = ""; $subject = ""; $message = ""; } else { 、、、 また、HTML の中に 、、、 <form action='send_mail.php' method='post'> <table align=center> <br> 、、、 と記入しています。 繰り返しますが、度々の回答を本当にありがとうございます。感謝しています。