Calender
Sun Mon Tue Wed Thu Fri Sat
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< January 2019 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< 【PHP】GDで動的に画像を作るサンプル | main | 確率変動せず?_CR水戸黄門 >>
【PHP】動的画像作成&メール添付 送信サンプル
PHP 添付メール サンプル GDで時計の画像を動的に作成し、メールに添付して配信するサンプルです。

メールアドレス:


sendmail.php.txt.....PHPソース
1404219.js ....上のJavaScript(必要はありません)

※SAKURAからのレスポンスが化けています。
※以前に作成したメール関連システムでトラブルがあり、コード調査を兼ねて作成したため、コードが整理されていません。

・MIMEメールの作成
・GDによる画像の生成
・GD出力を文字列で捕らえる方法

・添付メール送信 PHPコードサンプル
<?
//*************************************
//画像添付メール(MIME)を送信するサンプル
//画像はGDで時計を動的に生成しています
//100824
//*************************************
//ここは利用できるSMTPに適時変更してください
//SAKURAインターネットであれば127.0.0.1でOKです
define('MAIL_SMTP_IP','192.168.100.82');

//パラメータは
//to......送信先メールアドレス(必須)(適当に変えてください)
//from....送信元メールアドレス(必須)
//toname....送信先名称(任意)
//fromname..送信元名称(任意)
$para=array('to'=>'aaaa@aaaa.com','from'=>'trac090624@jojo.jp');

$arrMultiPart=array();

//▽***テキストコンテンツ1***▽
$arrMultiPart[]=array(
        
'Content-Type'=>'text/plain; charset=iso-2022-jp',
        
'Content-Transfer-Encoding'=>'7bit',
        
'body'=>mb_convert_encoding"こんにちは世界" ,'iso-2022-jp','utf-8')); //※本文
        
//△***テキストコンテンツ1***△

//▽*****画像データ添付*****▽
$arrMultiPart[]=array(
        
'Content-Type'=>'image/png',
        
'Content-Disposition'=>'attachment; filename="clock.png";',
        
'Content-Transfer-Encoding'=>'base64',
        
'body'=> testImage2() ); //※本文
//△*****画像データ添付*****△

//▽******  送  信   ******▽
echo sendMimeMail("【テストメールです】",
                                        
$arrMultiPart,
                                        
$para);
//△******  送  信   ******△

//---*---*---*--- End of Main ---*---*---*---

/************************************
* 機 能 :動的に画像を作成
*       :時計のPNGイメージを作成
* 引 数 :なし
*       :
* 戻 値 :PNG画像のbase64文字列
* 備 考 :しょぼい
* 例 外 :未処理
* 例    :
* 日 付 :10/08/30 joe 作成
************************************/
//---------------------------------------
//動的に画像を作成
//時計のPNGイメージを作成
//---------------------------------------
function testImage2() {
    
$img imagecreatetruecolor(100100);//画像の作成
    
$col imagecolorallocate($img200,255,255);//背景色
    
imagefill($img00$col);    //背景塗り
    
$col imageColorAllocate($img,255,0,0);//描画色
    
imageellipse($img,50,50,85,85,$col);//時計の外枠
    
$PIORG=PI()/2;
    
//秒針
    
imageline($img,50,50,cos(date('s')/30*PI()-$PIORG)*40+50,sin(date('s')/30*PI()-$PIORG)*40+50,$col);
    
//分針
    
imageline($img,50,50,cos(date('i')/30*PI()-$PIORG)*35+50,sin(date('i')/30*PI()-$PIORG)*35+50,$col);
    
//時針
    
imageline($img,50,50,cos(date('h')/6*PI()-$PIORG)*25+50,sin(date('h')/6*PI()-$PIORG)*25+50,$col);
    
//時間の表示
    
if (file_exists('/usr/local/share/ghostscript/fonts/GothicBBB-Medium.ttf')){
        
//TrueTypeでの文字(フォントを用意すれば日本語可)
        
$font '/usr/local/share/ghostscript/fonts/GothicBBB-Medium.ttf';
        
ImageTTFText($img1002565$col,$font date('h:i:s') );
     } else {
        
imagestring($img,2,3055date('h:i:s'), $col );
        }
     
//リモートアドレスの表示
    
imagestring($img,2,586$_SERVER['REMOTE_ADDR'], $col );
     
    
header("Content-Type: image/gif");
    
ob_start();//画像をデータとして欲しい場合
    
imagegif($img);
    
imagedestroy($img);
    
imagecolordeallocate($col);
    
$str=ob_get_contents();
    
ob_end_clean();
    
//echo $str;    
    
return chunk_split(base64_encode($str));
}


