コメント用に残してあります。
設置解説は新しいドキュメントをご覧ください。
現在サポートはしておりません。
重篤な問題に関しては直せる保障がありませんので、
他のスクリプトをご検討頂いた方が解決が早いかもしれません。
コメントする前にお読み下さい
「エラーが出ました。どうしたらいいですか?」という知恵袋風の質問はやめてください 🙁
不具合と思われる動作については、サーバーのエラーログをメールで送っていただければ、解決が早くなる可能性が高まります。
手に入らない場合は以下について出来るだけ具体的に明記してください。
- 設置して問題が発生したサーバーの仕様(php.ini、レンタルサーバー名等)
- 受信に使用したメールクライアント
- エラーが発生するまでの手順
- 表示されたエラー(番号・内容)や状態
お疲れ様です
Tenderfeelさん
ありがとうございました!
なんとかZeroMailとjQueryで動作できました!
この先もまた勉強してZeroMailでかくなっていったら楽しいです~
また疑問がでたら伺いますです!
あまりに連打で恐縮です。
ゆうたです。
jQueryがうまくいったため、調子にのってPHPの挙動も含めて
いろいろいじっていますが…
ふと、連続投稿時間の制限なんてできないかと模索を始めました。
一日に1回の投稿のみ~という設定を目指してみています。
おそらくtime()関数かlocaltime()関数の活用だな!と思い思考錯誤している段階です。
ZeroMail(Ajax)に加えて使うとすればどのような入れ込み方が好ましいのでしょうか。ZeroMailのPHP翻訳にかかっていて相当時間かかりそうです…
お手をお借りしたいです先生~><
ゆうた さん >
投稿の制限を掛けるには「前回投稿した日時」の記憶が必須になります。
内容確認か送信時に保存されている日時との比較をして、期限内であればfalseという手続きをすれば制限できます。
記憶する方法はJavaScriptとPHPそれぞれにあります
[PHP]
・file
・database
・cookie
[JavaScript]
・cookie
・LocalStorage (HTML5 API)
一番お手軽なのはCookieですが、これはユーザーが手動でリセットをすることが出来るので
厳密に行いたいのであればPHPのFileかDBを使います。
まずはCookieでの制限を試してみては如何でしょうか。
ゆうたです!
お勧めして頂いたcookieでやってみました、これでもいいかもしれませんです。
プログラムでやるというよりは、受信した側でのフィルタリングやスパム対策なりで
閲覧するメールを取捨したほうがいいかもしれないなとも思ったりしてます!
そこで、送信ボタンをJavaScriptにしようとしているのですが、
functionで指定して、document~submit()をしても送信自体できず
なにかがぶつかっているのかなとおもったり。
仕様としてZeromailはJavaScriptをオフにすると送信できないようにする事はできませんでしょうか~?
ゆうた さん >
多分このデモと同じ事をやっていると思うんですけども
http://www.javascript-coder.com/javascript-form/javascript-form-submit-example.html
Ajaxで何かしら送受信する場合はXMLHttpRequestを利用するので、submit()は使いません。
http://ja.wikipedia.org/wiki/XMLHttpRequest
XHRは“すでに読み込んだページからさらにHTTPリクエストを発することができ、ページ遷移することなしにデータを送受信できるAjaxの基幹技術である。” なので、
実際に送信する値の形式はsubmit()するのと変わらず、key=value&key2=value2 というものになります。
XMLHttpRequestはブラウザ間の差異が激しいため自前での実装は大変骨が折れますが
先人が開発したライブラリがあったりjQueryやMooToolsなどのJS Frameworkに組み込まれてたりするので、今は割と簡単に利用することができます。
私が配布しているzeromail-ajax.jsでは、MooToolsのForm.Request.AppendにForm.Validatorを組み合わせて使っています
http://mootools.net/docs/more/Forms/Form.Request.Append
>仕様としてZeromailはJavaScriptをオフにすると送信できないようにする事はできませんでしょうか~?
フォームはformタグにaction属性を付けなければ送信が出来ません。
JavaScriptでactionを付与すればJavaScriptオフ環境での送信が不可能となります。
以前お世話になりました、shunshuuです。お久しぶりです。あの時は色々ありがとうございました。
遅まきながら新しいzeromail、使わせていただきました。
まだ添付機能の部分は使っていないのですが、管理画面機能を使ってみたところ、幾つか気になる部分がありました。
zeromail.css のZeroMail ADMIN CSS 内の#admin h2 内にて zoom:1 で最後の;が抜けている
admin内の index.php の293行目にてが抜けている
です。
引き続き、添付ファイルの機能も使ってみたいと思います^^
すいません、ソースが非表示になってました
admin内の index.php の293行目にてが抜けている
は、
<tr>
です。
連投で申し訳ございません。
管理画面なのですが、投稿した内容は問題なく表示・ダウンロードも可能なのですが、
ログ一覧画面の「ログを全て削除」、ダウンロード画面の「ログを全て削除」にcheckを入れてダウンロードしても、
ログが削除されません。
ログ一覧画面の「ログを全て削除」を実行すると「エラーが発生しました」と表示されてしまいます。
以前のように実行画面内を見ないと分からないかもしれませんが、考えうる原因などありますでしょうか。
なお、log.phpのパーミッションは606にしています。
shunshuu さん >
CSSとHTMLについてご指摘ありがとうございます。次バージョンで反映したいと思います。
ログ削除に関してですが、ファイルそのものをunlink関数で削除してまた作成するという手法で行っています。
なのでunlinkでエラーになっているということになります。
失敗原因はディレクトリパーミッション、セーフモード、ファイル名に起因することが多いです。
保存が出来ているということはファイル名についてはOKなので、ディレクトリかセーフモードかになりますね。
Tenderfeel様
ご返答ありがとうございました。
以前のやり取りでセーフモードにはなってないと思ったので、
ディレクトリのパーミッションを変更しましたらできました!
ありがとうございました^^
お世話になっております。
ver1.4.5を使用しているのですが、添付ファイルについて、xls、docについては問題ないのですが、
zip、jpg、pdfが一部欠損していしまいます。
なにかお心当たりないでしょうか。
よろしくお願いします。
富井さん >
多分設定の影響だと思います。
1. init.phpの「ファイルの最大サイズ」を変更してみてください
2. サーバーのmemory_limit、post_max_sizeを確認してみてください
Tenderfeel様
ご回答ありがとうございます。
>1. init.phpの「ファイルの最大サイズ」を変更してみてください
2000KBにしています。
>2. サーバーのmemory_limit、post_max_sizeを確認してみてください
どちらもデフォルト値の8MBになっているようです。
ちなみに、大きいファイルが欠損するわけではなく、どんな大きさでもzip、jpg、pdfがおかしくなります。
jpgのみですが検証しなおしてみたところ、小さいファイルですと、たとえば48.76kbのファイルが91.602kbで届いたりと
大きくなるパターンもあるようです。また、47kb程度までのファイルは破損しませんでした。
他に見直すところなどありますでしょうか。
よろしくお願いします。
富井さん >
ん~ 私がテストしている環境だと問題なく、また同様の報告を受けたこともないので
何かしらお使いの環境からの影響を受けているのではないかと思うのですが何かはわかりません。
メール添付に関してはオーソドックスにbase64変換しているだけなので、スクリプト内部で特別なことは特にしてないです。
スクリプトのバグではないという前提でサーバーに問題がないとすれば
次に疑うべきはソフトになりますね。セキュリティソフトとかメールソフトとか…
Tenderfeel様 >
ありがとうございます。
私の環境でも他の環境でも発生しておりますのでやはりサーバーでしょうか…
winサーバーでなにか特別な設定が必要だったりするんでしょうか?
富井さん >
基本レンタルサーバー環境(LAMP)向けに作ってますのでwindowsサーバーは想定外です…すみません。
windowsサーバーということなら、zeromail.php 532行目付近にあるfopen関数の最後の引数にbを加えれば直るかもしれません。
$fp = @fopen(ZEROMAIL_DIR.UPLOADPASS.$tmp[“filename”], “r”);
↓
$fp = @fopen(ZEROMAIL_DIR.UPLOADPASS.$tmp[“filename”], “br”);
Tenderfeel様 >
ありがとうございます。
bをつけると添付ファイルが0kbになってしまいました。
富井さん >
“rb” でした! X-(
Tenderfeel様 >
ありがとうございます。
rbにしましたが0kbにはならないものの、破損状況は変わらず…
freadのlengthを100000にしてみましたが100000まで読み込む場合もあれば96927や他の値で終わっている場合もありと
安定しません。
Tenderfeel様 >
とりあえずは管理画面で対応するということになりました。
ややこしくて申し訳ありませんでした。
ありがとうございました。
富井さん >
サーバーの構成が気になります。
アップロードディレクトリに保存されているファイルは破損していないんでしょうか?
(送信確認画面のファイル確認で正常表示されるか否か、もしくは、FTPで確認)
それがダメになっていると管理画面でも破損したファイルが使われてしまいます。
Tenderfeel様 >
アップロードの時点では破損していないようで、プールするようにして確認すると
正常なファイルが見えるのです。
また、xls、docといったリッチテキスト系ドキュメントは正常に送信されるのが引っ掛かるところですが…
管理画面を設置しましたところ、正常に見えており、担当の方にご確認いただいているところです。
富井さん >
ということはメールに添付する処理で何かしら影響を受けてるということになりますね。
メールソフトやセキュリティソフトの影響もなさそうですか?
再現が出来ず有力な情報もないので、元画像と画像が添付されたメール(破損しているもの)を頂ければ何か分かるかもしれません。
差し支えなければ 私のHN+@gmail.com までよろしくお願いします。
Tenderfeel様 >
メールソフト、セキュリティソフトともに別環境で受信しても同じですので影響ないと思われます。
メール飛ばしましたのでご確認いただけますでしょうか。
よろしくお願いします。
富井さん >
メールありがとうございました。調べてみます。
Tenderfeel様 >
ご無沙汰しております。
あれから模索しまして、解決いたしました。
ファイル読み込みよりエンコード時が怪しいのか?と思いPHPを5にしてもらっても
変わらず…
あきらめかけていたところ、chunk_splitに行きつきました。
536行目あたりのエンコードの挙動を
$encoded = chunk_split(base64_encode($contents));
としたところすっきり解決しました。
あくまでもwinIIS6なのでLinapacheに合うかどうかはわかりませんが、ご報告までに。
ありがとうございました。
富井さん >
こちらでも原因が特定出来ずにいたのですが、解決したようで良かったです。
chunk_splitで解決したというのは使用することでRFC 2045規約に沿わせるからなんでしょうね…。
この関数については全く盲点だったので次のバージョンアップでfixしてみようと思います。ご報告ありがとうございました 😀
Tenderfeelさま
明けましておめでとうございます。
ようやく理想のメールフォームを見つけて、とても嬉しく思っています。
動作確認のため、送信先メールアドレスのみ変更して、ファイルを
サーバ(さくらのスタンダードプラン)にアップしたのですが、
「500 Internal Server Error」が出てしまいます。
一通りファイルは見てみたつもりなのですが、どこを変更すれば
良いかよく分かりませんでしたので、教えていただけますでしょうか。
どうぞよろしくお願いいたします。
nor さん >
推理するには些か情報が足りませんので
1. どのタイミングでエラーが表示されますか?
2. パーミッションは変更してありますか?
3. 解凍したままの状態でアップロードした場合にもエラーがでますか?
以上お答えください。よろしくお願いします。
Tenderfeelさま
お返事ありがとうございます。
1. どのタイミングでエラーが表示されますか?
確認画面の後までは問題なく動作しますが、
「この内容で送信」ボタンを押すと
「500 Internal Server Error」が出ます。
2. パーミッションは変更してありますか?
変更しています。フォルダ、phpファイル共に
705、755、777を試しましたが、動作しませんでした。
3. 解凍したままの状態でアップロードした場合にもエラーがでますか?
テストが成功しているか判断できないので、init.phpの
「フォームデータを受け取るメールアドレス」のみ変更しています。
その他は解凍したままのものです。試しにinit.phpを元に戻して
(メールアドレスを「info@example.com」に戻して)送信してみた
ところ、成功の画面が表示されました。
これはどのように考えたらよろしいのでしょうか。
なお、文字コードは変更していません。
どうぞよろしくお願い致します。
nor さん >
・確認画面までは動作する
・デフォルトだと送信完了まで動作する
本送信時に何らかのエラーが出ている事は確かですね。
で、スクリプトに問題がないという前提で該当するのは、これか
http://blog.longkey1.net/archives/812
これですが
http://oshiete.goo.ne.jp/qa/1879979.html
前者に該当していない場合は
・php.iniの設定でsendmailへのpathが設定されていない
が怪しいかなと思います。
当てはまるものはないでしょうか?
Tenderfeelさま
素早いお返事ありがとうございました。
なるほど!確かに独自ドメインでGoogle Appsを利用しています。
Wordpressではなく生のhtmlなのですが、もし簡単な解決策を
ご存じでしたら教えていただけると大変助かります。
「外部のSMTPで送信」、の辺りは私には難し過ぎまして。
たくさんのフォームを試してきて、ここまで理想に近いフォームはない!
と思っていたので、ここで諦めてしまうのは非常に残念で。
お知恵を拝借したく。
どうぞよろしくお願い致します。
nor さん >
GoogleAppsでしたか…。そうなると解決は大分ややこしくなります。
前に挙げた記事で紹介されているWordpressのCimy Swift SMTPは外部のSMTPで送信するプラグインですが
同じようなライブラリを使えばメール送信出来るようになると思います。
ライブラリを使う場合には少なからずzeromail.phpの修正を伴うので、カスタマイズ方法を解説した記事を書くか
直接私が修正するかという対応になりますが、どちらにしても数日時間がかかるのは間違いないです。
別のサーバーに設置するというのが出来ればそれが一番手っ取り早いんじゃないかなと思います。
Tenderfeelさま
お返事ありがとうございます。
既に稼働しているサイトなので、他のサーバを利用するのは難しいのです。
もし可能であれば、お待ちしておりますので、カスタマイズ方法を教えて
頂けると大変助かります。
お忙しいところ、また年始早々申し訳ございませんが、
どうぞよろしくお願い致します。
nor さん >
ドキュメントのHelpに追加するつもりです。…が、何時になるかはまだ分からないので気長にお待ちください。
Tenderfeelさま
ありがとうございます!!!感謝、感謝です!
ゆるりとお待ちしてますので、よろしくお願いします。
nor さん >
ドキュメントを書くにはカスタマイズ箇所の多い内容でしたので
コメントを書かれた時のメールアドレスにZIP付きメールを送信しました。お暇なときにご確認ください。
Tenderfeelさま
メールフォームすばらしく使用させていただきたいのですが、
メールアドレスの入力に際して、メールアドレスと確認用のメールアドレスを入れるフォーム場合
どうすればよいでしょう。
ご教授頂ければ幸いでございます。
rad さん >
ドキュメントの「入力内容のマッチング」をご覧ください
http://zeromail.webtecnote.com/template.php#matching
上記説明にあるサンプルソースは
メールアドレス入力用テキストエリアのnameがemailで、確認用テキストエリアのnameがemail2である、というものになっています。
解凍したフォルダに入っているcontact.htmlに、以下2つのフィールドを追加すれば確認できると思います。
<input type="hidden" name="match" value="email+email2 />
<input type="text" name="email2" />
Tenderfeel さま
はじめまして。自分のサイトで快適に使わせてもらっています。ありがとうございます。
Win系のサーバーは想定していないとのことなので不躾な質問になってしまうかと思うのですが、
今回友人のページに設置を頼まれまして、そこがWin系のサーバーで設定に詰まってしまいました。。
レンタルサーバーは
http://home.isle.ne.jp/service/infinito_plus/plan/inp-01.html
で
送信完了画面にはなるのですがバックで送信ができていないようでどこを書き換えていいものやら悩んでいます。。
色々調べて
ini_set( “SMTP”, “hoge.in-plus.jp” );
ini_set( “sendmail_from”, “hoge@hoge.com” );
とか
define(‘SMTP_SERVER’,’hoge.in-plus.jp’);
define(‘SMTP_PORT’,’25’);
とか加えてやれば動作するかと思ったのですがこれだけだと動作しませんでした。
素人質問で申し訳ないのですがWin系のサーバーで動作するようにできるヒントとかありましたら
ご教授いただけましたら幸いです。。
miyuki さん>
表向きは何事も無くても何かしらエラーが出ていることがありますので
サーバーのエラーログが拾えるのであればそちらを確認してみてください。
以下FAQからの引用を元に回答させて頂きます。
FAQページにあるsendmailに関する記事
http://winfaq.isle.jp/FaqItem?i_faqId=202&i_categoryId=0
を見るところによると設定は方法はini_setでいいようです。
“CGIプログラム中のメール送信サーバー名を指定する部分で下記をご指定いただき、再度お試しください。
smtp01.win-sv.com もしくは 送信サーバー名のIPアドレス(pingや、nslookupでご確認ください。)
その他、”localhost:25″ 『localhost:ポート番号』の形式でもお試しください。 ”
最後に上記のように書いてありました。こちらは試されましたか?
また、この記事によるとsendmane.exeが利用可能とされています。
http://winfaq.isle.jp/FaqItem?i_faqId=275&i_categoryId=532
記事内にあるソースはPerlの例だと思います。
PHPの場合sendmailのパスはphp.iniでしか変更できないので設定は下記のようになります。
sendmail_path = C:\sendm\sendmane.exe -t -i
(参考:http://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html)
Tenderfeel さま
ご回答ありがとうございます。
>“CGIプログラム中のメール送信サーバー名を指定する部分で下記をご指定いただき、再度お試しください。
>smtp01.win-sv.com もしくは 送信サーバー名のIPアドレス(pingや、nslookupでご確認ください。)
>その他、”localhost:25″ 『localhost:ポート番号』の形式でもお試しください。 ”
>最後に上記のように書いてありました。こちらは試されましたか?
これのPHPでの記述方を検索して調べたのですが
define(’SMTP_PORT’,’25′);
以外でどんなコードを記述すればいいのか分からなくて詰まってしまいました。。
http://winfaq.isle.jp/FaqItem?i_faqId=275&i_categoryId=532
こちらの記事は見逃していました。。
パスの設定は教えていただいた情報を元にinit.phpの一番上に
$sendmail=’c:\sendm\sendmane.exe -t -i’;
のように書いてみました。
教えていただいた情報を元に色々と試してみましたが今のところ上手くいきません…。
サーバーのログも見る方法があればいいのですが分からず…。
こちら
http://www.synck.com/contents/faq/126945094667773807126681733381.html
で同じサーバーの事例でパスを指定したら解決したというのは見つけたのですがうーむ。。
すごくデザインの拡張性とか使いやすさがお気に入りで使わせていただいていて今回もできればZeroMail使いたい
とこなのでもう少し色々調べてがんばってみます。
ご回答いただきましてありがとうございました。
miyuki さん >
>パスの設定は教えていただいた情報を元にinit.phpの一番上に
>$sendmail=’c:\sendm\sendmane.exe -t -i’;
>のように書いてみました。
前の回答で書いた通りsendmailのパスは php.ini でしか変更できないので、init.phpに書いても意味がないです。ので消してください。
php.iniはサーバーで動くPHPの設定を根本から変更するもので、zeromailの設定ファイルのことではありません。
サーバーログはコントロールパネルからダウンロード出来る会社が多いですが、代理設置であれば依頼主に確認してもらうしか知る術はないと思います。
defineは任意の定数を定義する関数でありPHPの設定を行うものではないです。
スクリプト側で設定変更を行う時は ini_set を使いますが、設定変更出来るものと出来ないものがあり
sendmail_pathは設定できないものに該当します。 (参考:http://www.php.net/manual/ja/ini.list.php)
ポートはini_setで変更が可能なので ini_set(‘smtp_port’, 25); で出来ると思います。
<まとめ>
sendmail_path → ○php.ini ×ini_set
sendmail_from → ○php.ini ○ini_set
SMTP → ○php.ini ○ini_set
smtp_port → ○php.ini ○ini_set
アイルでは.htaccess での設定変更はできないようです
http://winfaq.isle.jp/FaqItem?i_faqId=390&i_categoryId=628
はじめまして!色々メールフォームを探していてzeromailにようやく辿り着きました。本当にいい機能があって助かりました。
一つ質問なのです。
ふりがなを必須項目にする場合、name=”name2_jpa_req”と記述しました。
チェックはしてくれるのですが、値が空の場合、確認画面で何も表示されなくて困っています。
英数字だけの入力の際は、確認画面で赤字でエラーが表示され、正常に表示されています。
どうやったら値が空の場合でも確認画面でエラー文字が表示されるのでしょうか?
Tenderfeel 様
>ドキュメントの「入力内容のマッチング」をご覧ください
>http://zeromail.webtecnote.com/template.php#matching
>上記説明にあるサンプルソースは
>メールアドレス入力用テキストエリアのnameがemailで、確認用テキストエリアのnameがemail2である、というものになっています。
>解凍したフォルダに入っているcontact.htmlに、以下2つのフィールドを追加すれば確認できると思います。
>
>
ご丁寧なご回答ありがとうございました。
無事動作いたしました。
koba さん >
_reqの処理でバグがありました。お手数かけて申し訳ありません。
次のバージョンアップにて対応いたしますが、応急処置として
zeromail.phpの131行目にある $error++; の後に continue; を挿入すれば必須が動作するようになります。
Tenderfeel様
>_reqの処理でバグがありました。お手数かけて申し訳ありません。
>次のバージョンアップにて対応いたしますが、応急処置として
>zeromail.phpの131行目にある $error++; の後に continue; を挿入すれば必須が動作するようになります。
お返事が遅くなり、申し訳ありませんでした。
無事、動作いたしました。
本当にありがとうございました!これからも宜しくお願いします。
Tenderfeel様
はじめまして。zeromailを使用させていただいております。
すばらしいフォームをありがとうございます!
質問なのですが、
入力確認画面で未入力の項目を非表示にする方法はありますでしょうか。
入力のあった項目のみを表示&確認メール送信させたいのです。
ご教授いただければ幸いです。
何卒よろしくお願い致します。
mitsu さん >
現バージョンでは残念ながらそういう機能はありません。
カスタマイズすれば出来なくもないですが、変更部分が多岐にわたるのでコメントでは説明しきれないです…。
使用例をお寄せ頂ければ何らかの対応が出来るかもしれません。
Tenderfeel様
お忙しい中、
さっそくのお返事をありがとうございます!
お言葉に甘えて追記させていただきます。
使用例と致しましては、カート機能を使わないオーダーフォームとして使用しています。
約70個の商品名に、個数を入力する項目があり、
そこへ注文する項目にだけ個数を入力して送信というフローなので、
毎回大量の空項目が出来てしまい、大変な長さになってしまうのです。。
なにか良い手だてがあればご教授ください。
何卒よろしくお願い致します。