mail.inc.php†
サマリ | メールの送信フォーム |
リビジョン | 1.19 |
対応バージョン | 1.3.6/1.4 |
投稿者 | kaw |
投稿日 | |
フォームにCc Subject 本文を記入して送信ボタンを押すと決まった宛先にメールを送ります。当然あると思って探したら意外にもないようなので自作。
利用方法としては、メールによる意見募集やアンケートなどを想定しています。
記入フォーム中のCc, Subject, 本文に関してはそれぞれ、
- 使わない
- 値固定(フォーム記入者が変更不可)
- 値可変(通常のテキストフィールド)
- から選択することができます。テキストフィールドを使用する場合は、初期値を埋め込んでおくこともできます。
このプラグインは、無制限に設置・利用ができてしまうといたずらメール発生器になりかねないので、「凍結されたページからしか利用できない」という制限をかけてあります。
#mail(src,dest,cc,subject,body)
src ... 発信メールアドレス
dest ... 宛先メールアドレス
cc ... Carbon Copy (省略可)
subject . 表題 (省略可)
body ... 本文 (省略可)
cc, subject, bodyに関しては、先頭に文字 - + = !を置くことで、
フォームの表示方法を選択できる。
-foo : 値をfooに設定。(フォーム上は非表示)
=foo : 値をfooに設定し、テキストとして表示(ユーザ変更不可)
+foo : 入力フィールド内に初期値としてfooを表示(ユーザ変更可)
@foo : +fooとおなじだが、内容を添付ファイルfooから
インクルードする(本文でのみ有効)
foo : 「=foo」と同じ
空文字列 : 「+」として解釈(空のフォームを表示)。
! : そのフィールドは使用しない。
使用例†
#mail(foo@bar.jp,bee@baz.jp,!,=Hogeについて,ここに本文を入れて)
- foo@bar.jpからbee@baz.jpへメールを送る。
- Cc:は使用しない
- 表題は、「Hogeについて」で固定。変更不可
- 本文の入力フィールドには、「ここに本文を入れて」とあらかじめ入力されている。
掲載先†
コメント†
- kaw
PukiWiki 1.3.6で作りましたが、1.4系列での動作の可否を教えていただくと助かります。
- reimy
PukiWiki 1.4で使用するためには、table関係のタグのbgcolor属性、align属性、valign属性などをスタイルシートに移すことや、inputタグなどで閉じタグを付加するなど、一部修正が必要ですね。
- kaw
ん〜、inputって、閉じタグ要るんですか〜。古くてイイカゲンな知識しかないので‥。どうもスミマセン、直しときます‥。あと、それ以外は「大きくNGでこれじゃ全然動かん!」ってとこはないってことでいいでしょうか?
- reimy
inputタグの場合は<input 〜 />のようにタグの末尾に半角空白と/を記述すれば閉じタグになります。
<input type="hidden" name="%s" value="%s">
この場合
<input type="hidden" name="%s" value="%s" />
というように。
- reimy
上記のタグの修正だけすれば、1.4でも問題なく動作しました(タグの修正しないとパースエラーが発生します)。
- kaw
スタイルシート対応を行いました。
- kaw
バグフィクス + 本文記入欄への添付ファイルからのインクルード機能を追加しました。
- case@通りすがり
http://fh.aaacafe.ne.jp/の無料サーバーでは動かなかったです。(pukiwiki1.4.2。phpはhttp://cgi.f22.aaacafe.ne.jp/~tblue/test.php )
- 補足。「メールを送信しました。送られた内容は以下の(略」のページは表示されますが、待てどメールは来ないといった動作です。
- kaw
無料のホスティグサービスだと、PHPのスクリプトからのメール送信自体を制限しているかも‥。どのように動かなかったのでしょうか?
- よっちい
私のところではMTAに対してmail pluginの引数で設定しているFrom:になっておらず、httpdのownerになってしまう現象が観測されました。
- 名無しさん
フォームからメールを送って下さった方に返信したい場合もあるかと思います。送信元アドレスも入力可能にするのはどうでしょう?
- 208行目 return('発信元が指定されていません。Mailプラグインの記述方法を確認して下さい。'); を $from ="通常表示させるアドレス";に書き換えます。 -- ねこご
- 222行目の list($t, $v) 〜 と次の行の $retstr .= $v."\n";を削ります。 -- ねこご
- # Cc:から# Subject:の間にある6行をコピーして、先ほど削ったlist($t, $v) 〜(# From:の下)にペーストします。 -- ねこご
- ペーストした1行目の ($cc, 'cc', の部分を ($from, 'from', に書き換え、5行目のCc:をメールに書き換えます。 -- ねこご
- #mail(src,dest,cc,subject,body)のsrcには何も入れないようにするといかがでしょうか。 -- ねこご
- 名無しさん
dest のデフォルトは、$notify_to が良い気がしますけどね。ページ中に、アドレスを記入したくありませんから。
- 送信先アドレス非表示にする方法はないんでしょうか? --
- 226行目 ("=$to", 'to') を ("-$to", 'to') にして、次の行を$retstr .= $v."\n"; にします。 -- ねこご
- 合わせて、92行目あたりの.'<tr><td style="text-align: right">宛先:</td><td>'から."</td></tr>\n"までの3行を削ります。 -- ねこご
- 送信元アドレスが入力可能で、送信先アドレスとCcを非表示になるように、自分用に改造したので、添付しておきます。送信後のデザインも少し変えてあります。 -- ねこご
- 早速、新しいバージョンを使わせて頂きました。どうもありがとうございました。少し気が付いた点は、受信した本文が1行ずつ間があいています。 送信後の表示画面はそのようなことがありません。 -- sam
- 本文に関するところはいじっていないのと、私の環境では再現できなかったので、すみません。分かりません。 -- ねこご
- 以前、メールソフトに送受信したメールを自動的に改行する機能がついていて、それに気がつかず、右往左往したことがありますが、そういうことではないんですよね、きっと…… -- ねこご
- mail.inc.php2は送信前のccは表示する設定のままでしたので、その点を修正して、mail.inc.php3として、添付しました。合わせて、改造した箇所の説明を追加しました。 -- ねこご
- mail.inc.php3を使わせて頂きました。どうもありがとうございます。受信の際、1行ずつ開いてしまう件はそのままでした。PHP4.2.2+qmail v1.03+AL-Mail32 v1.13です。ファイルの前後にバイナリらしき記述がありましたので削除しました。バージョンもv 1.19 2004/03/19 15:24:32のままでしたので本日の日付とv1.20にしました。細かな話ばかりですみません。 -- sam
- ねこごさん、投稿ありがとうございます。ところで、ねこごさんの方法で宛先アドレスは、ブラウザ上は非表示になりますけど、HTMLのソースを表示させると簡単にわかっちゃいますね(それでもいいのかな?)。 あと、私の個人的な感覚なのですが、私がフォームを記入するとして、「自分の書いたものが宛先アドレスを知らされることなくメール送信される」ってのは何か釈然としないので、送信先アドレスの非表示機能は、あえて追加しませんでした。 -- kaw
- ソースまでは気がつきませんでした。あちこちいじってみたんですが、ソースから消すとメールが送られてこないので、これ以上は私には無理なようです。バイナリが混じったものまで添付してしまって恥ずかしい限りです&sad; 私も誰に送信されるか分からないメールフォームはあまり好きではありませんが、もらう側としてはスパムメールを防いだりアドレスを利用されるよりはいいかなと思っています。ソースに見える時点でスパムは防げないですが・・・・&worried; -- ねこご
- スパムのささやかな対抗策として、フォームメール用に転送専用のメールアドレスを作り、メインのアドレスで受信できるようにしました。 -- sam
- 設置させて頂いてさっそくSPAM対策について考えてしまったんですが…プラグインでメールアドレスにあたる部分のみランダムにエンティティ化することで対策はできないですかね。具体的には下みたいな感じです。 -- 白鴉
hoge@hogehoge.com
↓ランダムにエンティティ化すると
hog%65%40hoge%68%6fge.com
- これ…ぱっと検索してperlでの例しか見当たらなくてすみません><; -- 白鴉
- To の部分って、踏み台を考慮すれば、任意に変更されても困るものなので、固定という認識です。なのでわざわざ変換してまで表示させる必要もないんじゃないですかね? -- upk
- 複数のメールアドレスに送信するにはどうしたらいいのでしょうか?カンマで区切ると以降の項目がずれてしまいます… -- zuragin
- 206行目辺りの list($from, $to, $cc, $subj, $body) = func_get_args();の下に$to=str_replace("/",",",$to);を入れ、スラッシュ区切りで入力しカンマに置換を行う事で解決しました。 -- zuragin
- toとccをbase64変換してみました。こちらに置きます。スパム対策にはなると思います。あとfromの日本語入力された場合も考えてbase64エンコードしました。 -- kc
- ユーザから、「投稿内容確認画面が出るとありがたいのですが」という要望が来ました。確かにたまーに間違ったのか、カラのメールが送られてくることがあります。この仕様変更は可能でしょうか? -- 少年A
- このプラグインは、ページが凍結されていない場合に使用できないようになっていますよね。そこで、ページを凍結して使用しているのですが、その状態で、一度mailプラグインのフォームを利用してメールを送り、再度このmailプラグインを設置しているページを開くと、ページは凍結されているはずなのに『このページは凍結されていないので、mailプラグインは使用できません。』と表示が出ます。またこのとき、Pukiwiki自体のナビーゲータ等にも、凍結解除ボタンではなく凍結ボタンが表示されます。しかし、この凍結ボタンを押してみると、『(ページ名)はすでに凍結されています』と表示され、もう一度該当ページを開き直すとプラグインは正常に動作しており、ページの凍結も正常に戻っております。mailプラグインを設置していないページではこのような現象は起こりませんし、mailプラグインのフォームからメールを送信しなければこのようなことは起こりません。これは、どのようなことが原因で起こるのでしょうか。質問を出す場所はここで良いのかと迷いましたが、mailプラグインを使った時にのみ起こることなのでこちらに質問させていただきました。どなたかご存知の方おられましたらお教えいただきたいです。Pukiwikiのバージョンは1.4.6、PHPは4.4.1で利用しております。 -- *nako*
- PukiWiki-1.4.6では使えていたのに、別サイトで1.4.7(EUC)に導入したら使えなくなってしまいました。こちらのやり方が悪いのでしょうか? -- rekon
- 何がどのように使えないかを詳しく。 --
- お手数をおかけします。設置したページには「Headers already sent at /home/*****/public_html/*****/mail.inc.php line 271.」とだけしか表示されません。271行目付近を見ましたが、私の力では何ともなりませんでした。 -- rekon
- お騒がせしました。己の設定ミスでした。うまく行かないときは、時間を置いて頭を冷やしてから取り組むべきでした。本当に申しわけありませんでした。 -- rekon
- 手順は下記にて、このmailを導入しました -- HIROQ
文字化けの件 (解決)†
- 1.4.3環境で実行してみたのですが、FML経由で着信したメールが文字化けしてしまうようです。理由は分からないです。。 -- iwatec
- redhat9なのでmbstringが設定されてないからでした。>文字化け 失礼しました。。 -- iwatec
- mail.inc.php3はダウンロードすると少し壊れているように見えますが私だけでしょうか?~-php4.2以下の場合、file_get_contentsが使えないのですが、1カ所なので4.2以下ならjoin('',file($fpath))などに置き換えるという設定は可能でしょうか --
- 「壊れている〜」についてはMacバイナリがついてるからのようです。Macバイナリ除去を使えば問題なくなります。 --
- Macバイナリ除去の件ありがとうございました。はずかしながら、Linuxではどうするものなのですか? -- むさし
- UTF-8のpukiwikiを使っています。ボタンの文字もすべて文字化けするのですが、どこを変更すれば直りますか? -- nanas
- mail.inc.php をUTF-8 に変換して使う --