/************************************
* 機 能 :MIMEメール送信関数(マルチバイト対応)
*       :iso-2022-jpとし、76文字/行に収めるようにします
* 引 数 :$subject...件名
*       :$bodys.....マルチパートメール部本体配列
*       :        $bodys[0]['xxx']....ヘッダ
*       :        $bodys[0]['body']...本体(ヘッダによりコンテンツが変わります)
*       :        $bodys[1]['xxx']....ヘッダ
*       :        $bodys[1]['body']...本体(ヘッダによりコンテンツが変わります)
*       :        $bodys[n]['xxx']....ヘッダ
*       :        $bodys[n]['body']...本体(ヘッダによりコンテンツが変わります)
*       :$para...メールヘッダ要素
*       :        $para['to']........あて先メール
*       :        $para['from']......あて元メール
*       :        $para['toname']....あて先名前
*       :        $para['fromname']..あて元名前
*       :        $para['subject']...件名
*       :        $para[ それ以外 ]..メールヘッダ要素
* 戻 値 :エラー文字列(この辺は要検討)
* 備 考 :あて先名前等に忌避文字があります例えば'"<>等の文字が入る場合はクオートして渡してください
*       :$para['fromname']=a@a.a ..X  $para['fromname']="a@a.a" ... O
* 例    :
*       :-----$bodys変数例------
*       :○1.通常テキストのみ
*       :$body[]=array('body'=>'test');
*       :
*       :○2.通常テキスト2(ヘッダつける場合)
*       :$body[]=array(
*       :        'Content-Type'=>'plain/text; charset=iso-2022-jp',      //※ヘッダ
*       :        'Content-Transfer-Encoding'=>'7bit',                    //※ヘッダ
*       :        'body'=>mb_convert_encoding( $strApache_org ,'iso-2022-jp','utf-8'));
*       :     ↑bodyは本文であったり、添付ファイルであったりします
*       :     メールの1行は76文字以内にすべきで必要ならchunk_split()をかませます
*       :○3.ファイルを添付
*       :$body[]=array(
*       :    'Content-Type'=>'application/octet-stream',
*       :    'Content-Disposition'=>'attachment; filename="aaa.bin";',
*       :    'Content-Transfer-Encoding'=>'base64',
*       :    'body'=>chunk_split( base64_encode( file_get_contents( "aaa.bin" ) )));
* 例 外 :未処理
* 日 付 :10/08/30 joe 作成
************************************/
function sendMimeMail($subject,$bodys,$para){
    
//***************************************
    //PEAR-MAILを利用したメール送信
    //利用定数:
    //MAIL_TO .... デフォルトのあて先
    //MAIL_FROM .. デフォルトのあて元
    //MAIL_SMTP_IP.. SMTPサーバIP
    //要件:Pear::Mail
    //***************************************
    
require_once("Mail.php");

    
//送信パラメータ
    //$arrNGWORD = array('.','"','<','>','@');
    
$strTo   = isset($para['to']) ? $para['to']:MAIL_TO  ;   //あて先メルアド
    
$strFrom = isset($para['from']) ? $para['from']:MAIL_FROM//あて元メルアド
    
$strSubject $subject
    
$strlBody $body;
    
//あて先とあて元に全角文字を入れる
    
$strToName =   isset($para['toname'])   ? $para['toname']  : "{$strTo}様へ";
    
$strFromName = isset($para['fromname']) ? $para['fromname']: "宛元:{$strFrom}から";
    
//paraパラメターは後でヘッダとして利用するので利用済みパラメタは削除
    
unset($para['toname']);
    unset(
$para['fromname']);
    unset(
$para['to']);
    unset(
$para['from']);
    unset(
$para['subject']);
    
//MTAパラメータ設定 メール送信用PEARパラメータ
    
$params = array();
    
$arrConstant get_defined_constants(true);
    
//print_r($arrConstant);
    
if (isset($arrConstant['user']['MAIL_SMTP_IP'])) $params['host'] = MAIL_SMTP_IP;
    
$params['port'] = 25;
    
$objMail Mail::factory("smtp",$params);
    
//subject,to,from 全角処理
    //iso-2022変換-jp->base64変換し文字コード
    
$strMailTo      mb_convert_mail$strToName ) ." <{$strTo}>";
    
