Gmail 로 moblog 시작!

이글루스에서도 모블로깅을 지원한다고 하고, inel 님의 모블로그를 보고 자극도 받아서..
저도 간단하게 나마 Gmail을 이용한 모블로그를 만들어 보았습니다.(상단버튼,사이드바에도 있음)

gmail 에 모블로그용 계정을 하나 만든후 (꼭 gmail 일 필요는 없겠지만.. 용량이 많아서.. ^^)
메일을 읽어오는 Reader 스크립트를 하나 만들었습니다. pop3 는 보안접속처리 때문인지 잘 되지가 않더군요.
그래서 GMailer for PHP 라이브러리를 이용해서 구현했습니다.

서버가 Window 인지라.. 그냥 윈도우 스케줄러를 이용 유휴시간에 한번씩 Reader 스크립트를 돌리게 했는데..
이 스케쥴러가 유휴시간은 도대체 어찌 체크를 하는지 지맘대로인 경우가 많군요 -_-; cron 으로 바꾸던지 해야할듯

하여튼 읽어다가 기존처럼 제로보드에 레코드 하나 추가하고, GD 를 이용해서 썸네일 만들어 줍니다.
PHP + GMail + 제로보드 + GD라이브러리 로 구현된 모블로그라고 해야겠군요.
제 핸드폰 애니콜 SCH-E200 과 Clie TH55 에서 보내보니 잘 받아 지네요. 단 클리에일경우 한글이 깨집니다. 쩝..

송신자 필드 분석해서 스팸도 막고 해야겠지만, 일단 아무데도 안 알린 계정이니 문제는 없을듯 합니다 🙂

흠.. 문제는 포토메일을 보내는데 드는 패킷요금이군요 -_-;
핸폰사진한장 보통 25000바이트, 512바이트당 6원이니까 25000/512=48*6=288, 포스팅 하나에 약 300원 드는거군요.
여러분께선 모블로그에서 글당 최소 300원의 가치를 지니는 글을 보고 계신겁니다. 🙂

혹시 필요하신분들을 위해 소스를 공개합니다. 막코딩인거는 아시죠 🙂
제로보드가 아닌 다른 게시판및 툴을 사용하신다면 수정이 좀 필요합니다..

