ホーム > programming > 携帯のメールで,擬似的に差出人を任意アドレスに設定し,送信する

携帯のメールで,擬似的に差出人を任意アドレスに設定し,送信する

携帯メールの最大の欠点として,

差出人(送信元)アドレスを自由に設定できない

という欠点がある。

アプリやWebメールを使う手もあるが,

パケット代・手間を考えると気が進まない。

やはり手間を考えると,標準の携帯メーラーから

送信元アドレスを自由に設定して送れないものか。

メール使いホーダイに入っていれば,定額で実現できるし。

 

色々考えた末

GmailとPHPとcronを使えば,実現できるのでは?

ということで,PEAR::Mail, PEAR::Net_POP3を使いやってみた。

結果は,可能だし,実用的。

欠点は,予め送信したいアドレスにid numberを割り振り,

配列やDBに登録しておく必要があること。

(未登録のアドレスには送信できない)

アルゴリズムは次の通り。

1. 携帯から「To: xxx+###@gmail.com」へ送信する。

「xxx+###@gmail.com」というアドレスに送信しても,

“+”以降はGmailでは無視され「xxx@gmail.com」に届く。

例として,xxx+000@gmail.comに送ったと仮定する。

2. Gmail「xxx@gmail.com」にメールが届く
3.PHPでメールを転送する

GmailからPOP3でメールを取得しSMTPで送信(転送)

SMTPで送信する際,ヘッダーを設定するのだが

Return-PathとFromに任意のアドレスを設定できる。

「xxx+000@gmail.com」の000をidとして

予め対応するアドレスを配列なりDBに登録しておくことで

(例: 000->xxx@yyy.com)

###の部分を変えれば,任意の相手に送信することができる。要するに

xxx+000@gmail.com: xxx@yyy.comへ転送

xxx+001@gmail.com: aaa@bbb.comへ転送

xxx+002@gmail.com: ccc@ddd.comへ転送

xxx+000.001@gmail.com: xxx@yyy.com, aaa@bbb.comへ転送(複数)

このPHPをcronで定期実行することで,

定期的にGmailをチェック,転送させる。

 

gmailで送受信するためのクラス(gmail)を作成し

それを用いて送受信するようにした。

例)メールの送信
 
<?phprequire_once 'gmail.php';$gm=new gmail();$gm->set_account_info('xxx@gmail.com','password');

$header=array('From'=>'aaa@bbb.com','To'=>'yyy@gmail.com','Subject'=>'Test');$body='メール本文';

$gm->send(array('to'=>'yyy@gmail.com','header'=>$header,'body'=>$body));?>
 

cron.sh

#!/bin/sh<br />#PHP<br />/usr/local/bin/php /***/***/main.php<br />exit

main.php