$strMailFrom    =  mb_convert_mail$strFromName )." <{$strFrom}>";
    
$strMailSubject =  mb_convert_mail$strSubject );
    
    
//ヘッダー作成
    //ここにsend()と同じメルアドを書かないと迷惑メール扱いされる可能性あり
    
$headers $para;

    
$strBoundary uniqid();
    
$headers array_merge$headers,    array(
        
'To'=> $strMailTo,
        
'From'=>$strMailFrom,
        
'MIME-Version'=>"1.0",
        
'Content-Type'=>"multipart/mixed;¥r¥n¥tboundary=¥"{$strBoundary}¥"",
        
'Subject'=>$strMailSubject));
    
//$body変数の生成
    
$strBody ="";
    
    foreach(
$bodys as $body){
        
$strBody .="--{$strBoundary}¥r¥n";
        
//bodyを除く各ヘッダ要素の代入
        
foreach($body as $k=>$v){
            if (
strtolower($k) != 'body'){
                
//body文字列を構築していく
                
$strBody .="{$k}: {$v}¥r¥n";
            };
        }
        
//Content-Type指定なければ(日本語文字のテキストとして扱う)
        
if (!isset($body['Content-Type'])){
            
$strBody .="Content-Type: text/plain;¥r¥n¥tcharset=¥"iso-2022-jp¥"¥r¥n";
            
$strBody .="Content-Transfer-Encoding: 7bit¥r¥n";
            
//$strEnc = mb_detect_encoding( $bodys['body'] ,'auto' ,TRUE);//これASCIIしか検出せん?
            
$body['body'] = mb_convert_encoding$body['body'] ,'ISO-2022-JP','UTF-8');
        } else {
            if (
substr($body['Content-Type'],-1)!=';'$body['Content-Type'] .= ';';
        }
        
$strBody .="¥r¥n";//ヘッダとの区切り
        
$strBody .=$body['body'];
        
$strBody .="¥r¥n";//bodyに改行が無い場合の保険
    
}
    
$strBody .="--{$strBoundary}--¥r¥n";
    
//echo $strBody;
    //X-Priority: 5'低い優先度   X-Priority: 1 高い
    //X-MSMail-Priority: Low       High
    //メール送信
    //****----****----****----****----****----****----****----****
    
$result $objMail->send$strTo $headers$strBody);
    
//****----****----****----****----****----****----****----****

    //送信結果参照
    
if (PEAR::isError($result)){
        
$ret =  "error ".$result;//送信失敗
        
print_r$headers);
        
print_r$strBody);
        
    } else {
      
$ret =  "ok";
    }
    return 
$ret;
}

/************************************
* 機 能 :マルチバイト文字をメールテキストへ変換します
*       :iso-2022-jpとし、76文字/行に収めるようにします
* 引 数 :str..,変換したい文字
*       :
* 戻 値 :メールに直接埋め込めるテキスト
* 備 考 :mb_encode_mimeheader()は信用ならんので自作
*       :
* 例    :mb_convert_mail("abc*****長い文字列長い文字列****def");
*       :=?iso-2022-jp?B?YWJjGyRCIXYhdiF2IXYhdkQ5JCRKODt6TnNEOSQkSjg7ek5zIXYhdiF2?=
*       :        =?iso-2022-jp?B?IXYbKEJkZWY=?=
* 例 外 :未処理
* 日 付 :
************************************/
function mb_convert_mail($str){
    return 
mb_encode_mimeheader(mb_convert_encoding($str,'JIS','utf-8'),'ISO-2022-JP');
}

?>
| 開発関連 | 19:27 | comments(0) | trackbacks(0) |









http://blog.jojo.jp/trackback/1404219