Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

[PHP] Отправка почты с вложениями

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> [PHP] Отправка почты с вложениями
Имя
Сообщение << Старые топики   Новые топики >>
[PHP] Отправка почты с вложениями - 2009-01-10 12:19:19.780000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Простой пример отправки файлов по почте.
Требование к хостингу: должен быть установлен sendmail.
&lt;?php if($_POST) { $message = ''; foreach ( $_POST as $key =&gt; $value ) $message .= "[" . $key . "] =&gt; " . $value."\n"; $un = strtoupper(uniqid(time())); $head = "Mime-Version: 1.0\n"; $head .= "Content-Type:multipart/mixed;"; $head .= "boundary=\"----------".$un."\"\n\n"; $body = "------------".$un."\nContent-Type:text/html;\n"; $body .= "Content-Transfer-Encoding: 8bit\n\n".$message."\n\n"; foreach($_FILES as $value) { $body .= "------------".$un."\n"; $body .= "Content-Type: ".$value['type'].";"; $body .= "name=\"".basename($value['name'])."\"\n"; $body .= "Content-Transfer-Encoding:base64\n"; $body .= "Content-Disposition:attachment;"; $body .= "filename=\"".basename($value['name'])."\"\n\n"; $body .= chunk_split(base64_encode(file_get_contents($value['tmp_name'])))."\n"; } mail( $_POST['emails'], 'Сообщение с сайта.', $body, $head ); } ?&gt; &lt;form action="" method="post" ENCTYPE="multipart/form-data"&gt; &lt;table border="0" cellspacing="0" cellpadding="0" id="cont_form"&gt; &lt;tr&gt; &lt;td valign="top" style="padding-right:15px;"&gt;&lt;span&gt;Emails:&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;input value="" name="emails" type="text" size="47"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" style="padding-right:15px;"&gt;&lt;span&gt;Field 1:&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;input value="" name="field1" type="text" size="47"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" style="padding-right:15px;"&gt;&lt;span&gt;Field 2:&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;input value="" name="field2" type="text" size="47"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" style="padding-right:15px;"&gt;&lt;span&gt;File 1:&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;input name="file1" type="file"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" style="padding-right:15px;"&gt;&lt;span&gt;File 2:&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;input name="file2" type="file"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;input type="submit" value="Отправить"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/form&gt;
Post #: 1
RE: [PHP] Отправка почты с вложениями - 2009-01-10 14:10:14.203333   
Alexey1993