<br />&lt;?php<br />require 'gmail.php';<br />$gm=new gmail();<br />$gm-&gt;set_account_info(<br /> 'xxx@gmail.com','password'<br />);<br />$p=0;<br />while(TRUE):<br />   $msg=$gm-&gt;getMessage($p);<br />  if($msg===FALSE){break;}<br />  $arry=explode('+',$msg['header']['To']);<br />  $arry=explode('@',$arry[1]);<br />  $arry=explode('.',$arry[0]);<br />  $tol=array();<br /> foreach($arry as $eac):<br />       $tol[]=$ir-&gt;get_addr_by_sn($eac);<br />  endforeach;<br />   $header=array(<br />        'To'=&gt;implode(', ',$tol),<br />      'From'=&gt;'
xxx@yyy.com
',//差出人を設定<br />        'Subject'=&gt;$msg['header']['Subject'],<br />      'Return-Path'=&gt;'xxx@yyy.com',//差出人を設定<br />      'MIME-Version'=&gt;$msg['header']['MIME-Version'],<br />        'Content-Type'=&gt;$msg['header']['Content-Type'],<br />        'Content-Transfer-Encoding'=&gt;$msg['header']['Content-Transfer-Encoding'],<br />      'Date'=&gt;$msg['header']['Date'],//携帯からの送信日時と同じにする場合設定<br />     'X-Priority'=&gt;3<br />    );<br />    if(count($tol)&gt;0):<br /> $gm-&gt;send(array(<br />       'to'=&gt;$tol,<br />        'header'=&gt;$header,<br />     'body'=&gt;$msg['body'],<br />      'body_encode'=&gt;FALSE<br />   ));<br />   endif;<br />    $p++;<br /> if($p&gt;3){break;}//1回に処理するのは3通までに設定<br />endwhile;<br />?&gt;

gmail.php

&lt;?php<br />require_once 'Mail.php';<br />require_once 'Mail/mime.php';<br />require_once 'Net/POP3.php';<br />mb_language('ja');<br />mb_internal_encoding('iso-2022-jp');<br />class gmail{<br />   function __construct(){<br />       $this-&gt;par=array(<br />      'pop3'=&gt;array(<br />         'host'=&gt;'ssl://pop.gmail.com',<br />         'port'=&gt;'995',<br />     ),'smtp'=&gt;array(<br />           'host'=&gt;'smtp.gmail.com',<br />          'port'=&gt;587,<br />           'auth'=&gt;true,<br />          'debug'=&gt;true<br />      ));<br />   }<br /><br />   function set_account_info($usr,$pwd,$smtpusr='',$smtppwd=''){<br />     $this-&gt;par['username']=$usr;<br />       $this-&gt;par['password']=$pwd;<br />       if($smtpusr==''){$smtpusr=$usr;}<br />      if($smtppwd==''){$smtppwd=$pwd;}<br />      $this-&gt;par['smtp']['username']=$smtpusr;<br />       $this-&gt;par['smtp']['password']=$smtppwd;<br />   }<br /><br />   function send($arg){<br />      if($arg['body_encode']!==FALSE):<br />      $arg['body']=mb_convert_encoding($arg['body'],'ISO-2022-JP','auto');<br />      endif;<br />        $mo=Mail::factory('smtp',$this-&gt;par['smtp']);<br />      $ret=$mo-&gt;send($arg['to'],$arg['header'],$arg['body']);<br />        if(PEAR::isError($ret)):<br />          die('Error: '.$ret-&gt;getMessage());<br />     endif;<br />    }<br /><br />   function getMessage($pointer,$del=TRUE){<br />      if(!$this-&gt;connect_pop3()){die('connect error');}<br />      $res=array();<br />     $list=$this-&gt;pop3-&gt;getListing();<br />        if(count($list)&lt;$pointer+1):<br />           return FALSE;<br />     else:<br />         $res['header']=$this-&gt;pop3-&gt;getParsedHeaders($list[$pointer]['msg_id']);<br />            $res['body']=$this-&gt;pop3-&gt;getBody($list[$pointer]['msg_id']);<br />           if($del){$this-&gt;pop3-&gt;deleteMsg($list[$pointer]['msg_id']);}<br />            return $res;<br />      endif;<br />    }<br /><br />   function connect_pop3(){<br />      if(is_null($this-&gt;pop3)):<br />          $this-&gt;pop3=&amp;new Net_POP3();<br />           if($this-&gt;pop3-&gt;connect($this-&gt;par['pop3']['host'],$this-&gt;par['pop3']['port'])):<br />              if($this-&gt;pop3-&gt;login($this-&gt;par['username'],$this-&gt;par['password'])):<br />                else:<br />                 return FALSE;<br />             endif;<br />            else:<br />             return FALSE;<br />         endif;<br />        endif;<br />        return TRUE;<br />  }<br /> function __destruct(){<br />        if(!is_null($this-&gt;pop3)):<br />         $this-&gt;pop3-&gt;disconnect();<br />      endif;<br />    }<br />}<br />?&gt;

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://www.sasapy.com/mtcontents/entry/100423_gmail.php/trackback
トラックバックの送信元リスト
携帯のメールで,擬似的に差出人を任意アドレスに設定し,送信する - sasapy.com より

ホーム > programming > 携帯のメールで,擬似的に差出人を任意アドレスに設定し,送信する

検索

ページの上部に戻る