Создание скрипта разбора почты.

Омск

Новичок
Просто эту почту будут юзать много народу. Доступа к базе я не буду иметь( Но если попариться то можно и решить проблему) Спс большое.

Ps парюсь потому что вначале все было хорошо. Сделал скрипт который все разбирал. Потом послал письмо с вложением, пришлось полностью переписывать все.
Переписал. До этого отправлял с почтовых серисов в инете. Отправил с бата, все заново делать. Вот поэтому я и хочу знать какие еще могут быть опции кроме NAME BOUNDARY и CHARSET. А то еще с чего нить отправят и переделывать)
 

Омск

Новичок
baev
Омск, Вы в курсе, что существуют такие вещи как стандарты?
Просвещайтесь:
http://rfc-ref.org/RFC-TEXTS/2045/contents.html
спс. Сегодня буду изучать)

-~{}~ 01.03.07 19:52:

Еще вопрос. А переводов RFC вы не встречали?
 

Омск

Новичок
Сделал так.
PHP:
<?php
$hostname="localhost";
$username="root";
$password="";
if(!mysql_connect($hostname,$username,$password))
{
exit;
}
mysql_select_db("mail");
function pr($str1,$str2)
{
	if(eregi("koi8-r",$str2)) $to="k";
	if(eregi("iso8859-5",$str2)) $to="i";
	if(eregi("x-cp866",$str2)) $to="a";
	if(eregi("x-mac-cyrillic",$str2)) $to="m";
	if(@$to!="") $str1=convert_cyr_string ($str1, $to, "w");
	return $str1;
}
function pere($str)
{
	$str=explode(" ", $str);
	$i=0;
	while($i!=count($str))
	{
		$vot=explode("?", $str[$i]);
		if(@$vot[2]=="Q"):
		{
			$vot[3]=quoted_printable_decode($vot[3]);
		}
		elseif(@$vot[2]=="B"):
		{
			$vot[3]=base64_decode($vot[3]);
		}
		else:
		{
			$vot[3]=$str[$i];
		}
		endif;
		$vot[3]=pr($vot[3],$vot[1]);
		$str[$i]=$vot[3];
		$i++;
	}
		
	$str=implode(" ", $str);
	return $str;
}
function timepr($st)
{
$st=explode(" ", $st);
switch ($st[2]) 
{
    case Jan:
        $st[2]=01;
        break;
    case Feb:
        $st[2]=02;
        break;
    case Mar:
        $st[2]=03;
        break;
	case Apr:
        $st[2]=04;
        break;
	case May:
        $st[2]=05;
        break;
	case Jun:
        $st[2]=06;
        break;
	case Jul:
        $st[2]=07;
        break;
	case Aug:
        $st[2]=08;
        break;
	case Sep:
        $st[2]=09;
        break;
	case Oct:
        $st[2]=10;
        break;
	case Nov:
   	    $st[2]=11;
   	    break;
	case Dec:
  	     $st[2]=12;
   	     break;
	}
	$st=$st[3]."-".$st[2]."-".$st[1]." ".$st[4];
	return $st;
}
$que=mysql_query("SELECT * FROM info");
while($dan=mysql_fetch_array($que))
{ 														// $dan dannye.
	$login=$dan['ik14'];
	$pass=$dan['ik15'];
	$mbox = imap_open ("{pop3-9.1gb.ru}INBOX", $login, $pass,CL_EXPUNGE);
	$pis=imap_headers($mbox);
	$i=0;
	while($pis[$i])
	{
		$i++;
		$tt=imap_fetch_overview($mbox, $i);
		$vr="{$tt[0]->date}";
		$vr=timepr($vr); 																	// $vr vremya
		$sub="{$tt[0]->subject}";
		if($sub=="")
		{
			$sub="No subject";
		}
		else
		{
			$sub=pere($sub);																	// $sub tema
		}
		$from="{$tt[0]->from}";
		$from=trim($from);
		if(ereg(".*>$",$from))
		{
			ereg("^(.+)<(.+)>$",$from,$fr);
			$from1=pere($fr[1]);
			$from2=$fr[2];	
		}
		else
		{
			$from1=$from;																		// $from1 Fakticheskij adress
			$from2="";																			// $from2 Zamena adr
		}
		$size="{$tt[0]->size}";																// $size ves pisma

		$body=imap_body($mbox, $i);
		$te=imap_fetchstructure($mbox, $i);
		$si="{$te->[parameters]->[0]->attribute}";	
		$si1="{$te->[parameters]->[0]->value}";
		if(eregi("BOUNDARY", $si))
		{
			$val="--".$si1; 
			$body=explode($val,$body);
			array_pop($body);
			array_shift($body);
			$x=0;
			$body1="";
			$fail="";
			$tekst="";
			$put=rand(111111111,999999999);
			mkdir("mail/$put", 0700);
																						// $tekst Tekst pisma! 
																						// $fail=put`/imya = razmer,  put`/imya = razmer,
			while($body[$x])
			{
				
				$sej=explode("\r\n\r\n",$body[$x],2);									
				if(eregi("boundary=", $sej[0])):
				{																		
					eregi('boundary="(.[^"]+)',$sej[0],$bou);
					$body1=$body[$x];
				}
				elseif(eregi("filename=", $sej[0])):
				{
					eregi('filename="(.[^"]+)',$sej[0],$arrae1);
					eregi('Content-Transfer-Encoding: ([a-z0-9-]+)',$sej[0],$arrae2);
					$arrae1=pere(trim($arrae1[1]));
					$arrae2=trim($arrae2[1]);
					if(eregi("base64",$arrae2)):
					{
						$sej[1]=base64_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
					}
					elseif(eregi("quoted-printable",$arrae2)):
					{
						$sej[1]=quoted_printable_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
					}
					endif;
					$fo=fopen("mail/$put/$arrae1","wb");
					$rasd=fputs($fo,$sej[1]);
					fclose($fo);
					if($rasd!="-1")
					{
						$fail.="mail/$put/$arrae\"$rasd,";
					}
					
				}
				elseif(eregi("Content-ID:", $sej[0])):
				{
					eregi('name="(.[^"]+)',$sej[0],$arrae1);
					eregi('Content-Transfer-Encoding: ([a-z0-9-]+)',$sej[0],$arrae2);
					eregi('Content-ID: <(.[^>]+)',$sej[0],$arrae3);
					$arrae1=pere(trim($arrae1[1]));
					$arrae2=trim($arrae2[1]);
					if(eregi("base64",$arrae2)):
					{
						$sej[1]=base64_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
					}
					elseif(eregi("quoted-printable",$arrae2)):
					{
						$sej[1]=quoted_printable_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
					}
					endif;
					$fo=fopen("mail/$put/$arrae1","wb");
					$rasd=fputs($fo,$sej[1]);
					fclose($fo);
					if($rasd!="-1")
					{
						$fail.="mail/$put/$arrae1\"$rasd,";
					}
					$adsaa[chem]="mail/$put/$arrae1";
					$adsaa[chto]=$arrae3[1];
					$zamesh[]=$adsaa;
				}
				else:
				{
					if(eregi("BASE64",$sej[0])): $sej[1]=base64_decode($sej[1]);
					elseif(eregi("QUOTED-PRINTABLE",$sej[0])): $sej[1]=quoted_printable_decode($sej[1]);
					endif;
					if(eregi("koi8-r",$sej[0])): $char="koi8-r";
					elseif(eregi("iso8859-5",$sej[0])): $char="iso8859-5";
					elseif(eregi("x-cp866",$sej[0])): $char="x-cp866";
					elseif(eregi("x-mac-cyrillic",$sej[0])): $char="x-mac-cyrillic";
					else: $char="windows-1251";
					endif;
					$sej[1]=pr($sej[1],$char);
					$sej[1]=str_replace("$char", "windows-1251", $sej[1]);
					$tekst.=$sej[1];
				}
				endif;
				$x++;
			}
			//////////////////////////////////////////////////////  razbor 2!
			if($body1!="")
			{
				$val="--"."$bou[1]";                    
				$body1=explode($val,$body1);
				$x=0;
				$body2="";
			
				while($body1[$x])
				{
					$sej=explode("\r\n\r\n",$body1[$x],2);									
					if(eregi("boundary=", $sej[0])):
					{																		
						eregi('boundary="(.[^"]+)',$sej[0],$bou);
						$body2=$body1[$x];
					}
					elseif(eregi("filename=", $sej[0])):
					{
						eregi('filename="(.[^"]+)',$sej[0],$arrae1);
						eregi('Content-Transfer-Encoding: ([a-z0-9-]+)',$sej[0],$arrae2);
						$arrae1=pere(trim($arrae1[1]));
						$arrae2=trim($arrae2[1]);
						if(eregi("base64",$arrae2)):
						{
							$sej[1]=base64_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						elseif(eregi("quoted-printable",$arrae2)):
						{
							$sej[1]=quoted_printable_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						endif;
						$fo=fopen("mail/$put/$arrae1","wb");
						$rasd=fputs($fo,$sej[1]);
						fclose($fo);
						if($rasd!="-1")
						{
							$fail.="mail/$put/$arrae1\"$rasd,";
						}
						
					}
					elseif(eregi("Content-ID:", $sej[0])):
					{
																							
						eregi('name="(.[^"]+)',$sej[0],$arrae1);
						eregi('Content-Transfer-Encoding: ([a-z0-9-]+)',$sej[0],$arrae2);
						eregi('Content-ID: <(.[^>]+)',$sej[0],$arrae3);
						$arrae1=pere(trim($arrae1[1]));
						$arrae2=trim($arrae2[1]);
						if(eregi("base64",$arrae2)):
						{
							$sej[1]=base64_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						elseif(eregi("quoted-printable",$arrae2)):
						{
							$sej[1]=quoted_printable_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						endif;
						$fo=fopen("mail/$put/$arrae1","wb");
						$rasd=fputs($fo,$sej[1]);
						fclose($fo);
						if($rasd!="-1")
						{
							$fail.="mail/$put/$arrae1\"$rasd,";
						}
						$adsaa[chem]="mail/$put/$arrae1";
						$adsaa[chto]=$arrae3[1];
						$zamesh[]=$adsaa;
					}
					else:
					{
						if(eregi("BASE64",$sej[0])): $sej[1]=base64_decode($sej[1]);
						elseif(eregi("QUOTED-PRINTABLE",$sej[0])): $sej[1]=quoted_printable_decode($sej[1]);
						endif;
						if(eregi("koi8-r",$sej[0])): $char="koi8-r";
						elseif(eregi("iso8859-5",$sej[0])): $char="iso8859-5";
						elseif(eregi("x-cp866",$sej[0])): $char="x-cp866";
						elseif(eregi("x-mac-cyrillic",$sej[0])): $char="x-mac-cyrillic";
						else: $char="windows-1251";
						endif;
						$sej[1]=pr($sej[1],$char);
						$sej[1]=str_replace("$char", "windows-1251", $sej[1]);
						$tekst.=$sej[1];
					}
					endif;
					$x++;
				}
			}
			if($body2!="")
			{
				$val="--"."$bou[1]";                    
				$body2=explode($val,$body2);
				$x=0;
				$body3="";
			
				while($body1[$x])
				{
					$sej=explode("\r\n\r\n",$body2[$x],2);									
					if(eregi("boundary=", $sej[0])):
					{																		
						eregi('boundary="(.[^"]+)',$sej[0],$bou);
						$body3=$body2[$x];
					}
					elseif(eregi("filename=", $sej[0])):
					{
						eregi('filename="(.[^"]+)',$sej[0],$arrae1);
						eregi('Content-Transfer-Encoding: ([a-z0-9-]+)',$sej[0],$arrae2);
						$arrae1=pere(trim($arrae1[1]));
						$arrae2=trim($arrae2[1]);
						if(eregi("base64",$arrae2)):
						{
							$sej[1]=base64_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						elseif(eregi("quoted-printable",$arrae2)):
						{
							$sej[1]=quoted_printable_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						endif;
						$fo=fopen("mail/$put/$arrae1","wb");
						$rasd=fputs($fo,$sej[1]);
						fclose($fo);
						if($rasd!="-1")
						{
							$fail.="mail/$put/$arrae1\"$rasd,";
						}
						
					}
					elseif(eregi("Content-ID:", $sej[0])):
					{
																							
						eregi('name="(.[^"]+)',$sej[0],$arrae1);
						eregi('Content-Transfer-Encoding: ([a-z0-9-]+)',$sej[0],$arrae2);
						eregi('Content-ID: <(.[^>]+)',$sej[0],$arrae3);
						$arrae1=pere(trim($arrae1[1]));
						$arrae2=trim($arrae2[1]);
						if(eregi("base64",$arrae2)):
						{
							$sej[1]=base64_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						elseif(eregi("quoted-printable",$arrae2)):
						{
							$sej[1]=quoted_printable_decode(str_replace ("\r", "", str_replace ("\n", "",$sej[1])));
						}
						endif;
						$fo=fopen("mail/$put/$arrae1","wb");
						$rasd=fputs($fo,$sej[1]);
						fclose($fo);
						if($rasd!="-1")
						{
							$fail.="mail/$put/$arrae1\"$rasd,";
						}
						$adsaa[chem]="mail/$put/$arrae1";
						$adsaa[chto]=$arrae3[1];
						$zamesh[]=$adsaa;
					}
					else:
					{
						if(eregi("BASE64",$sej[0])): $sej[1]=base64_decode($sej[1]);
						elseif(eregi("QUOTED-PRINTABLE",$sej[0])): $sej[1]=quoted_printable_decode($sej[1]);
						endif;
						if(eregi("koi8-r",$sej[0])): $char="koi8-r";
						elseif(eregi("iso8859-5",$sej[0])): $char="iso8859-5";
						elseif(eregi("x-cp866",$sej[0])): $char="x-cp866";
						elseif(eregi("x-mac-cyrillic",$sej[0])): $char="x-mac-cyrillic";
						else: $char="windows-1251";
						endif;
						$sej[1]=pr($sej[1],$char);
						$sej[1]=str_replace("$char", "windows-1251", $sej[1]);
						$tekst.=$sej[1];
					}
					endif;
					$x++;
				}
			}
			if($body3!="")
			{
				$tekst.=$body3;
			}
			$p=0;
			while($zamesh[$p]!="")
			{
				$chto="cid:{$zamesh[$p][chto]}";
				$chem="{$zamesh[$p][chem]}";
				$tekst=str_replace($chto, $chem, $tekst);
				$p++;
			}

		}
		else
		{
			$body=pr($body,$si1);
			if($body=="") $tekst="No message."; else $tekst=$body;
		}
		////////////////////////////////////////////////////  dobavlenie v bazu
		if($dan['ik6']==1)
		{
			if($dan['ik13']==1)
				$kud=0; 
			else 
				$kud=4;
		}
		else $kud=0;
		$sub=substr(trim(addslashes($sub)), 0,1000 );
		$from1=substr(trim(addslashes($from1)), 0,1000 );
		$from2=substr(trim(addslashes($from2)), 0,1000 );
		$tekst=substr(trim(addslashes($tekst)), 0,1000 );
		$fail=substr(trim(addslashes($fail)), 0,1000 );
		$ik=substr(trim(addslashes($dan['ik11'])), 0,1000 );
		$body=substr(trim(addslashes($dan['$body'])), 0,1000 );
		mysql_query("UPDATE info SET ik16=ik16+'$size' where ik11='$ik';");
		mysql_query("INSERT INTO mail (ma1,ma2,ma3,ma4,ma5,ma6,ma7,ma8,ma9,ma10,ma11) values ('$kud','0','$vr','$sub','$from1','$from2','$tekst','$size','$fail','$ik','$body');");
	}
	imap_close($mbox);
}
?>
я думаю тем кто зайдет в поисках ответов на эту тему будет непрочь разобрать код...
 
Сверху