Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
den_ZiG
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 2
1

Работа с почтовым сервером

20.01.2011, 14:21. Просмотров 1750. Ответов 1
Метки нет (Все метки)

Здравствуйте ,есть скрипт который подклчается к почтовому серверу просматриваетписьмо и если есть вложения в письме , то сохраняет его .... , все работает , но определенного момента т.е папку для сохранения вложения создает, а сохранять ничего не сохраняет ....
помогите пожалуйста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<? 
include("function.php");
$pop_conn = fsockopen("pop.mail.ru", 110,$errno, $errstr, 10);
print fgets($pop_conn,1024); 
fputs($pop_conn,"USER *****\r\n"); // логин юзера
print fgets($pop_conn,1024); 
fputs($pop_conn,"PASS *****\r\n"); // пароль юзера
print fgets($pop_conn,1024);
 
fputs($pop_conn,"STAT\r\n");
$count = fgets($pop_conn,1024);
$count = explode(' ',$count); //разбивает строку на подстроки
$count = $count[1];
                print_r ($count[1]);
echo "1";
for ($j=1;$j<=$count;$j++) 
    {
        //$text=0;
        $number = "$j";
 
        if (file_exists("$number")) // проверка папки 
        {
            echo "exists <br/>";
        }
        else
        {    
            mkdir("$number");
 
            echo "$number <br/>";
            fputs($pop_conn,"RETR ".$number."\r\n");// чтение письма
            $text.= get_data($pop_conn);
 
            $struct=fetch_structure($text); //функция возвращает заголовки и тело письма
            $mass_header=decode_header($struct['header']);//разбирает все заголовки и выводит массив, в котором каждый элемент является соответсвующим заголовком
        /*  echo "<br>"; // выводит заголовки
            print_r ($mass_header);*/
            $mass_header["subject"] = decode_mime_string($mass_header["subject"]);//кодировка письма
            $type = $ctype = $mass_header['content-type'];
            $ctype = split(";",$ctype); //split делает из строки массив с помощью регулярного выражения.
 
            $types = split("/",$ctype[0]);//split делает из строки массив с помощью регулярного выражения.
            $maintype = trim(strtolower($types[0])); //удаляет пробелы с начало и конца строки
            $subtype = trim(strtolower($types[1])); 
//print_r ($types);
//print_r ($subtype);           
print_r ($mass_header);
            if($maintype=="multipart" and ereg($subtype,"signed,mixed,related"))
            {
                $boundary=get_boundary($mass_header['content-type']);
 
                $part = split_parts($boundary,$struct['body']); // если письмо будет состоять из нескольких частей (текст, файлы и т.д.)
// то эта функция разобьет такое письмо на части (в массив), согласно разделителю boundary
 
                for($i=0;$i<count($part);$i++) 
                {
 
                    $email = fetch_structure($part[$i]);
                    $header = $email["header"];
                    $body = $email["body"];
                    $headers = decode_header($header);
                    $ctype = $headers["content-type"];
                    $cid = $headers["content-id"];
                    $Actype = split(";",$headers["content-type"]);//split делает из строки массив с помощью регулярного выражения.
                    $types = split("/",$Actype[0]);//split делает из строки массив с помощью регулярного выражения.
                    $rctype = strtolower($Actype[0]);
 
                    $is_download = (ereg("name=",$headers["content-disposition"].$headers["content-type"]) || $headers["content-id"] != "" || $rctype == "message/rfc822");
                    if($rctype == "text/plain" && !$is_download) 
                    {
                        $body = compile_body($body,$headers["content-transfer-encoding"],$headers["content-type"]);
                        print $body;
                    }
 
                    elseif($rctype == "text/html" && !$is_download) 
                    {
                        $body = compile_body($body,$headers["content-transfer-encoding"],$headers["content-type"]);
                        print $body;
                    }
                    elseif($is_download) 
                    {
                        $cdisp = $headers["content-disposition"];
                        $ctype = $headers["content-type"];
                        $ctype2 = explode(";",$ctype);
                        $ctype2 = $ctype2[0];
                        $Atype = split("/",$ctype);//split делает из строки массив с помощью регулярного выражения.
                        $Acdisp = split(";",$ctype);//split делает из строки массив с помощью регулярного выражения.
                        $fname = $Acdisp[1];
                        if(ereg("name=(.*)",$fname,$regs))
                        $filename = $regs[1];
                        if($filename == "" && ereg("name=(.*)",$ctype,$regs))
                        $filename = $regs[1];
                        $filename = ereg_replace("\"(.*)\"","\\1",$filename);
                        $filename = trim(decode_mime_string($filename));
                        $ext = explode('.',$filename);
                        $ext = $ext[1];
                        if ($ext=='xls') 
                        {
                            $body = compile_body($body,$headers["content-transfer-encoding"],$ctype2);
                            $ft=fopen("$number/$filename","wb");
                            fwrite($ft,$body);
                            fclose($ft);
                            
                        }
 
                            $ext = explode('.',$filename);
                            $ext = $ext[1];
 
                        if ($ext=='xls') 
                        {
                            $objPHPExcel = PHPExcel_IOFactory::load("$number/$filename");
                            $objPHPExcel->setActiveSheetIndex(0);
                            $aSheet = $objPHPExcel->getActiveSheet();
                            $aSheet->getRowDimension('1')->setVisible(false);
                            $aSheet->getRowDimension('2')->setVisible(false);
                            $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
                            $objWriter->save("$number/$filename"); 
 
                        }
                    }
                }
            }
            
            //fputs($pop_conn,"QUIT\r\n");
        }
    }
 
?>
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 14:21
Ответы с готовыми решениями:

Работа с почтовым сервером (создание/удаление ящика, фильтрация)
Здравствуйте! Скажите пожалуйста, каким образом через PHP можно производить следующие действия:...

Работа с сервером Sambar???
У меня такой вопрос (работаю с Sambar) Я создал 2 файла form.html &lt;html&gt; &lt;head&gt; &lt;title&gt;...

Скрипты для работы с почтовым ящиком на пхп
есть у кого то инфа или скрипты для работы с почтовым ящиком на пхп надо скриптом извлекать...

Работа с удаленным сервером.
Всем форумчанам привет. Ребята, подскажите, пожалуйста, кто знает, как можно реализовать 2 вещи....

Занести в таблицу массив элементов с 0 по 5, далее с 6 по 9, т.е., поле с почтовым ящиком уникально
Здравствуйте! Подскажите пожалуйста как это реализовать? Есть массив элементов: 0 -&gt;...

1
LinelWorld
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171
21.01.2011, 09:21 2
Давайте начнем с того, что код нужно форматировать, для более удобного прочтения. Это во-первых, а во-вторых, зачем вы нам показываете весь скрипт? Он весь содержит ошибки? В таком случае, его проще переписать сначала - это будет проще и быстрее. В противном случае, выложите ту часть кода, которая может содержать ошибки. Поймите, что никто не будет рыться в большом коде, гоняясь за призрачной ошибкой. Тем более, что код оформлен так: тут читаем, тут не читаем, тут рыбу заворачиваем.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2011, 09:21

Работа с почтовым сервером
Почтовый сервер не отвечает на команду &quot;HELO&quot; после того как произошел коннект ...

Проблема с почтовым сервером на FreeBSD
Народ, подскажите плиз, такая проблемка, проблема с почтовым ящиком пользователя, пришел на фирму...

Безопасность соединения с почтовым сервером.
Установил почтовый клиент Thunderbird для работы с почтовым ящиком на mail.ru. Подключиться к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.