smtp php
Отправка писем через SMTP с авторизацией13.08.2007 сайт автора: http://webi.ru
публикация данной статьи разрешена только со ссылкой на сайт автора статьиКак отправить почту с помощью php через SMTP сервер используя сокеты. Рассматривается отправка почты с прикрепленными файлами и просто текста.
Комментарии
RSS комментарии
23.11.2010 админ
Nat, а вы так и посылаете во втором RCPT два двоеточия "RCPT TO:: " ?
23.11.2010 Nat
Нет, адрес меняла когда вставила...
23.11.2010 Nat
Сначала пробовала в цикле отправлять - адреса брала из текстового файла, не получилось, стала вот так с двумя адресами пробовать...
23.11.2010 админ
Nat, приведите конкретно свой пример, который у вас в скрипте используется, измените только email адреса, все остальное оставьте без изменений. Так как приведенный вами пример содержит синтаксические ошибки, может быть у вас тоже имеются ошибки...
И через какой сервер отправляете? Может там стоит запрет на отправку нескольких писем, попробуйте отправить через другой сервер.
23.11.2010 Nat
Сегодня вообще получилось :)
Из файла как-то не так читаю что ли, первый раз отправилось, потом уже нет...и ругается на RCPT TO опять же
вот кусок
//это файл с адресами
$addr = file("addr.txt");
for ($i=0; $i < count($addr); $i++)
{
echo $addr[$i]."<br>";
fputs($smtp_conn,"RCPT TO:".$addr[$i]."\r\n");
$code = substr(get_data($smtp_conn),0,3);
}
Думаю это мой косяк, спасибо вообще большое!
24.11.2010 админ
Nat, ну да, похоже на какой-то глюк в самом скрипте.
Может среди адресов в файле попадаются переносы строк? Или какие-то символы
09.12.2010 Аноним
>$addr = file("addr.txt")
Заменяйте переносы строк в полученном массиве.
13.12.2010 VorVV
кто подскажет - строка типа name="=?windows-1251?Q?=EE=F5 ... указывает что кодировка имени атач файла винды но каким образом узнать как это имя кодируется в символы =EE=F5 и тд?
13.12.2010 виктор
VorVV, цитирую статью
... при написании имен русскими символами, придется их конвертировать
=?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('Максим')))."?= <login@mail.ru>
Выбрось лишнее и получится
=?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('Текст')))."?=
21.12.2010 Виктор
Почему то не работает такая конструкция
нет фложений приходит просто текст
if(isset($_FILES['file']['name'])&&$_FILES['file']['size']>0 &&$_FILES['file']['error']==0)
{
$header.="Content-Type: multipart/mixed; boundary=\"----------A4D921C2D10D7DB\"\r\n";
$file= $_FILES['file']['name'];
$fp = fopen($file, "rb");
$code_file1 = chunk_split(base64_encode(fread($fp, filesize($file))));
fclose($fp);
$code_file2=base64_encode("привет, это типа второй файл");
$text="------------A4D921C2D10D7DB
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bit
привет, это текст письма
------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name=\"".$file."\"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename=\"".$file."\"
".$code_file1."
------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name=\"2.txt\"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename=\"2.txt\"
".$code_file2."
------------A4D921C2D10D7DB--
";
}
else
{
$header.="Content-Type: text/plain; charset=windows-1251\r\n";
$header.="Content-Transfer-Encoding: 8bit\r\n";
$text = $_POST['message'];
}
21.12.2010 Виктор
Проблему решил, просто звбыл закачать на сервер
$file= $_FILES['file']['name'];
if (copy($_FILES['file']['tmp_name'], $file));
21.12.2010 Виктор
Почему не отправляется копия и скрытая копия письма?
$header.="Cc: $copy\r\n";
$header.="Bcc: $copy\r\n";
причем при получении почты в заголовках показано, что копия отправленна туду-то, туда-то.
Необходимо ли добавлять в RCPT
у меня так
for ($i=0; $i < count($who); $i++)
{
fputs($smtp_conn,"RCPT TO:".$who[$i]."\r\n");
$code = substr(get_data($smtp_conn),0,3);
}
if($code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($smtp_conn); exit;}
21.12.2010 админ
Виктор, на сколько я помню, добавлять скрытую копию в заголовок не нужно, поэтому она и называется скрытой, что ее нет в заголовках.
И конечно необходимо эти адреса добавлять в RCPT.
А вообще, если вы хотите получше с этим разобраться, скачайте мой готовый класс для отправки писем, там все то же самое, готовый рабочий пример с комментариями.
http://webi.ru/webi_files/php_libmail.html
Может и не придется самому изобретать, берете и пользуетесь.
09.01.2011 Роман
Добрый день!
При выполнении fsockopen("smtp.mail.ru", 25,$errno, $errstr, 10);
Выскакивает предупреждение: Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.mail.ru:25 (Permission denied)
В чём может быть проблема?
10.01.2011 админ
Роман, скорее всего на вашем сервере запрещен внешний доступ к другим сайтам, либо запрещен выход по 25 порту.
Где тестируете?
На своем сервере или на хостинге?
10.01.2011 Роман
Тестирую на хостинге.
В службе поддержке хостинга ответили следующее "Обратите внимание, что при отправке через SMTP, SMTP аутентификация должна быть разрешена, поскольку это требуется нашем сервере."
Как разрешить аутентификацию?
10.01.2011 админ
Роман, данный скрипт и так работает с утентификацией(авторизациейц).
Вам нужно спросить в тех поддержке, разрешен ли на хостинге удаленный коннект к сайтам, а конкретно коннект по 25 порту к чужому SMTP используя сокеты.
10.01.2011 Роман
Если я в fsockopen("mail.exclusivehosting.net", 25,$errno, $errstr, 10); прописываю свой smtp, то возникает таже самая ошибка.
А соединение через telnet mail.exclusivehosting.net 25 в cmd.exe превосходно работает!
?
10.01.2011 Роман
Проблему решил. Спасибо за помощь
10.01.2011 сергей
роман, так а в чем была проблема то?
Добавить свой комментарий
|