[PHP] Отправка почты с вложениями
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
[PHP] Отправка почты с вложениями - 2009-01-10 12:19:19.780000
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
Простой пример отправки файлов по почте. Требование к хостингу: должен быть установлен sendmail. <?php
if($_POST)
{
$message = '';
foreach ( $_POST as $key => $value )
$message .= "[" . $key . "] => " . $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 );
}
?>
<form action="" method="post" ENCTYPE="multipart/form-data">
<table border="0" cellspacing="0" cellpadding="0" id="cont_form">
<tr>
<td valign="top" style="padding-right:15px;"><span>Emails:</span></td>
<td><input value="" name="emails" type="text" size="47"></td>
</tr>
<tr>
<td valign="top" style="padding-right:15px;"><span>Field 1:</span></td>
<td><input value="" name="field1" type="text" size="47"></td>
</tr>
<tr>
<td valign="top" style="padding-right:15px;"><span>Field 2:</span></td>
<td><input value="" name="field2" type="text" size="47"></td>
</tr>
<tr>
<td valign="top" style="padding-right:15px;"><span>File 1:</span></td>
<td><input name="file1" type="file"></td>
</tr>
<tr>
<td valign="top" style="padding-right:15px;"><span>File 2:</span></td>
<td><input name="file2" type="file"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Отправить"></td>
</tr>
</table>
</form>
|
|
|
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 а так пригодится.
|
|
|
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";
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-01-14 17:31:38.076666
|
|
|
azimzaim
Сообщений: 320
Оценки: 0
Присоединился: 2009-01-04 22:14:32.760000
|
а в чем собственно вопрос?
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-01-14 19:57:18.600000
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
quote:
Простой пример отправки файлов по почте. или это не по феншую?
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-01-14 22:34:15.623333
|
|
|
Pashkela
Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
|
у тебя всё всегда по феншую. Пусть сделают круче, а мы рассмотрим
|
|
|
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)
{ $fp=fopen($file_name,"r");
if(!fp)
{ print "<center><b>Извините, сервер временно не отправляет письма, попробуйте позже.</b></center>";
exit();
}
$file=fread($fp, filesize($file_name));
fclose($fp);
$bound="--".md5(uniqid(time())); //разделитель
$head="MIME-Version: 1.0\n";
$head.="Content-Type: multipart/mixed; boundary=\"$bound\"\n";
$multipart="--$bound\n";
$kod='windows-1251';
$multipart.="Content-Type: text/html; charset=$kod\n";
$multipart.="Content-Transfer-Encoding: Quot-Printed\n\n";
$multipart.="$message\n\n";
$Oo="--$bound\n";
$Oo.="Content-Type: application/octet-stream\n";
$Oo.="Content-Transfer-Encoding: base64\n";
$Oo.="Content-Disposition: attachment;
filename=\"".$file_name."\"\n\n";
$Oo.=chunk_split(base64_encode($file))."\n";
$multipart.=$Oo."--$bound--\n";
if(!mail($to,$from,$multipart,$head))
{ print "<center><b>Извините, сервер временно не отправляет письма, попробуйте позже.</b> </center>";
exit();
}
};
//Файл заливаю так:
$path=@$_FILES['ank']['name'];
if(copy(@$_FILES['ank']['tmp_name'], $path)) $file=$path;
mail_($to,$from,$subject,$message,$path);
//Проверки, формы ввода, заливки файла и тд. не привожу, кому надо разберётся =)
|
|
|
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
|
|
|
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()
|
|
|
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:<%s>\n" % mail_from)
checkerror(file.readline())
sock.send("RCPT TO:<%s>\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()
|
|
|
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, и в вебе есть такие. Да взять хотя бы этот форум, в правом нижнем углу поле перейти" (если авторизировался). Такие как заполнять?
|
|
|
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
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-11-24 18:08:58.016666
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
фу блин, а я ещё этот питон учить хотел.
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-11-24 19:56:13.383333
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
quote:
ORIGINAL: Smelo фу блин, а я ещё этот питон учить хотел. Не стоит судить о языке по моему примеру. И что вас так отпугнуло?
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-11-30 18:31:01.186666
|
|
|
lit87
Сообщений: 13
Оценки: 0
Присоединился: 2009-11-23 20:15:36.443333
|
а слабо скачать класс для работы с почтой? и не париться
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-11-30 22:19:32.876666
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
quote:
ORIGINAL: lit87 а слабо скачать класс для работы с почтой? и не париться Если мне понадобится готовый класс, я его возьму из PEAR, а не како-то левый класс с непонятного говноресурса.
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-11-30 22:23:40.906666
|
|
|
lit87
Сообщений: 13
Оценки: 0
Присоединился: 2009-11-23 20:15:36.443333
|
так че тебе тогда еще нада
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-11-30 22:32:55.450000
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
quote:
ORIGINAL: lit87 так че тебе тогда еще нада мир во всем мире. Ну и еще, чтобы топики в этом разделе не превращали во флуд-ветку.
|
|
|
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] => Можно ли это убрать? -Почему-то не соблюдается перенос строк, сообщение приходит сплошным текстом, как это исправить? Спасибо заранее.
|
|
|
RE: [PHP] Отправка почты с вложениями - 2009-12-15 09:39:22.633333
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
quote:
Что-то не получилось, где надо вписывать, после строки "$message .= "[" . $key . "] => " . $value."\n";"??? после инициализации $head quote:
-Почему-то при получении письма, в нем первые строки: [emails] => mail@mail.ru [field1] => [message] => Можно ли это убрать? Потому что в алгоритме так сделано. Убрать конечно можно. В суд никто подавать не будет :) quote:
-Почему-то не соблюдается перенос строк, сообщение приходит сплошным текстом, как это исправить? Потому что тип письма: text/html. Надо переносить br'ками, к примеру.
|
|
|
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'ки спасибо, помогло)
|
|
|
|
|