|
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
|
|
Переименовать файлы при загрузке на сервер25.01.2015, 21:09. Показов 1173. Ответов 4
Метки нет (Все метки)
Коллеги!
Есть хороший скрипт - парсит почту, записывает ее в MySQL, вложения сохраняет на сервере. phpclasses.org/package/3324-PHP-Retrieve-e-mail-messages-into-a-MySQL-database.html Но у меня проблема - никак не могу исправить код. Но он сохраняет файлы так: IDfilemane (напр.: 25myimage.jpg) А мне нужно: filemame_ID (напр.: myimage_25.jpg) или filemame_ID_date_time (напр.: myimage_25_2015-01-25-12-00.jpg) Пожалуйста, помогите!!! ----------------- Вот скрипт: Добавлено через 3 минуты начало скрипта: <? /** EMAIL TO DB Author:Ernest Wojciuk */ class EMAIL_TO_DB { var $IMAP_host; #pop3 server var $IMAP_port; #pop3 server port var $IMAP_login; var $IMAP_pass; var $link; var $error = array(); var $status; var $max_headers = 10; #How much headers to retrive 'max'=all headers var $filestore; var $file_path = '/var/www/files/email/'; #Where to write file attachments var $partsarray = array(); var $msgid =1; var $newid; var $logid; var $this_file_name = 'example_1.php'; #If mode "html" var $mode = 'html'; #If script run from cron = "cron" or "html" var $spam_folder = 1; #Folder where moving spam (ID from DB) var $file = array(); #File in multimart message function connect($host, $port, $login, $pass){ $this->IMAP_host = $host; $this->IMAP_login = $login; $this->link = imap_open("{". $host . $port."}INBOX", $login, $pass); if($this->link) { $this->status = 'Connected'; } else { $this->error[] = imap_last_error(); $this->status = 'Not connected'; } } function set_path(){ $path = $this->file_path; return $path; } function set_filestore(){ $dir = $this->dir_name(); $path = $this->set_path(); $this->filestore = $path.$dir; } /** Get mailbox info*/ function mailboxmsginfo(){ //$mailbox = imap_mailboxmsginfo($this->link); #It's wery slow $mailbox = imap_check($this->link); if ($mailbox) { $mbox["Date"] = $mailbox->Date; $mbox["Driver"] = $mailbox->Driver; $mbox["Mailbox"] = $mailbox->Mailbox; $mbox["Messages"]= $this->num_message(); $mbox["Recent"] = $this->num_recent(); $mbox["Unread"] = $mailbox->Unread; $mbox["Deleted"] = $mailbox->Deleted; $mbox["Size"] = $mailbox->Size; } else { $this->error[] = imap_last_error(); } return $mbox; } /** Number of Total Emails */ function num_message(){ return imap_num_msg($this->link); } /** Number of Recent Emails */ function num_recent(){ return imap_num_recent($this->link); } /** Type and subtype message */ function msg_type_subtype($_type){ if($_type > 0){ switch($_type){ case '0': $type = "text"; break; case '1': $type = "multipart"; break; case '2': $type = "message"; break; case '3': $type = "application"; break; case '4': $type = "audio"; break; case '5': $type = "image"; break; case '6': $type = "video"; break; case '7': $type = "other"; break; } } return $type; } /** Flag message */ function email_flag(){ switch ($char) { case 'S': if (strtolower($flag) == '\\seen') { $msg->is_seen = true; } break; case 'A': if (strtolower($flag) == '\\answered') { $msg->is_answered = true; } break; case 'D': if (strtolower($flag) == '\\deleted') { $msg->is_deleted = true; } break; case 'F': if (strtolower($flag) == '\\flagged') { $msg->is_flagged = true; } break; case 'M': if (strtolower($flag) == '$mdnsent') { $msg->is_mdnsent = true; } break; default: break; } } /** Parse e-mail structure */ function parsepart($p,$msgid,$i){ $part=imap_fetchbody($this->link,$msgid,$i); #Multipart if ($p->type!=0){ #if base64 if ($p->encoding==3)$part=base64_decode($part ); #if quoted printable if ($p->encoding==4)$part=quoted_printable_deco de($part); #If binary or 8bit -we no need to decode #body type (to do) switch($p->type) { case '5': # image $this->partsarray[$i][image] = array('filename'=>imag1,'string'=>$part, 'part_no'=>$i); break; } #Get attachment $filename=''; if (count($p->dparameters)>0){ foreach ($p->dparameters as $dparam){ if ((strtoupper($dparam->attribute)=='NAME') ||(strtoupper($dparam->attribute)=='FILENAME')) $filename=$dparam->value; } } #If no filename if ($filename==''){ if (count($p->parameters)>0){ foreach ($p->parameters as $param){ if ((strtoupper($param->attribute)=='NAME') ||(strtoupper($param->attribute)=='FILENAME')) $filename=$param->value; } } } if ($filename!='' ){ $this->partsarray[$i][attachment] = array('filename'=>$filename,'string'=>$p art, 'encoding'=>$p->encoding, 'part_no'=>$i,'type'=>$p->type,'subtype'=>$p->subtype); } #end if type!=0 } #Text email else if($p->type==0){ #decode text #if QUOTED-PRINTABLE if ($p->encoding==4) $part=quoted_printable_decode($part); #if base_64 if ($p->encoding==3) $part=base64_decode($part); #if plain text if (strtoupper($p->subtype)=='PLAIN')1; #if HTML else if (strtoupper($p->subtype)=='HTML')1; $this->partsarray[$i][text] = array('type'=>$p->subtype,'string'=>$part); } #if subparts if (count($p->parts)>0){ foreach ($p->parts as $pno=>$parr){ $this->parsepart($parr,$this->msgid,($i.'.'.($pno+1))); } } return; } /** All email headers */ function email_headers(){ #$headers=imap_headers($this->link); if($this->max_headers == 'max'){ $headers = imap_fetch_overview($this->link, "1:".$this->num_message(), 0); } else { $headers = imap_fetch_overview($this->link, "1:$this->max_headers", 0); } if($this->max_headers == 'max') { $num_headers = count($headers); } else { $count = count($headers); if($this->max_headers >= $count){ $num_headers = $count; } else { $num_headers = $this->max_headers; } } $size=sizeof($headers); for($i=1; $i<=$size; $i++){ $val=$headers[$i]; //while (list($key, $val) = each($headers)){ $subject_s = (empty($val->subject)) ? '[No subject]' : $val->subject; $lp = $lp +1; imap_setflag_full($this->link,imap_uid($this->link,$i),'\\SEEN',SE_UID); $header=imap_headerinfo($this->link, $i, 80,80); if($val->seen == "0" && $val->recent == "0") {echo '<b>'.$val->msgno . '-' . $subject_s . '-' . $val->from .'-'. $val->date."</b><br><hr>" ;} else {echo $val->msgno . '-' . $subject_s . '-' . $val->from .'-'. $val->date."<br><hr>" ;} } } /** Get email */ function email_get(){ $email = array(); $this->set_filestore(); $header=imap_headerinfo($this->link, $this->msgid, 80,80); $from = $header->from; $udate= $header->udate; $to = $header->to; $size = $header->Size; if ($header->Unseen == "U" || $header->Recent == "N") { #Check is it multipart messsage $s = imap_fetchstructure($this->link,$this->msgid); if (count($s->parts)>0){ foreach ($s->parts as $partno=>$partarr){ #parse parts of email $this->parsepart($partarr,$this->msgid,$partno+1); } } else { #for not multipart messages #get body of message $text=imap_body($this->link,$this->msgid); #decode if quoted-printable if ($s->encoding==4) $text=quoted_printable_decode($text); if (strtoupper($s->subtype)=='PLAIN') $text=$text; if (strtoupper($s->subtype)=='HTML') $text=$text; $this->partsarray['not multipart'][text]=array('type'=>$s->subtype,'string'=>$text); } if(is_array($from)){ foreach ($from as $id => $object) { $fromname = $object->personal; $fromaddress = $object->mailbox . "@" . $object->host; } } if(is_array($to)){ foreach ($from as $id => $object) { $toaddress = $object->mailbox . "@" . $object->host; } } $email['CHARSET'] = $charset; $email['SUBJECT'] = $this->mimie_text_decode($header->Subject); $email['FROM_NAME'] = $this->mimie_text_decode($fromname); $email['FROM_EMAIL'] = $fromaddress; $email['TO_EMAIL'] = $toaddress; $email['DATE'] = date("Y-m-d H:i:s",strtotime($header->date)); $email['SIZE'] = $size; #SECTION - FLAGS $email['FLAG_RECENT'] = $header->Recent; $email['FLAG_UNSEEN'] = $header->Unseen; $email['FLAG_ANSWERED']= $header->Answered; $email['FLAG_DELETED'] = $header->Deleted; $email['FLAG_DRAFT'] = $header->Draft; $email['FLAG_FLAGGED'] = $header->Flagged; } return $email; } function mimie_text_decode($string){ $string = htmlspecialchars(chop($string)); $elements = imap_mime_header_decode($string); if(is_array($elements)){ for ($i=0; $i<count($elements); $i++) { $charset = $elements[$i]->charset; $txt .= $elements[$i]->text; } } else { $txt = $string; } if($txt == ''){ $txt = 'No_name'; } if($charset == 'us-ascii'){ //$txt = $this->charset_decode_us_ascii ($txt); } return $txt; } /** Save messages on local disc */ function save_files($filename, $part){ $fp=fopen($this->filestore.$filename,"w+"); fwrite($fp,$part); fclose($fp); chown($this->filestore.$filename, 'apache'); } /** Set flags */ function email_setflag(){ imap_setflag_full($this->link, "2,5","\\Seen \\Flagged"); } /** Mark a message for deletion */ function email_delete(){ imap_delete($this->link, $this->msgid); } /** Delete marked messages */ function email_expunge(){ imap_expunge($this->link); } /** Close IMAP connection */ function close(){ imap_close($this->link); } function listmailbox(){ $list = imap_list($this->link, "{".$this->IMAP_host."}", "*"); if (is_array($list)) { return $list; } else { $this->error = "imap_list failed: " . imap_last_error() . "\n"; } return array(); } /** SPAM DETECTION */ function spam_detect(){ $email = array(); $id = $this->newid; #ID email in DB $execute = mysql_query("SELECT ID, IDEmail, EmailFrom, EmailFromP, EmailTo, Subject, Message, Message_html FROM emailtodb_email WHERE ID='".$id."'"); $row = mysql_fetch_array($execute); $ID = $row['ID']; $email['Email'] = $row['EmailFrom']; $email['Subject'] = $row['Subject']; $email['Text'] = $row['Message']; $email['Text_HTML'] = $row['Message_html']; if($this->check_blacklist($email['Email'])){ $this->update_folder($id, $this->spam_folder); } if($this->check_words($email['Subject'])){ $this->update_folder($id, $this->spam_folder); } if($this->check_words($email['Text'])){ $this->update_folder($id, $this->spam_folder); } if($this->check_words($email['Text_HTML'])){ $this->update_folder($id, $this->spam_folder); } } function check_blacklist($email){ #spam - emails $execute = mysql_query("SELECT Email FROM emailtodb_list WHERE Email='".addslashes($email)."' AND Type='B'"); $row = mysql_fetch_array($execute); $e_mail = $row['Email']; if($e_mail == $email){ return 1; } else { return 0; } } function check_words($string){ #spam - words $string = strtolower($string); $execute = mysql_query("SELECT Word FROM emailtodb_words "); while($row = mysql_fetch_array($execute)){ $word = strtolower($row['Word']); if (eregi($word, $string)) { return 1; } } }
0
|
|
| 25.01.2015, 21:09 | |
|
Ответы с готовыми решениями:
4
Портятся файлы при загрузке на сервер Почему сервер не отдает файлы .png при загрузке страницы |
|
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
|
|
| 25.01.2015, 21:10 [ТС] | |
|
// и окончание скрипта:
/*** DB FUNCTIONS *****************************/ /** Add email to DB */ function db_add_message($email){ $execute = mysql_query("INSERT INTO emailtodb_email (IDEmail, EmailFrom, EmailFromP, EmailTo, DateE, DateDb, Subject, MsgSize) VALUES ('".$message_id."', '".$email['FROM_EMAIL']."', '".addslashes(strip_tags($email['FROM_NAME']))."', '".addslashes(strip_tags($email['TO_EMAIL']))."', '".$email['DATE']."', '".date("Y-m-d H:i:s")."', '".addslashes($email['SUBJECT'])."', '".$email["SIZE"]."')"); $execute = mysql_query("select LAST_INSERT_ID() as UID"); $row = mysql_fetch_array($execute); $this->newid = $row["UID"]; } /** Add attachments to DB */ function db_add_attach($file_orig, $filename){ $execute = mysql_query("INSERT INTO emailtodb_attach (IDEmail, FileNameOrg, Filename) VALUES ('".$this->newid."', '".addslashes($file_orig)."', '".addslashes($filename)."')"); } /** Add email to DB */ function db_update_message($msg, $type= 'PLAIN'){ if($type == 'PLAIN') $execute = mysql_query("UPDATE emailtodb_email SET Message='".addslashes($msg)."' WHERE ID= '".$this->newid."'"); if($type == 'HTML') $execute = mysql_query("UPDATE emailtodb_email SET Message_html='".addslashes($msg)."' WHERE ID= '".$this->newid."'"); } /** Insert progress log */ function add_db_log($email, $info){ $execute = mysql_query("INSERT INTO emailtodb_log (IDemail, Email, Info, FSize, Date_start, Status) VALUES ('".$this->newid."', '".$email['FROM_EMAIL']."', '".addslashes(strip_tags($info))."', '".$email["SIZE"]."', '".date("Y-m-d H:i:s")."', '2')"); $execute = mysql_query("select LAST_INSERT_ID() as UID"); $row = mysql_fetch_array($execute); $this->logid = $row['UID']; return $this->logid; } /** Set folder */ function update_folder($id, $folder){ $execute = mysql_query("UPDATE emailtodb_email SET Type = '".addslashes($folder)."' WHERE ID = '".$id."'"); } /** Update progress log */ function update_db_log($info, $id){ $execute = mysql_query("UPDATE emailtodb_log SET Status = '1', Info='".addslashes(strip_tags($info))."' , Date_finish = '".date("Y-m-d H:i:s")."' WHERE IDlog = '".$id."'"); } /** Read log from DB */ function db_read_log(){ $email = array(); $execute = mysql_query("SELECT IDlog, IDemail, Email, Info, FSize, Date_start, Date_finish, Status FROM emailtodb_log ORDER BY Date_finish DESC LIMIT 100"); while($row = mysql_fetch_array($execute)){ $ID = $row['IDlog']; $email[$ID]['IDemail'] = $row['IDemail']; $email[$ID]['Email'] = $row['Email']; $email[$ID]['Info'] = $row['Info']; $email[$ID]['Size'] = $row['FSize']; $email[$ID]['Date_start'] = $row['Date_start']; $email[$ID]['Date_finish'] = $row['Date_finish']; } return $email; } /** Read emails from DB */ function db_read_emails(){ if (!isset($db)) $db = new DB_WL; $email = array(); $execute = mysql_query("SELECT ID, IDEmail, EmailFrom, EmailFromP, EmailTo, DateE, DateDb, Subject, Message, Message_html, MsgSize FROM emailtodb_email ORDER BY ID DESC LIMIT 25"); while($row = mysql_fetch_array($execute)){ $ID = $row['ID']; $email[$ID]['Email'] = $row['EmailFrom']; $email[$ID]['EmailName'] = $row['EmailFrom']; $email[$ID]['Subject'] = $row['Subject']; $email[$ID]['Date'] = $row['DateE']; $email[$ID]['Size'] = $row['MsgSize']; } return $email; } function dir_name() { $year = date('Y'); $month = date('m'); $dir_n = $year . "_" . $month; echo $this->set_path(); if (is_dir($this->set_path() . $dir_n)) { return $dir_n . '/'; } else { mkdir($this->set_path() . $dir_n, 0777); return $dir_n . '/'; } } function do_action(){ if($this->num_message() >= 1) { if($this->msgid <= 0) { $this->msgid = 1; } else { $this->msgid = $_GET[msgid] + 1; } #Get first message $email = $this->email_get(); #Get store dir $dir = $this->dir_name(); #Insert message to db $ismsgdb = $this->db_add_message($email); $id_log = $this->add_db_log($email, 'Copy e-mail - start '); foreach($this->partsarray as $part){ if($part[text][type] == 'HTML'){ #$message_HTML = $part[text][string]; $this->db_update_message($part[text][string], $type= 'HTML'); }elseif($part[text][type] == 'PLAIN'){ $message_PLAIN = $part[text][string]; $this->db_update_message($part[text][string], $type= 'PLAIN'); }elseif($part[attachment]){ #Save files(attachments) on local disc // $message_ATTACH[] = $part[attachment]; foreach(array($part[attachment]) as $attach){ $attach[filename] = $this->mimie_text_decode($attach[filename]); $attach[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $attach[filename]); $this->add_db_log($email, 'Start coping file:"'.strip_tags($attach[filename]).'"'); $this->save_files($this->newid.$attach[filename], $attach[string]); $filename = $dir.$this->newid.$attach[filename]; $this->db_add_attach($attach[filename], $filename); $this->update_db_log('<b>'.$filename.'</b>Finish coping: "'.strip_tags($attach[filename]).'"', $this->logid); } // }elseif($part[image]){ #Save files(attachments) on local disc $message_IMAGE[] = $part[image]; foreach($message_IMAGE as $image){ $image[filename] = $this->mimie_text_decode($image[filename]); $image[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $image[filename]); $this->add_db_log($email, 'Start coping file: "'.strip_tags($image[filename]).'"'); $this->save_files($this->newid.$image[filename], $image[string]); $filename = $dir.$this->newid.$image[filename]; $this->db_add_attach($image[filename], $filename); $this->update_db_log('<b>'.$filename.'</b>Finish coping:"'.strip_tags($image[filename]).'"', $this->logid); } } } $this->spam_detect(); $this->email_setflag(); $this->email_delete(); $this->email_expunge(); $this->update_db_log('Finish coping', $id_log); if($email <> ''){ unset($this->partsarray); # echo "<meta http-equiv=\"refresh\" content=\"2; url=email.monitor.mail.php?msgid=".$this->msgid."\">"; if($this->mode == 'html') { echo "<meta http-equiv=\"refresh\" content=\"2; url=".$this->this_file_name."?msgid=0\">"; echo "E-mail extract"; } } } else { # No messages if($this->mode == 'html') { echo "<meta http-equiv=\"refresh\" content=\"10; url=".$this->this_file_name."?msgid=0\">"; echo "E-mail extract"; } } } }#end class ?>
0
|
|
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
|
| 25.01.2015, 21:50 | |
|
оформите код...читать невыносимо
0
|
|
|
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
|
|
| 26.01.2015, 05:35 [ТС] | |
|
Вот файл с исходником
0
|
|
|
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
|
|||||||||||
| 26.01.2015, 07:51 | |||||||||||
|
Ну и простынь.
попробуй поменяй
0
|
|||||||||||
| 26.01.2015, 07:51 | |
|
Помогаю со студенческими работами здесь
5
Ошибка при загрузке изображения на сервер Название файла при загрузке на сервер Потеря данных при загрузке на сервер
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|