[#!_이메일 읽어오기용 gmail_reader.php 소스보기.. ▽|그만 볼래요.. △_!#]


<?

 
require("libgmailer.php");

 

 
$gm = new GMailer();

 
$gm->setLoginInfo("gmail 아이디", "gmail 암호", "GMT+9"); // GMail 계정정보

 

 
if ($gm->connect()) {

  
$gm->fetchBox(GM_STANDARD, "Inbox", 0); // 수신함

  
$snapshot = $gm->getSnapshot(GM_STANDARD);

  if (
$snapshot) {

   for (
$i = 0;$i < $snapshot->box_total ; $i++ )

   {

    if (
$snapshot->box[$i]["is_read"] == 1) // 안읽은 메일만

    
{

     
$gm->fetchBox(GM_CONVERSATION, $snapshot->box[$i]["id"], 0);

    
$conv = $gm->getSnapshot(GM_CONVERSATION);

     

     
// 제목,내용,첨부파일,받은날짜 빼오기

     
$subject = $conv->conv[0]["subj"];

     
$body = $conv->conv[0]["body"];

     
$filename = $conv->conv[0]["attachment"][0]["filename"];

     
$recvdate = strtotime($conv->conv[0]["dt"]);

     

     
// 인코딩변환

     
$subject = mb_convert_encoding($subject, "EUC-KR", "UTF-8");

     
$body = mb_convert_encoding($body, "EUC-KR", "UTF-8");

     
// 파일이름은 현재시간

     
$filename = urlencode(time().".jpg");

         

      
// 첨부파일 받기 - 자신의 서버에 attachment_down.php 위치지정

      
$dlfile = "http://myserver.com/attachment_down.php";

          

     
$addr = $dlfile."?a=".$conv->conv[0]["attachment"][0]["id"]."&m=".$conv->conv[0]["id"]."&f=$filename";

     

     
$fp = fopen($addr,'r');

     while(!
feof($fp)) {

       
fread($fp, 100*1024);

       
flush();

      }

      
fclose ($fp);       

     

     
// SKT 메일 앞부분 잘라내기 - 혹시.. KTF 이신분들은 수정필요 :)

     
$body =str_replace("<b><font color=\"red\">회신시 NATE.com의 폰넘버메일로 전달됩니다.</font></b>","",$body);

     
$body =str_replace("<br /><br>","",$body);

     

     
// 이미지 크기 조정

     // Thumbail : 150 X 113 , 파일명앞에 s_

     // 원본이미지 : 448 X 336

      

      
make_thumbnail_image(150,113,$filename,"./img/s_".$filename);

      
make_thumbnail_image(448,336,$filename,"./img/".$filename);

      

      
// 원본삭제

      
unlink($filename);

      

      
// 제로보드에 기록하는 함수

      // 제로보드를 안쓰시는분들은 아래 제목,내용,날짜,파일이름을 가져다 쓰세요.

     
write_to_zb($subject,$body,$recvdate,$filename);

    }    

   }    

  }    

  
$gm->disconnect(); // 연결끊기 

 


  

// 썸네일 만들기

function make_thumbnail_image($x,$y,$src_filename,$dst_filename) {

 
$img_info = getimagesize ($src_filename);

 if (
$img_info[2] =="2") {    

  
$src_image=ImageCreateFromjpeg($src_filename);

    

  
$dst_image = ImageCreateTrueColor($x, $y);

  

  
ImageCopyResized($dst_image,$src_image,0,0,0,0,$x+1,$y+1,$img_info[0],$img_info[1]);

  
Imagejpeg($dst_image,$dst_filename,90);

  
ImageDestroy($dst_image);

  
ImageDestroy($src_image);

  

  return
$dst_filename;

 }

}

// 제로보드에 기록하기

// 중요!! : 바로 이전글의 내용을 참조해서 기록하는 방식이므로, 게시판에 글 한개는 무조건 있어야 합니다!

function write_to_zb ($subject,$memo,$recvdate,$sitelink1)

{

 
$dbconn = mysql_connect("DB서버","mysql계정","mysql암호"); // 자신의 mysql dbsetting

 
$status = mysql_select_db("DB명",$dbconn);  // 자신의 mysql db명

 

 
$id = "moblog"// ZeroBoard 게시판 이름

 

 // 마지막 글 정보 읽어오기

 
$sel_query = "select division,headnum,no,ip,password,name,homepage,email,category,is_secret,use_html,ismember,islevel from zetyx_board_".$id." order by no desc";

 
$result = mysql_query($sel_query,$dbconn);

 
$res = mysql_fetch_row($result);

 

 
$sel_query3 = $sel_query;

 

 
//$reg_date = time();

 
$reg_date = $recvdate;

 
$sel_query = "insert into zetyx_board_".$id."(";

 
$sel_query = $sel_query." division,headnum,prev_no,next_no,ip,password,name,homepage,email,category,";

 
$sel_query = $sel_query." is_secret,use_html,ismember,islevel,";

 
$sel_query = $sel_query." subject,reg_date,sitelink1,sitelink2,memo) values(";

 
$sel_query = $sel_query." $res[0],$res[1]-1,0,$res[2],'$res[3]','$res[4]','$res[5]','$res[6]','$res[7]',1,";

 
$sel_query = $sel_query." '','2',$res[11],$res[12],";

 
$sel_query = $sel_query."'$subject',$reg_date,'$sitelink1','','$memo')";

 

 
$sel_query2 = $sel_query;

 
$result = mysql_query($sel_query,$dbconn);

 
$res_val = mysql_affected_rows();

  

 
$sel_query = "update zetyx_admin_table set total_article=total_article+1 where name='".$id."'";

 
$result = mysql_query($sel_query,$dbconn);

 

 
$sel_query = "select no from zetyx_board_".$id." order by no desc";

 
$result = mysql_query($sel_query,$dbconn);

 
$res_l = mysql_fetch_row($result);

 

 
$inserted_no = $res_l[0];

 

 
$sel_query = "update zetyx_board_".$id." set prev_no=".$res_l[0]." where no=".$res[2];

 
$result = mysql_query($sel_query,$dbconn);

 

 
$sel_query = "update zetyx_board_category_".$id." set num=num+1 where no = 1";

 
$result = mysql_query($sel_query,$dbconn);

 

 
$sel_query = "update zetyx_division_".$id." set num=num+1 where no = 1";

 
$result = mysql_query($sel_query,$dbconn);

 

 

}

?>



[#!_END_!#]
[#!_첨부파일 다운로드용 attachment_down.php 소스보기.. ▽|그만 볼래요.. △_!#]


<?php

 
require_once("libgmailer.php"); 

 

 
$attid = (isset($_REQUEST["a"]))? $_REQUEST["a"] : 0;

 
$mid = (isset($_REQUEST["m"]))? $_REQUEST["m"] : 0;

 
$fname = (isset($_REQUEST["f"]))? $_REQUEST["f"] : 0;

 

 if (
$attid && $mid && $fname) {

  
$gm = new GMailer();

   
$gm->setLoginInfo("gmail 아이디", "gmail 암호", "GMT+9"); // GMail 계정정보

  

  
if ($gm->connect()) {  

   

   
header("Content-Type: application/octet-stream");

   
header('Content-Disposition: attachment; filename="'.$fname.'"');

   
$gm->getAttachment($attid, $mid, $fname);   

   exit();

  }

 }

 echo
"Download error.";

?>

[#!_END_!#]

Gmail 로 moblog 시작!”에 대한 10개의 생각

  1. 게르니카

    와… 좋네요…
    저는 pop3이용한 모블로그 코딩중입니다.
    멜헤더분석하기가 넘 힘드네요^^

    gmail 라이브러리가 있는줄을 몰랐네요.
    좋은 정보 감사합니다.

    응답
    1. 구루

      가져다가 모블로깅에 쓰시는거면 몰라도 글내용을 퍼가시진 말아주셨으면 합니다.
      이런게 있더라하고 링크만 올려주시면 안될까요 ? 🙂

      응답
  2. inel

    와~ 대단하세요. 저는 얼마전에 LGT로 바꿨는데 사진메일 하나 보내는데 200원쯤 드는 것 같아요. 무제한 사진메일 쓸 때가 좋았는데 말이에요. ^^

    응답
    1. 구루

      저도 이거때문에 011 무제한 컬러메일 한번 신청해 봤습니다. ^^
      근데 어디 돌아다니질 않아서 사실 모블로깅이라고 할꺼리가 별루없어요 T_T

      응답
  3. ivdex

    어떻게 적용하는지 잘 모르겟는데…구체적으로 제로보드와 사용할경우 어떻게 해야 되는지…그리고 처음 설치와 세팅은 어떻게 하는지 알려주셨으면 좋겠어요~^^

    응답
    1. 구루

      링크블로그 설치해보셨으니.. 거의 비슷합니다. 아래 제로보드에 추가하는 함수도 있구요.
      근데 문제는 현재 gmail 이 바꿔셔 gmailer 가 동작을 안하고 있습니다. 새버전이 나올때까지 기다리셔야 할듯..

      응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다