無料スクリプトならphp.to

PHPスクリプト無料配布所 :: PHP.TO







アクセスアップ・上位表示ならSEO.CUG.NET
安くて早い!SEOに強いコーディング代行サイト AcodeZ(アコーズ)
無料スクリプトならphp.to PHPスクリプト無料配布!php.to
リンクはご自由に


0006. ファイルを添付してメールを送信する方法
<< 0005. MIME-typeを定義する方法
例えば、問い合わせフォームやダウンロードフォームなどのシステム側から、画像ファイルや圧縮ファイルなどを添付したメールを送信したいことがあります。

その際は、PEARPEARの情報へMail_MimeMail_Mimeの情報へ パッケージを使うのが常套手段です。

その他にもGoogleなどで検索すると、PHPの添付メール用クラスを自作されているサイトがいくつか引っかかりますが、いずれもかなり高度なことができるため、コードが比較的長めになっています。

メールを送るだけならもっとシンプルに作成できますので、ここでは自分で機能追加したい場合などのことを想定して、簡単なものを作成してみました。

なお、メールヘッダなど、ある程度SMTPプロトコルの知識があることを想定しています。
例えば、CCを利用したい場合などは、CC: CC-mail-address@example.com などの行を $additional-header に追加してください。


また、ここではコードを短くするため、MIME-typeの取得にfinfo_file()finfo_file()のマニュアルへ 関数を使っていますが、この代わりに自作関数などを利用することも可能です。
詳しくは、0005. MIME-typeを定義する方法0005. MIME-typeを定義する方法の情報へ をご覧ください。







<?php
    
// 複数のファイルを添付してメールで送信する例
    
    
if (!extension_loaded('fileinfo')) {        die("fileinfo 拡張モジュールがインストールされていません");    }    // 送信するメールに関するの情報
    //  ↓ 送信先メールアドレス
    
$to      "hogehoge@example.com";
    
//  ↓  送信元
    
$from    "fuga@system.example.com";
    
//  ↓  件名
    
$subject "添付メールのサンプル";
    
//  ↓  メール本文
    
$body    = <<< __EOT
    こんにちは。
    
    あなたが選んだファイルを添付しますので、ご確認ください。
    もし添付ファイルが開けない場合は、お手数ですがご連絡ください。
__EOT;
    
    
// ダウンロードさせたいファイルを配列にセット
    
$aFilenames = array('test001.txt''../test002.jpg''test003.zip');
    
    
// 文字化けする場合は明示的に文字エンコーディングを指定してください
    
$encoding mb_detect_encoding($body"SJIS,EUC-JP,JIS,UTF-8");

    
// 添付ファイルのMultiPartを作成する
    
function getAttatchFile($aFile$body) {
        
$sLine "--";
        
$sMultipartLine '_'.uniqid(btrue).'_powered_by_php.to_';
        
$sMultipartLine "-----------moemoe";
        
$sContentType "multipart/mixed; boundary=\"$sMultipartLine\"";

        
$out  "$sLine$sMultipartLine\nContent-Type: text/plain; charset=\"iso-2022-jp\"\n";
        
$out .= "Content-Transfer-Encoding: 7bit\n\n";
        
$out .= "$body\n";
        foreach(
$aFile as $filename) {
            
$fn basename($filename);
            if (
trim($fn) && file_exists($filename)) {
                
$finfo finfo_open(FILEINFO_MIME"/usr/share/file/magic");
                
$mime finfo_file($finfo$filename);
                
finfo_close($finfo);
                
//
                
$out .= "\n$sLine$sMultipartLine\n";
                
$out .= sprintf("Content-Type: %s; name=\"%s\"\n"$mime$fn);
                
$out .= sprintf("Content-Disposition: attachment; filename=\"%s\"\n"$fn);
                
$out .= "Content-Transfer-Encoding: base64\n\n";
                
$out .= chunk_split(base64_encode(file_get_contents($filename))) . "\n";
            }
        }
        
$out .= $sLine $sMultipartLine $sLine;
        return array(
$sContentType"This is a multi-part message in MIME format.
\n"
.$out);
    }


    
//
    
if ($encoding != "JIS") {
        
//echo $encoding;
        
$subject mb_convert_encoding($subject"JIS"$encoding);
        
$body mb_convert_encoding($body"JIS"$encoding);
    }
    
$subject base64_encode($subject);
    
$subject '=?ISO-2022-JP?B?' $subject '?=';
    list(
$content_type$body) = getAttatchFile($aFilenames$body);

$header = <<< __EOT
From: $from
MIME-Version: 1.0
Content-Type: $content_type
X-Mailer: php.to tips sample mailer [see http://php.to/tips/]
Content-Transfer-Encoding: 7bit
$additional_header

__EOT;

    echo 
mail($to$subject$bodyereg_replace("\r\n|\r|\n","\n"trim($header)));
?>






>> 0007. captchaの作成方法
track back URL : http://php.to/tips/6/trackback/

コメント

コメントはまだありません


よろしければコメントをどうぞ ※spam防止のため、半角英数字のみの投稿はできません
お名前(必須):
URL:
コメント(必須):

パソコンメーカーのデル
XPS 15z
Vostro 3750

- SEO.CUG.NET :: スクリプト配布チーム -