Сообщений: 69
Оценки: 0
Присоединился: 2008-11-10 23:18:34.996666
Эта штука тоже оч. нравится мне но только она на мой взгляд не завершена.Когда я её засунул на хостинг и начал слать файлы она слала  от Nobody (тоесть от адреса который у хостинга по умолчанию если не указан другой адрес вот так:От кого:Nobody <nobody@srv13.000webhost.com>)К тому же не сразу понял что такое field1 и field2
а так пригодится.
Post #: 2
RE: [PHP] Отправка почты с вложениями - 2009-01-10 14:30:54.353333   
Cep}|{

Сообщений: 1396
Оценки: 0
Присоединился: 2007-06-26 01:11:51.416666
Надо в заголовки добавить поле "From"
 $head   .= "From: mail@mail.ru\n";

Post #: 3
RE: [PHP] Отправка почты с вложениями - 2009-01-14 17:31:38.076666   
azimzaim

Сообщений: 320
Оценки: 0
Присоединился: 2009-01-04 22:14:32.760000
а в чем собственно вопрос?
Post #: 4
RE: [PHP] Отправка почты с вложениями - 2009-01-14 19:57:18.600000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
quote:

Простой пример отправки файлов по почте.

или это не по феншую?
Post #: 5
RE: [PHP] Отправка почты с вложениями - 2009-01-14 22:34:15.623333   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
у тебя всё всегда по феншую. Пусть сделают круче, а мы рассмотрим
Post #: 6
RE: [PHP] Отправка почты с вложениями - 2009-01-14 23:18:50.596666   
koro

Сообщений: 977
Оценки: 0
Присоединился: 2008-08-08 09:39:07.460000
Выложу и свои наработки, может кому пригодится =)
function mail_($to,$from,$subject,$message,$file_name) {&nbsp;&nbsp; &nbsp;$fp=fopen($file_name,"r"); &nbsp;&nbsp; &nbsp;if(!fp) &nbsp;&nbsp; &nbsp;{&nbsp;&nbsp; &nbsp;print "&lt;center&gt;&lt;b&gt;Извините, сервер временно не отправляет письма, попробуйте позже.&lt;/b&gt;&lt;/center&gt;"; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;exit(); &nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;$file=fread($fp, filesize($file_name)); &nbsp;&nbsp; &nbsp;fclose($fp); &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; $bound="--".md5(uniqid(time())); //разделитель &nbsp;&nbsp;&nbsp; $head="MIME-Version: 1.0\n"; &nbsp;&nbsp;&nbsp; $head.="Content-Type: multipart/mixed; boundary=\"$bound\"\n"; &nbsp;&nbsp;&nbsp; $multipart="--$bound\n"; &nbsp;&nbsp;&nbsp; $kod='windows-1251'; &nbsp;&nbsp;&nbsp; $multipart.="Content-Type: text/html; charset=$kod\n"; &nbsp;&nbsp;&nbsp; $multipart.="Content-Transfer-Encoding: Quot-Printed\n\n"; &nbsp;&nbsp;&nbsp; $multipart.="$message\n\n"; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $Oo="--$bound\n"; &nbsp;&nbsp;&nbsp; $Oo.="Content-Type: application/octet-stream\n"; &nbsp;&nbsp;&nbsp; $Oo.="Content-Transfer-Encoding: base64\n"; &nbsp;&nbsp;&nbsp; $Oo.="Content-Disposition: attachment; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; filename=\"".$file_name."\"\n\n"; &nbsp;&nbsp;&nbsp; $Oo.=chunk_split(base64_encode($file))."\n"; &nbsp;&nbsp;&nbsp; $multipart.=$Oo."--$bound--\n"; &nbsp;&nbsp;&nbsp; if(!mail($to,$from,$multipart,$head)) &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; print "&lt;center&gt;&lt;b&gt;Извините, сервер временно не отправляет письма, попробуйте позже.&lt;/b&gt; &lt;/center&gt;"; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; exit(); &nbsp;&nbsp;&nbsp; } }; //Файл заливаю так: &nbsp;&nbsp;&nbsp; $path=@$_FILES['ank']['name']; &nbsp;&nbsp;&nbsp; if(copy(@$_FILES['ank']['tmp_name'], $path))&nbsp;&nbsp;&nbsp; $file=$path; &nbsp;&nbsp;&nbsp; mail_($to,$from,$subject,$message,$path); //Проверки, формы ввода, заливки файла и тд. не привожу, кому надо разберётся =)
Post #: 7
RE: [PHP] Отправка почты с вложениями - 2009-01-14 23:38:10.563333   
FriLL

Сообщений: 2539
Оценки: 335
Присоединился: 2007-08-11 17:14:26.703333
а вот и вариант с интефейсом
http://forum.xakep.ru/m_1346050/tm.htm
Post #: 8
RE: [PHP] Отправка почты с вложениями - 2009-01-14 23:48:26.496666   
koro

Сообщений: 977
Оценки: 0
Присоединился: 2008-08-08 09:39:07.460000
quote:

ORIGINAL: FriLL

а вот и вариант с интефейсом
http://forum.xakep.ru/m_1346050/tm.htm

только файло не отправляет. так, чтобы понять в чём суть работы)
quote:

как совет хочу сказать что не стоит отсылать много писем тк это может привести к тому что скрипт прекратит работу из за окончания времени действия скрипта

set_time_limit()

Post #: 9
RE: [PHP] Отправка почты с вложениями - 2009-11-19 10:12:27.863333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Тут надо было на питоне организовать подобное, без использования smtplib.
Немного говнокода:
#!/usr/bin/python from string import atoi import re import getpass import sys import socket import base64 import hashlib import os server = raw_input("SMTP server: "); regex = re.compile("(.*):(\d+)$") match = regex.search(server) if match: server = match.group(1) port = atoi(match.group(2)) else: port = raw_input("SMTP port: "); sock = None try: for res in socket.getaddrinfo(server, port, 0, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res try: sock = socket.socket(af, socktype, proto) sock.connect(sa) except: if sock: sock.close() sock = None continue break if not sock: sys.stderr.write("Can't connect to "+server+"\n") exit(0); except: sys.stderr.write("Can't resolve server name\n") exit(0); def checkerror(str): tmp = str.split() if tmp[0][0] == "5": sys.stderr.write("ERROR: %s\n" % str) exit(0) file = sock.makefile('rb') banner = file.readline() tmp = banner.split() sock.send("HELO %s\n" % tmp[1]) checkerror(file.readline()) sock.send("AUTH LOGIN\n") checkerror(file.readline()) sock.send(base64.b64encode(raw_input("User: "))+"\n") checkerror(file.readline()) sock.send(base64.b64encode(getpass.getpass())+"\n") checkerror(file.readline()) mail_from = raw_input("From: ") sock.send("MAIL FROM:&lt;%s&gt;\n" % mail_from) checkerror(file.readline()) sock.send("RCPT TO:&lt;%s&gt;\n" % raw_input("To: ")) checkerror(file.readline()) sock.send("DATA\n") checkerror(file.readline()) un = hashlib.md5() un.update('boundary') un = un.hexdigest() headers = "Mime-Version: 1.0\n" \ + "Content-Type:multipart/mixed;" \ + "From: " + mail_from + "\n" \ + "Subject: " + raw_input("Subject: ") + "\n" \ + "boundary=\"----------" + un + "\"\n\n" sock.send(headers) filename = raw_input("File: ") import StringIO output = StringIO.StringIO() try: fp = open(filename, 'r') except: sock.close() print "Can't open file\n" exit(-1) base64.encode(fp, output) body = "------------" + un +"\n" \ + "Content-Type: application/octet-stream;" \ + "name=\"" + os.path.basename(filename) +"\"\n" \ + "Content-Transfer-Encoding:base64\n" \ + "Content-Disposition:attachment;" \ + "filename=\"" + os.path.basename(filename) +"\"\n\n" \ + output.getvalue() +"\n" sock.send(body); sock.send(".\n") checkerror(file.readline()) sock.send("QUIT\n") checkerror(file.readline()) sock.close()
Post #: 10
RE: [PHP] Отправка почты с вложениями - 2009-11-24 14:06:45.943333   
Marinesku

Сообщений: 4
Оценки: 0
Присоединился: 2009-09-30 09:57:01.306666
Здравствуйте. Может быть я не в тему…
Когда вы пишите письмо с вложенным файлом, вы заполняете поля "кому", "тема", а также "вложить файл". Мне нужно заполнить эти поля автоматически, через WebBrowser в Delphi. Нет, не для отправки почты, это я для примера, чтобы понятно было о чём речь.
Так вот как заполнять обычне поля я знаю:
webbrowser1.oleobject.document.getelementbyid('идишник из веб кода'); или через name. А вот с полями типа "загрузить файл" проблемы. Запускаю экзешник - пишет "Method "getelementbyname" not supported by automation object".
Также если сможете, подскажите с полями, ну как они называются… ну короче как в Delphi ComboBox, и в вебе есть такие. Да взять хотя бы этот форум, в правом нижнем углу поле перейти" (если авторизировался). Такие как заполнять?
Post #: 11
RE: [PHP] Отправка почты с вложениями - 2009-11-24 15:50:14.990000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Marinesku, Задавайте подобные вопросы не тут, а здесь: http://forum.xakep.ru/forumid_302/tt.htm
Post #: 12
RE: [PHP] Отправка почты с вложениями - 2009-11-24 18:08:58.016666   
Smelo

Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
фу блин, а я ещё этот питон учить хотел.
Post #: 13
RE: [PHP] Отправка почты с вложениями - 2009-11-24 19:56:13.383333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000

quote:

ORIGINAL: Smelo

фу блин, а я ещё этот питон учить хотел.

Не стоит судить о языке по моему примеру. И что вас так отпугнуло?
Post #: 14
RE: [PHP] Отправка почты с вложениями - 2009-11-30 18:31:01.186666   
lit87

Сообщений: 13
Оценки: 0
Присоединился: 2009-11-23 20:15:36.443333
а слабо скачать класс для работы с почтой? и не париться
Post #: 15
RE: [PHP] Отправка почты с вложениями - 2009-11-30 22:19:32.876666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000

quote:

ORIGINAL: lit87

а слабо скачать класс для работы с почтой? и не париться

Если мне понадобится готовый класс, я его возьму из PEAR, а не како-то левый класс с непонятного говноресурса.
Post #: 16
RE: [PHP] Отправка почты с вложениями - 2009-11-30 22:23:40.906666   
lit87

Сообщений: 13
Оценки: 0
Присоединился: 2009-11-23 20:15:36.443333
так че тебе тогда еще нада
Post #: 17
RE: [PHP] Отправка почты с вложениями - 2009-11-30 22:32:55.450000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000

quote:

ORIGINAL: lit87

так че тебе тогда еще нада

мир во всем мире. Ну и еще, чтобы топики в этом разделе не превращали во флуд-ветку.
Post #: 18
RE: [PHP] Отправка почты с вложениями - 2009-12-15 01:06:13.030000   
Alexanderrr

Сообщений: 2
Оценки: 0
Присоединился: 2009-12-15 00:59:37.823333
quote:

ORIGINAL: Cep}|{

-Надо в заголовки добавить поле "From"
$head   .= "From: mail@mail.ru\n";

Что-то не получилось, где надо вписывать, после строки "$message .= "[" . $key . "] => " . $value."\n";"???

-Почему-то при получении письма, в нем первые строки: [emails] => mail@mail.ru [field1] => [message] =>
Можно ли это убрать?

-Почему-то не соблюдается перенос строк, сообщение приходит сплошным текстом, как это исправить?

Спасибо заранее.
Post #: 19
RE: [PHP] Отправка почты с вложениями - 2009-12-15 09:39:22.633333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
quote:

Что-то не получилось, где надо вписывать, после строки "$message .= "[" . $key . "] =&gt; " . $value."\n";"???

после инициализации $head
quote:

-Почему-то при получении письма, в нем первые строки: [emails] =&gt; mail@mail.ru [field1] =&gt; [message] =&gt;
Можно ли это убрать?
Потому что в алгоритме так сделано. Убрать конечно можно. В суд никто подавать не будет :)
quote:

