X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Прием email
Scream_mw
Scream_mw
Topic Starter сообщение 13.3.2010, 4:05; Ответить: Scream_mw
Сообщение #1


sc2r2bey создал тему об отправке мыла средствами php а мне стало интересно - можно ли принимать?
Вот нашел код для реализации подобной задачи но в 10 строке возникла ошибка... помогите разобраться!
[php]<?
$pop_conn = fsockopen("pop3.yandex.ru", 110,$errno, $errstr, 10);
$code=fgets($pop_conn,1024);
fputs($pop_conn,"USER myname\r\n");
$code= fgets($pop_conn,1024);
fputs($pop_conn,"PASS password\r\n");
$code= fgets($pop_conn,1024);

fputs($pop_conn,"RETR 1\r\n");
$text.= get_data($pop_conn);
// в переменной $text сейчас все письмо вместе с заголовками.

// разделяем письмо на заголовки и тело, еще раз советую почитать Почтовый стандарт "MIME" (RFC1521) (http://webi.ru/webi_files/26_15_f.html)
$struct=fetch_structure($text);

// теперь раскладываем заголовки по полочкам
// и получаем удобный ассоциативный массив с удобным обращением к любому заголовку.
// например $mass_header['subject'] == "=?windows-1251?B?7/Do4uXy?="
$mass_header=decode_header($struct['header']);

// чтобы воспользоваться заголовком, который может содержать не латинские символы
// например тема письма, нужно прогнать заголовок через функцию декодирования.
$mass_header["subject"] = decode_mime_string($mass_header["subject"]);
// теперь можно использовать тему, теперь тут обычный читаемый текст

// Сейчас разберем заголовок Content-Type, это тип содержимого. Определим, что в письме, только текст или еще и файлы.
// Content-Type: text/plain; charset=Windows-1251 это обычное текстовое письмо
// Content-Type: multipart/mixed; boundary="_----------=_118224799143839" это составное письмо из нескольких частей, с вложенными файлами.
$type = $ctype = $mass_header['content-type'];
$ctype = split(";",$ctype);
$types = split("/",$ctype[0]);
$maintype = trim(strtolower($types[0])); // text или multipart
$subtype = trim(strtolower($types[1])); // а это подтип(plain, html, mixed)

// сейчас проверяем тип содержимого письма
// Если это обычное текстовое содержимое (текст или html) без вложений
if($maintype=="text")
{
// $subtype можно использовать эту переменную для определения текстовое письмо или html
// эту проверку можете поставить сами
// Передаем тело письма в функцию, на перекодирование. И так же посылаем заголовки, информирующие о том, как было закодировано письмо.
$body = compile_body($struct['body'],$mass_header["content-transfer-encoding"],$mass_header["content-type"]);
print $body;
}

// теперь рассмотрим вариант, если письмо имеет несколько разных частей.
// тут рассматриваю подтипы signed,mixed,related, но есть еще подтип alternative, который служит для альтернативного отображения письма.
// например, письмо в html и к нему же можно добавить альтернативное текстовое содержание.
// подробнее читайте про этот подтип в Почтовом стандарте "MIME" (RFC1521) (http://webi.ru/webi_files/26_15_f.html)
elseif($maintype=="multipart" and ereg($subtype,"signed,mixed,related"))
{
// получаем метку-разделитель частей письма
$boundary=get_boundary($mass_header['content-type']);

// на основе этого разделителя разбиваем письмо на части
$part = split_parts($boundary,$struct['body']);

// теперь обрабатываем каждую часть письма
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"]);
$types = split("/",$Actype[0]);
$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;
}

// если это html
elseif($rctype == "text/html" && !$is_download) {
$body = compile_body($body,$headers["content-transfer-encoding"],$headers["content-type"]);
print $body;
}

// и наконец, если это файл
elseif($is_download) {

// Имя файла можно выдернуть из заголовков Content-Type или Content-Disposition
$cdisp = $headers["content-disposition"];
$ctype = $headers["content-type"];
$ctype2 = explode(";",$ctype);
$ctype2 = $ctype2[0];
$Atype = split("/",$ctype);
$Acdisp = split(";",$cdisp);
$fname = $Acdisp[1];
if(ereg("filename=(.*)",$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));

// теперь читаем файл в переменную.
$body = compile_body($body,$headers["content-transfer-encoding"],$ctype);
// содержимое файла теперь в переменной $body и сейчас можно отдать содержимое файла в браузер или например сохранить на диске
$ft=fopen($filename,"wb");
fwrite($ft,$body);
fclose($ft);
}
}
}
?>[/php]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 13.3.2010, 4:19; Ответить: gaaarfild
Сообщение #2


