どうのこうの

名古屋/元フリーランス/スタートアップ勤務/ウェブ/マークアップ/プログラマ/エンジニア

Copyright表示不要のPHP製汎用メールフォームシステム「TransmitMail」


2015年11月4日 追記
TransmitMail 2 をリリースしました。


個人事業を始めてすぐに、必要にかられてメールフォームシステムを作ったのですが、自分たちで使うだけではそんなに案件数もないし、ただ眠らせておくのはもったいないと思い、GitHubで公開することにしました。

 

Copyright表示不要でMITライセンスなので、商用、非商用問わず自由に使っていただけます。

改造したり再配布していただいてもOKです。
いい改造ができたら、Pull Requestください!

お客さんのサイトに設置したり、設置代行で手数料を取ったりしてもらってもOKです。

でも、可能であれば、TransmitMail自体は無料で扱ってもらえるとうれしいです。
(個人的な考えですので、強制ではないです。)

 

TransmitMailの特徴

メールフォームシステムなんて、ましてやPHP製なんて星の数ほどあると思いますが、TransmitMailには「マークアップエンジニアに優しい」という特徴があります。

メールフォームの設置って、大抵、マークアップエンジニアの仕事ですよね?

マークアップエンジニア(僕)が作ったので、マークアップエンジニアに優しい作りになっています。

テンプレートの記法が少々難しいかもしれませんが、慣れればかなり早く設置できるじゃないかと思います。

「予算の都合でCMSは設置しないけどメールフォームは欲しい!!」なんてときにちょうどいいんじゃないかなと思います。

 

設置方法について

GitHubのWikiにマニュアルをまとめました。

ですが、メールフォームを設置したことがある方でしたら、HTMLファイルとconfディレクトリの中を見ればだいたい理解してもられると思います。

Pages – GitHub

 

いろいろなメールフォームシステムを設置してきて思ったこと

マークアップエンジニアとしていろいろなWebサイト制作に携わり、CMSだったりCMSじゃなかったりと、いろいろなメールフォームシステムを触ってきた結果、「ここが使いにくいよなぁ。」とか、
「ここがこうだったら使いやすいのに。」とか、日頃から思っていた不満やストレスの全てをぶつけて作りました。

そのせいで、多少冗長な記述が必要になる場合もありますが、汎用性を持たせるため仕方がないかなと思っています。

その時は多少時間がかかるかもしれませんが、結果的には時間短縮になると信じています。

 

マークアップはWeb制作の一番最後の行程(運用は除いて)で、大抵、設計やデザインやお客さん都合で押したスケジュールのしわ寄せがきているかと思います。

そんなマークアップエンジニアが、TransmitMailを使って少しでも早く帰れることを願って止みません。

日本のマークアップエンジニアの皆さん、一緒にがんばりましょう!!

 

また、不具合等発見されましたら、GitHubのissueやこのブログにコメントいただければ幸いです。

Issues – dounokouno/TransmitMail – GitHub

