プロが教える店舗&オフィスのセキュリティ対策術

PHPでメールの添付ファイル機能を追加しようとしているのですが、添付できるファイルの種類と容量はどのくらいまでなのでしょうか。

A 回答 (1件)

添付できるファイルの種類に制限はありません。


適切にエンコードさえすればどんなファイルでも送れます。
しかし、セキュリティ対策を施したメールサーバーは
拡張子に .exe .vbs .js などの実行可能拡張子がついている添付ファイルは
受け取らないサーバーもありますし受け取らないメールクライアントもあります。

続いて容量ですが
まずクライアントサイドから添付ファイルを、
スクリプトが置いてあるサーバー上にアップロードし
送信するのであれば下記の注意が必要です。


☆php.iniに設定されているアップロード条件を超過していないこと。

php.ini内のupload_max_filesizeはデフォルトでは2Mに設定されているはずです。
このファイルサイズ以上のものをアップロードしようとすると
アップロードが失敗するはずです。
PHP4.2.3以上では .htaccessやスクリプト内で設定を変えることができますが
4.2.3以前の場合はphp.iniの書き換えが必要です。
(php.iniの場所はphpinfo()関数を実行すると冒頭で教えてくれます。)


☆スクリプトの実行猶予時間が余裕を持った時間になっているか
同様にphp.ini内のmax_execution_timeディレクティブではデフォルトで
30秒に設定されています。
これは無限ループに陥ってしまったスクリプトを強制終了する為にあります。
たとえば、送信速度が速いクライアントなら問題ないですが
送信速度が遅いクライアントが1Mのファイルを30秒以上かけて送信すると
アップロードが失敗します。
この数値は適度な値に設定するとよいでしょう。
php.ini .htaccess スクリプト内で調整可能です。


まずこの2点に注意が必要です。

次に送信方法です。
phpの設定によってことなります。


サーバー上のsendmailを使って送るのかSMTPサーバーに接続して送るかの違いです。
それぞれsendmail上で1通あたりの容量制限を行っている場合があります。
これはシステムの管理者に聞いて下さい。

SMTPサーバーに接続して送信するのであれば
同様に容量の制限を行っている場合もあります。
これもシステム管理者に聞いて下さい。

しかし、容量が無制限だからと言っても
相手のSMTPサーバーが容量を決めている事も多いですし
メールボックスの容量によっても決まってしまいます。
添付で大容量のファイルを送りつけるという行為はネチケットにも反します。
常識の範囲内で平均1M~2M程度でしたら問題ないと思います。

これからスクリプトを組むのであれば
PearのMailライブラリで添付ファイル機能も実現できますので
ライブラリを使うことに問題がなければ使ってみて下さい。
http://pear.php.net/manual/ja/package.mail.php


ちなみに、上のphp.iniのディレクティブ設定ですが
スクリプト内で設定するならば
ini_set("設定するディレクティブ", "その値");
でOKです。
.htaccessで行うならば
<IfModule mod_php4.c> PHP5の場合は mod_php5.c
php_value ディレクティブ その値
</IfModule>
な感じでOKだったはずです。
    • good
    • 0

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