Убери точку перед равно. Это, скорее всего, не ошибка, а предупреждение. Ибо этосимвол конкатенации(склеивания), но он здесь явно ни к чему. Нет ни цикла, ни заранее заданной этой переменной, чтобы ее дополнить. И соответственно, раз переменная определяется впервые, то приклеивать ее не к чему, вот PHP и предупреждает об этом, но код выполняет.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
сообщение 13.3.2010, 11:39; Ответить: yury_mw
Сообщение #3


(Scream @ 13.3.2010, 3:05) *
Вот нашел код для реализации подобной задачи но в 10 строке возникла ошибка... помогите разобраться!

Scream, вообще-то сообщенные об ошибке следовало бы процитировать.
А по сути: в вашем коде не описана функция get_data(), о чем ругательство скорее всего и сообщает примерно так:
Fatal error: Call to undefined function get_data() in index.php on line 10

перевод на человеческий язык:
"Неустранимая ошибка: Вызов неизвестной функции get_data() на 10й строке файла index.php"
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Scream_mw
Scream_mw
Topic Starter сообщение 13.3.2010, 11:50; Ответить: Scream_mw
Сообщение #4


yury, именно она.
Fatal error: Call to undefined function get_data() in /home/.../read.php on line 10

gaaarfild, все равно ошибка.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 13.3.2010, 12:31; Ответить: sc2r2bey
Сообщение #5


get_data - а резве есть такая функция?


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
сообщение 13.3.2010, 12:42; Ответить: yury_mw
Сообщение #6


(Scream @ 13.3.2010, 10:50) *
именно она.
Fatal error: Call to undefined function get_data() in /home/.../read.php on line 10

Scream,
ну так исправляйте эту ошибку.
Т.е. необходимо эту функцию описать, примерно так:
[php]function get_data($arg)
{
//куча кода, в котором описывается то, что должна делать функция get_data()
}[/php]тогда php будет доволен и ругаться перестанет. :P
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 13.3.2010, 13:10; Ответить: sc2r2bey
Сообщение #7


я ж про что и говорю
надо смотреть 10 строку этого файла и 9 с 11 :P


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 14.3.2010, 0:23; Ответить: ZiTosS
Сообщение #8


Scream, смешно... Самая важная функция получения данных и не описана.
Значит вы не весь код получили. Стандартной функции get_data() нету, она должна быть определена.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 14.3.2010, 0:27; Ответить: gaaarfild
Сообщение #9


Там где скачали, ругнитесь, что фуфло толкают! =)

Присоедините все php-файлы, которые идут с этим скриптом.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Scream_mw
Scream_mw
Topic Starter сообщение 14.3.2010, 11:04; Ответить: Scream_mw
Сообщение #10


Проблема в том что я не помню где качал это и код там на странице просто был написан так что ни каких прилагающихся фалов тоже не было.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыBurzh.top|Партнерская программа под любой вид трафика (email, спам, УБТ)
2 cryptius 766 16.4.2024, 17:50
автор: cryptius
Горячая тема (нет новых ответов) CryptoCloud — прием USDT, BTC, ETH, LTC на любом сайте
36 CryptoCLoud 10652 16.4.2024, 16:02
автор: CryptoCLoud
Открытая тема (нет новых ответов) Прием платежей онлайн c Paykassma | Процессинг платежей с 2019 | Платежный шлюз | Merchant Accounts ✅✅✅
0 paykassma 447 16.4.2024, 13:45
автор: paykassma
Горячая тема (нет новых ответов) Betatransfer.net - прием платежей для HIGH RISK проектов, интернет эквайринг и мерчант онлайн оплат
54 arendator 34880 15.4.2024, 15:16
автор: arendator
Горячая тема (нет новых ответов) Где лучше зарегистрировать email?
104 MorKer 13736 29.2.2024, 23:45
автор: bestx24


 



RSS Текстовая версия Сейчас: 23.4.2024, 12:40
Дизайн