28 Comments

  1. tagawa

    2013年6月14日 at 19:30

    myt様

    TransmitMailをご利用いただきありがとうございます。

    > 今回、Modified : 2013-06-04を利用させていただいたのですが、
    > 自動返信メールで送られるメールアドレスの名前がconfig.phpのAUTO_REPLY_NAMEで設定したものにならないようです。

    上記件に関しまして、
    ご指摘いただきました通り、
    先日の Qdmail および Qdsmtp を利用するバージョン(1.4.1)から、
    config.php の AUTO_REPLY_NAME を利用する処理が抜けてしまっておりました…。
    (ちゃんと確認ができておらず、お恥ずかしいです…><)

    早速修正いたしましたので、
    最新のバージョン(1.4.2)をご利用いただければ幸いでございます。

    https://github.com/dounokouno/TransmitMail

    その他不具合等ございましたら、
    お気軽にご指摘いただければ幸いでございます。

    それでは、今後ともどうぞよろしくお願いいたします。

  2. tagawa様

    早速のご返信、誠にありがとうございます。

    修正いただいたバージョンを試してみましたら、無事件名を表示させることができました。

    メールフォームは色々試してみましたが、TransmitMailが一番分かりやすく、重宝させていただいており、
    これからもメールフォームを作成する際には、活用せていただこうと思います。

    迅速にご対応いただき、本当にありがとうございました。

  3. いつもありがたく使わせてもらっています。
    ありがとうございます。
    一つご質問ですが、添付ファイルを必須項目にするにはどうしたらよいでしょうか。

    以下のようにすると、常に「〜は必須入力です」となってしまい、常にファイルが選択されていない状態になります。

    {if:$ファイル.tmp_name}

    このファイルを削除する
    {$ファイル.name}

    {/if:$ファイル.tmp_name}

    {if:$required.ファイル}
    {$required.ファイル}
    {/if:$required.ファイル}
    {loop:$file.ファイル}
    {$file.ファイル[]}
    {/loop:$file.ファイル}

    もし何か分かる事がありましたらご指南いただければと思います。
    よろしくお願い致します。

  4. tagawa

    2013年8月3日 at 00:11

    河島様

    TransmitMailをご利用いただきありがとうございます。

    お問い合わせいただきました添付ファイルの入力必須に関しましては、
    大変申し訳ありませんが、現時点ではその機能は備わっておりません。

    今後のバージョンアップにて、
    機能追加を検討させていただきますね。

    ご自身でカスタマイズをされる場合は、
    「./index.php」の「$_FILES」変数の呼び出し辺りを参考にカスタマイズしていただければと思います。

    もしくは、JavaScript側で「input type=”file”」に入力があるかをチェックしても良いかもしれません。

    jQueryの場合ですと、「$(‘input[type=”file”]’).val()」のような形で「input type=”file”」の値を参照できるかと思います。

    ご参考になれば幸いです。

  5. ご返答ありがとうございました。
    とても参考になりました。自身で対応したいと思います。
    親切丁寧ににご対応いただきありがとうございました。

  6. はじめまして。TransmitMailによくお世話になっています。

    9か月くらいから活用させて貰っているのですが、
    今回新しいサイトを作ることになりまたGitHubから最新版をダウンロードさせて頂きました。

    ですが、最新版にすると、ページの表示まで3秒ほど掛かってしまいます。
    WebForumさんのページ速度解析ツール(http://web-tan.forum.impressrd.jp/e/2013/01/29/14562)を使ってみると、
    requestStart ~ responseStart までの間で 3,202 ミリ(全体比率94.5%)秒掛かってしまっています。
    因みにサーバーはロリポップで、PHP 5.3です。

    9か月前バージョンだと requestStart ~ responseStart の間はわずか 160 ミリ秒ですが…
    (これもロリポップのPHP 5.3です)

    9か月前のバージョンをそのまま適用すればいいのですが、そのバージョンの index.php や lib/common.php をいじりすぎて戻せなくなり、オリジナルデータも残っていません。

    早急ではありませんが、原因分析・修正をお願いしてもよろしいでしょうか。

  7. はじめまして。
    はじめて、TransmitMailを設置いたします。
    PHPなどは全くわからず、恥ずかしい質問かもしれませんが、ご返答いただければ幸いです。

    入力必須などの設定はできたのですが、確認画面へ遷移しません。
    GET値の取得も表示されていません。
    送信ボタンをクリックしても、入力画面が入力内容を残したまま表示されてしまいます。

    TransmitMailの設置は、DLした全フォルダ・ファイルをサーバーへUPし、
    パーミッションを変更するだけでは利用できないのでしょうか。
    他に何か設定が必要でしょうか。

    サーバーはCPI ACEプランを使っております。
    お忙しい所、超初歩的なご質問で大変申し訳ございませんが、ご返答お願い致します。

  8. tagawa

    2013年9月26日 at 19:25

    yuta*゚様

    TransmitMailをご利用いただきありがとうございます。

    また、TransmitMailの速度に関しましても、
    調査のご報告をいただきありがとうございます。

    一度、詳しく調査を行ってみたいと思いますので、
    よろしければお手元のTransmitMailのファイル一式をお送りいただくことは可能でしょうか?
    (後ほど、コメントいただいたメールアドレス宛にご連絡をさせていただきますね。)

    ご検討いただければ幸いでございます。

  9. tagawa

    2013年9月26日 at 23:06

    松本様

    TransmitMailをご利用いただきありがとうございます。
    (お返事が遅くなってしまい申し訳ありませんm(_ _)m)

    症状からセッション関連がうまく動作していないように見受けられますので、
    「セッションによる多重送信防止」機能を停止した状態で、
    一度、動作確認を行ってみていただければ幸いです。

    「セッションによる多重送信防止」機能の停止は、
    「conf/config.php」の45行目の「SESSION」を「false」にしていただく形になります。

    https://github.com/dounokouno/TransmitMail/blob/master/conf/config.php#L45

    また、セッション関連の詳細の設定は「conf/config.php」の176行目以降になります。

    「conf/config.php」の178行目〜180行目をコメントアウトしていただくと、
    もしかしますと、うまく動作するかもしれません。

    あわせてご確認いただければ幸いでございます。

    https://github.com/dounokouno/TransmitMail/blob/master/conf/config.php#L176

  10. はじめまして

    TransmitMailをCPIサーバに設置して、
    tagawa様が仰られた、「セッションによる多重送信防止」機能の停止をしたところ、
    メール送信はできたのですが、入力の値がメールに記載されていませんでした。(テンプレートのみ表示)

    同じ内容のTransmitMailを他サーバーで設置した場合は、正常に動いてました。
    何が原因なのでしょうか?

  11. tagawa

    2013年11月29日 at 01:01

    sofu様

    TransmitMailをご利用いただきありがとうございます。
    (お返事が遅くなってしまい申し訳ありませんm(_ _)m)

    ちょうどCPIのテスト環境を持っていましたので、
    実際にCPIのサーバー(共用サーバーシェアードプラン Z-1)にTransmitMailを設置し、
    動作検証を行いました。

    まず、入力確認画面に遷移しない件に関しましては、
    「セッションによる多重送信防止」機能を停止していただいてもよいですし、
    config.phpの下記の行(179行目と180行目)をコメントアウトすることにより、
    入力確認画面に遷移できることを確認いたしました。

    また、送信メールに入力の値が記載されない件に関しましては、
    CPIのサーバー側の設定で「mbstring.internal_encoding」が「EUC-JP」になっていることが原因のようでした。

    「mbstring.internal_encoding」を変更する必要がありますので、
    記コードを参考に「.htaccess」と「php.ini」を作成いただき、
    TransmitMailと同じディレクトリに設置ください。

    ▼.htaccess

    ▼php.ini

    私が確認した環境では、上記設定にて正しく動作することを確認いたしました。
    ご参考になれば幸いです。

  12. こんにちは。
    いつも TransmitMailを使わせて頂いております。

    これまで1年以上問題はなかったのですが
    最近メールが受信されず、config.phpのメールアドレス設定部分を変更したら
    今度はエラーになってしまったので解決策をお聞かせ願えますでしょうか。

    サーバー:ロリポップ(PHP5.2)

    エラー表示
    Warning: require_once(./lib/common.php) [function.require-once]: failed to open stream: No such file or directory in /home/users/1/xxxx.jp-xxxx/web/contact/index.php on line 15

    Fatal error: require_once() [function.require]: Failed opening required ‘./lib/common.php’ (include_path=’.:/usr/local/php5.2/php’) in /home/users/1/xxxx.jp-xxxx/web/contact/index.php on line 15

    現在、以上のようなエラー状態なのですが、復元方法はありますでしょうか。
    誠にお手数ですがご教示頂ければ幸いです。

    ※ちなみに、今まで気にしていなかったのですが
    ログ(/logs/)に一度も履歴が残りません。
    (フォルダ名は「logs」、フォルダのパーミッションは777にしています)
    こちらの原因も分かれば、教えて頂ければ幸いです。

  13. tagawa

    2013年12月14日 at 21:41

    kun様

    TransmitMailをご利用いただきありがとうございます。

    エラーメッセージを拝見しますと、「index.php」から「lib/common.php」を読み込むことができていないようです。

    お手数ですが、まずは下記点のご確認をお願いいたします。

    1. 「lib/common.php」はサーバー上に存在していますでしょうか?
    2. 「lib/common.php」のパーミッションは正しく設定されていますでしょうか?

    パーミッションの数値は、GitHubのWikiをご参照ください。

    https://github.com/dounokouno/TransmitMail/wiki/設置方法

    > ※ちなみに、今まで気にしていなかったのですが
    > ログ(/logs/)に一度も履歴が残りません。
    > (フォルダ名は「logs」、フォルダのパーミッションは777にしています)
    > こちらの原因も分かれば、教えて頂ければ幸いです。

    上記件に関しましては、普通にご利用いただいている限りは特にエラーログ等は出力されることはありません。

    今回のようなケースですと、
    「conf/config.php」の107行目の「display_errors」を「On」にしていただきますと、
    ご教示いただいたエラーメッセージがエラーログファイルとして出力されるかと存じます。

    https://github.com/dounokouno/TransmitMail/blob/master/conf/config.php#L107

    エラーログファイルが出力されない場合は、
    やはりパーミッションの設定が間違っている可能性がございますので、
    GitHubのWikiの「設置方法」をご参照いただき、パーミッションのご確認をお願いいたします。

  14. tagawa様

    ご回答ありがとうございます。

    > 「lib/common.php」はサーバー上に存在していますでしょうか?
    > 「lib/common.php」のパーミッションは正しく設定されていますでしょうか?

    パーミッションはいじっていないので
    今一度、ディレクトリ構成を確認したところ、何かの弾みで「lib」が「conf」の下層に入っておりました。
    移動させたところ表示されました。大変失礼しましたm(__)m

    尚、冒頭に書きました「最近メールが受信されず」という問題ですが、
    config.php の設定アドレスをhotmail→gmailに変えたところ、gmailの方はちゃんと受信できましたので
    hotmailの方に問題があるようです。
    迷惑メールフォルダにも入らないのは謎ですが…(もちろん受信拒否にもしていません)

    以上、ご報告でした。
    今回はお手を煩わしまして申し訳ございませんでした。

  15. はじめまして。
    はじめて、TransmitMailを設置いたします。
    1点、ご質問がございます。

    ファイル添付機能を利用予定です。
    動作は送信メール、自動返信メールともに問題無くできているのですが、自動返信メールに添付ファイルをつけないように設定することはできるのでしょうか。
    (添付ファイルが届くのを送信メールのみにしたいと考えております)

    ご多忙中、誠に恐れ入りますが、
    以上、どうぞよろしくお願いいたします。

  16. tagawa

    2014年1月30日 at 22:37

    tomio様

    TransmitMailをご利用いただきありがとうございます。

    「自動返信メールには添付ファイルを付けないようにする設定」は現時点ではありませんので、
    プログラム自体をカスタマイズしていただく形になるかと思います。

    以前、Githubのissueにて同様のご質問をいただいておりましたので、
    そのときのコメントをご紹介させていただきます。

    https://github.com/dounokouno/TransmitMail/issues/2#issuecomment-26195635

    行番号等は変わってしまっている場合がございますが、
    ほぼ同様のカスタマイズにて対応可能かと思います。

    ご参考になれば幸いです。

  17. カスタマイズの方、無事できました!
    迅速なご対応に感激しました。
    本当にありがとうございました。

  18. はじめまして、

    TransmitMailをどうもありがとうございます。テンプレート化などがしっかりと作られており、楽に設置でき、とても重宝させていただいております。ファイル添付や各種バリデーション機能を含め、とても良く練られており助かっています。

    ひとつだけ要望なのですが、機種依存文字チェックがあれば嬉しいです。

    旧漢字: 草彅(くさなぎ)とか山﨑(やまざき)など
    丸数字・ローマ数字: ①②③、ⅠⅡⅢ
    株式、有限: ㈱、㊑、㈲
    TEL: ℡、☎

    など、機種依存文字を含めたテキストを送信してしまう方が多く、そのまま送信してもテキストが「?」となってしまい困っています。機種依存文字が含まれている場合には送信できないようにして、変更を促すようにできたら素晴らしいです。

  19. tagawa

    2014年2月1日 at 23:07

    masa様

    TransmitMailをご利用いただき、またご要望をいただきありがとうございます。

    機種依存文字の判別や置換はできそうな気がしますので、
    今後の機能追加にて実装を検討しますね。

    以下、PHPで機種依存文字の判別と置換をする実装方法のメモです。

    UTF-8で変換できない機種依存文字を置換する – memo.xight.org
    http://memo.xight.org/2006-06-19-13
    →2006年06月19日の記事

    機種依存文字の判定 – @chisei のはてなブログ
    http://chisei.hatenablog.com/entry/20101007/1286447320
    →2010年10月07日の記事

    PHPで機種依存文字をチェック – (0 3 0)
    http://mgng.aws.af.cm/60
    →2011年03月08日の記事

    PHP UTF-8 機種依存文字の置換 | HAPPY*TRAP
    http://www.happytrap.jp/blogs/2009/09/11/1393/
    →2009年09月11日の記事

    [php]機種依存文字を変換して置き換える | ブログ | そうだ車輪と名づけよう 5th
    http://www.atyks.org/blog/detail/2012-10-19-1
    →UnicodeNormalizerクラスを使えば簡単に処理できそう

  20. フォームスクリプトは数あれど、TransmitMailには本当に助けられています。特に複雑で項目の多いフォームやファイル添付を伴う場合には、もうTransmitMail以外には考えられません。

    さて、ご要望を一つあげさせてください。機種依存文字にも関連するのですが、テキストボックスやテキストエリアなど、valueを伴う値を正規表現でヴァリデーションチェックできるようになればすごく嬉しいです。いくつか例をあげさせていただきます。

    例: 「エロ、バカ、アホ」を含む文字列が送信されたときにはエラーを表示

    {if:$regexp.正規表現}
    {$regexp.正規表現}
    {/if:$regexp.正規表現}

    例: クレジットカード番号の判定

    {if:$regexp.クレカ}
    {$regexp.クレカ}
    {/if:$regexp.クレカ}

    みたいな感じで、入力値の判定を正規表現で行えるようになるいると、ヴァリデーションの汎用性が非常に高くなると思います。あくまでアイデアですので実装が可能かどうか分かりませんが、もし可能であれば大変嬉しいです。

  21. すみません、送信テキストにタグが入っていたため、上手く送信できませんでした。タグの部分を全角文字にして、再度送信させていただきます。申し訳ありません。

    —- 送信した内容:

    フォームスクリプトは数あれど、TransmitMailには本当に助けられています。特に複雑で項目の多いフォームやファイル添付を伴う場合には、もうTransmitMail以外には考えられません。

    さて、ご要望を一つあげさせてください。機種依存文字にも関連するのですが、テキストボックスやテキストエリアなど、valueを伴う値を正規表現でヴァリデーションチェックできるようになればすごく嬉しいです。いくつか例をあげさせていただきます。

    例: 「エロ、バカ、アホ」を含む文字列が送信されたときにはエラーを表示

    <input type="text" name="正規表現" value="{正規表現}" class="middle" />
    <input type="hidden" name="regexp[]" value="正規表現 /(エロ|バカ|アホ)/" />
    {if:$regexp.正規表現}
    <div class="error"><em>{$regexp.正規表現}</em></div>
    {/if:$regexp.正規表現}

    例: クレジットカード番号の判定

    <input type="text" name="クレカ" value="{クレカ}" class="middle" />
    <input type="hidden" name="regexp[]" value="クレカ /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13}|(?:2131|1800|35[0-9]{3})[0-9]{11})$/" />
    {if:$regexp.クレカ}
    <div class="error"><em>{$regexp.クレカ}</em></div>
    {/if:$regexp.クレカ}

    みたいな感じで、入力値の判定を正規表現で行えるようになるいると、ヴァリデーションの汎用性が非常に高くなると思います。あくまでアイデアですので実装が可能かどうか分かりませんが、もし可能であれば大変嬉しいです。

  22. tagawa

    2014年4月24日 at 14:34

    masa 様

    ご要望をいただきありがとうございます!

    正規表現によるチェックはいつか誰かに言われるだろうなぁと思っていました(笑)

    一応、私の中ではいつか実装したい機能として考えておりますので、気長にお待ちいただければ幸いです<(_ _)>

  23. tagawa様

    TransmitMailをいつも利用させていただいております。
    ありがとうございます。

    こちらの環境の問題かバグなのかわかりませんが
    文字化けが発生いたしましたのでご報告させていただきます。

    普通に利用している分には起こらない現象ですが全角で470文字前後を連続して
    入力すると自動返信メールで文字化けいたします。改行なども一切なしです。
    改行を入れると470文字を超えても文字化けいたしません。

    サーバーはシックスコア共有サーバーとエックスサーバーX10プランです。
    入力はMac OS 10.9.3 Safari7.0.4です。

    取り急ぎご報告まで。

  24. お世話になります。

    フォームを設置したのですが、以下のメッセージが出てしまい、送信完了できません。
    こちらのエラーメッセージから何か分かりますでしょうか?

    Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 address in /var/www/vhosts/xxx/html/xxx/xxx/index.php on line 56

  25. tagawa

    2015年7月24日 at 15:34

    hiroyasu 様

    TransmitMail をご利用いただきありがとうございます。
    (貼り付けていただいたエラーメッセージのファイルパスは一部、修正をさせていただきました。)

    サーバーはレンタルサーバーでしょうか?
    サーバー会社名やプラン名などをご教示いただけましたら、詳しく調査できるかもしれません。

    ご確認をお願いいたします。

  26. はじめまして。TransmitMailを使わせていただこうと思っております。
    ありがとうございます。
    設置させていただきたく、諸々設定しているのですが、
    フォームのURLにアクセスすると、下記のエラーがでてしまい困っております。
    (PHPに詳しくなく、、初歩的な質問かもしれず申し訳ありません。)

    ——————
    Parse error: syntax error, unexpected T_FUNCTION, expecting ‘)’ in /home/users/2/lolipop.jp-4334eaf471b8a429/web/voodoo/test/contact/lib/TransmitMail.php on line 1240
    ——————

    該当の行にある
    ——————
    /**
    * $this->EXCLUSION_ITEM を正規表現形式に変換した文字列を返す
    */
    public function exclusion_item_pattern() {
    $array = json_decode($this->exclusion_item);
    $array = array_map(function($string) {
    return ‘\A’ . $string . ‘\z’;
    }, $array);

    return ‘/’ . implode(‘|’, $array) . ‘/’ . $this->config[‘reg_option’];
    }
    ——————
    をコメントアウトさせてみると、フォームは表示されたのですが、
    項目をすべて入力したあと、確認ボタンを押すと、
    確認画面へ遷移しなくなってしまいました。

    チェックモードで確認すると、パーミッションやhtmlファイル等、すべてOKになっておりました。

    サーバーはロリポップ/ライトプラン、
    PHP ver.5.5(CGI版)・ ver.5.6(CGI版)となっております。

    お忙しいところお手数おかけいたしますが、
    よろしくお願いいたします。

  27. tagawa

    2016年9月7日 at 15:19

    tomoko 様

    TransmitMail をご利用いただきありがとうございます。

    そのエラーは PHP 5.2 以前のバージョンで発生します。

    PHP のバージョンが 5.5 または 5.6 とのことですが、設置ディレクトリ以下の PHP のバージョンが 5.2 以下なのではと思われます。

    再度、設置ディレクトリ以下の PHP のバージョンをご確認いただければと思います。

  28. お世話になります。すみません、、
    お客様のサーバーでして、確認してみたところ
    PHPのバージョンがおっしゃるとおり5.2になっておりました。
    5.5にあげたところ、正常に動作いたしました。

    お手数おかけしてすみませんでした!
    ありがとうございました。

コメントを残す

Your email address will not be published.

© 2017 どうのこうの

Theme by Anders NorenUp ↑