-Почему-то не соблюдается перенос строк, сообщение приходит сплошным текстом, как это исправить?

Потому что тип письма: text/html. Надо переносить br'ками, к примеру.
Post #: 20
RE: [PHP] Отправка почты с вложениями - 2009-12-15 13:03:43.820000   
Alexanderrr

Сообщений: 2
Оценки: 0
Присоединился: 2009-12-15 00:59:37.823333
Добавил строку:
$un = strtoupper(uniqid(time()));
$head = "Mime-Version: 1.0\n";
$head .= "Content-Type:multipart/mixed;";
$head .= "boundary=\"———-".$un."\"\n\n";
$head .= "From: mail@mail.ru\n";

$bоdу = "————".$un."\nContent-Type:text/html;\n";
$bоdу .= "Content-Transfer-Encoding: 8bit\n\n".$message."\n\n";
foreach($_FILES as $value)

Все равно приходит сообщение от некоего root.

quote:

Потому что в алгоритме так сделано. Убрать конечно можно. В суд никто подавать не будет :)


Подскажите, пожалуйста, как убрать

quote:

Потому что тип письма: text/html. Надо переносить br'ками, к примеру.


Что за бr'ки спасибо, помогло)
Post #: 21
Страниц:  [1]
Все форумы >> [Веб-программинг] >> [PHP] Отправка почты с вложениями







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.