WeBinstruments

Инструментарий для веб-мастеров

 

на сайте на всех сайтах для веб разработчиков везде
 
 Скрипты
  PHP скрипты   
  Flash скрипты   
  Javascript скрипты   

 Софт
  Инструменты SEO   
  Разработка сайтов   
  Серверное ПО   

 Документация
  MySQL   
  PHP   
  HTML   
  Протоколы и сервисы Internet   

 Статьи
  PHP   
  MySQL   
  Сервер   
  еще...   

 Услуги и сервисы
  Домены   
  Хостинги   
  Блоки для сайта   

 Новости


 Контакты
  icq: 158325531
  email:
  все контакты: здесь




Atom все поступления
Раздел Файлы
Раздел Услуги и сервисы
Раздел Новости
Раздел Статьи
комментарии



 Партнеры
Use the accounting equation to avoid errors and understand your company.


Главная / Статьи / PHP / Отправка писем через SMTP с авторизацией


email
smtp php

Отправка писем через SMTP с авторизацией

13.08.2007
сайт автора: http://webi.ru
публикация данной статьи разрешена только со ссылкой на сайт автора статьи

Как отправить почту с помощью php через SMTP сервер используя сокеты. Рассматривается отправка почты с прикрепленными файлами и просто текста.

Читать всю статью


Комментарии

RSS комментарии


18.08.2010 Артур
Эх, я просто и с ним, и без него пробовал, все никак не хочет...



18.08.2010 Виктор
Артур, значит вообще сокеты запрещены на сервере



15.09.2010 Павел
Доброго дня!
Проблема над которой сегодня бился целый день...
Решил с помощью вашей статьи написать функцию отправки написать.
Написал, засунул в файлик, отправляет все железно и туда куда надо, НО(!)
одна проблема файл (всегда jpg,gif,png) приходит, но он пустой ((( Бьюсь уже полдня - ниче зделать не могу.
Письмо выглядит вроде как обычно - все заголовки проверил - все гут. Единственная зацепка - размер файла показывает "~0 байт" вот ето и смущает.
Помогите пжалста, а то башка уже ниче не соображает%)



15.09.2010 Павел
Полностью разковырял скрипт и выяснил, что если скрипт вытаскивать отдельно и потом вызывать его там где надо функцией include("sript.php");
То не считается размер файла и файл не кодируется. Только вот что с этим делать - все равно понять не могу...



15.09.2010 Павел
теперь точно знаю причину.
$file = $url."/".$file_n;
$fp = fopen($file, "rb");
$code_file = chunk_split(base64_encode(fread($fp, filesize($file))));
fclose($fp);

Если код выше заталкивать в отдельный файл, то он почему-то не работает. Хотя я передаю функции путь к файлу...
А вот теперь вопрос - как это исправить?



15.09.2010 Админ
Павел, информации от вас не хватает.
Привели бы пример вашего кода.
Ну и самое первое, проверьте, точно ли подвязывается файл к скрипту? Может он по какой-то причине не инклюдится.





15.09.2010 Павел
Содержимое файла из которого вызывается скрипт
include("js/pismo.php");
$messaga = "Платежка по счету №".$nomer;
//цеплять файл
$file = $url."/".$file_n;
$fp = fopen($file, "rb");
$code_file = chunk_split(base64_encode(fread($fp, filesize($file))));
fclose($fp);
otpravka("qwerty@zzzz.ru",$messaga,$messaga,$file_n,$code_file);

//Содержимое скрипта
function get_data($smtp_conn)
{ ... }
function otpravka($EMAIL,$SUB,$MESS,$FILE,$CODE64)
{
$EMAIL = iconv("UTF-8","WINDOWS-1251",$EMAIL);
$SUB = iconv("UTF-8","WINDOWS-1251",$SUB);
//шапки для писма с вложением
$header="Date: ".date("D, j M Y G:i:s")." +0700\r\n";
$header.="From: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode($EMAIL)))."?= <payment@your-security.ru>\r\n";
$header.="X-Mailer: The Bat! (v3.99.3) Professional\r\n";
$header.="Reply-To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode($EMAIL)))."?= <".$EMAIL.">\r\n";
$header.="X-Priority: 3 (Normal)\r\n";
$header.="Message-ID: <172562218.".date("YmjHis")."@your-security.ru>\r\n";
$header.="To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode($SUB)))."?= <payment@your-security.ru>\r\n";
$header.="Subject: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode($SUB)))."?=\r\n";
$header.="MIME-Version: 1.0\r\n";
$header.="Content-Type: multipart/mixed; boundary=\"----------A4D921C2D10D7DB\"\r\n";

$text = "------------A4D921C2D10D7DB
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bit

".$MESS."

------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name=\"".$FILE."\"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename=\"".$FILE."\"

".$CODE64."
------------A4D921C2D10D7DB--
";

// Далее строчки с сокетами в них проблем точно нет, все железно.



15.09.2010 Павел
Хм... но письмо то отправляется. И вложение тоже есть. Только пустой jpg приходит...



16.09.2010 Админ
Павел, вы и сами сказали, что проблема с этим кодом
$file = $url."/".$file_n;
$fp = fopen($file, "rb");
$code_file = chunk_split(base64_encode(fread($fp, filesize($file))));

Мне кажется, что в строке
$file = $url."/".$file_n;
есть проблемы с путями.
Проверьте что находится в $file, похоже сюда приходит не верное значение пути ($url)




16.09.2010 Павел
хм... я неправильный кусок кода привел.
Этот код как раз Работает! Кодирование происходит непосредственно перед передачей данных скрипту,
а вот если кодировать файл внутри функции function otpravka($EMAIL,$SUB,$MESS,$FILE,$CODE64)
{...}
Вот тогда он почему то его не хочет видеть.



16.09.2010 Админ
Павел, ну ведь в эту функцию вы не передаете переменную $url.




16.09.2010 Павел
Внутри функции было так:

$file = "http://www.qwerty.ru/path/to/folder/".$FILE;
$fp = fopen($file, "rb");
$code_file = chunk_split(base64_encode(fread($fp, filesize($file))));

И даже если тупо проверять filesize выдает пустоту.



16.09.2010 админ
Павел, а вы уверены, что такая конструкция у вас работала?
Тут же вы доступ к файлу получаете снаружи, через http://
Если вы не можете получить размер файла через http, значит на сервере запрещено это, поэтому и не можете получить размер файла, и возможно fopen тоже не работает с удаленными файлами.



17.09.2010 Павел
Возможно конечно...
Тогда не понятно что с этим делать...

Но если я этот код ставлю вне функции и сначала кодирую его а потом передаю функции, то все отлично. При этом файл, все же, лежит на сервере.

У Вас нет идей, как это исправляется?



17.09.2010 Админ
Павел, если файл лежит на вашем сервере, зачем тогда вы к нему через http обращаетесь?
Ну и почему этот код работает вне функции, а внутри функции не работает... ну тут где то ваша ошибка, ведь такого не может быть.
что то не хватает в функции.
присылайте весь код мне на почту, я гляну, может найду проблему.



28.09.2010 Дима Кошлоков
Автор, большое вам спасибо за пример и подробное разъяснение. Благодаря вам побеждена проблема отправки почты на mail.ru, до этого антиспамом вся почта даже в папку СПАМ не попадала. Больших вам успехов! Ещё раз спасибо!



05.10.2010 Игорь
Все работает замечательно, мэйл ру принимает нормально файл, а вот гмэйл его принимает как спам. В тоже время при отправке функцией mail() по-простому гмэйл письмо понимает нормально,не как спам. Цирк,да и только



05.10.2010 админ
Игорь, скорее всего дело может быть в сервере smtp, возможно функция mail() ведет отправку через другой сервер, от другого IP, который для gmail является чистым, а сервер smtp или ip сервера на котором работает скрипт считаются у gmail спамерскими.

Антиспам у gmail относится очень лояльно к чистым smtp серверам и чистым IP клиентов от которых идет отправка. Я тестировал доставку писем на gmail используя разные подходы в заголовках и если ip адреса от которых идет доставка чистые, то почта приходит независимо от того, что там напишешь в заголовках.

Чистые, я имею ввиду smtp сервер и ip клиента, с которых не было зафиксировано спамерских писем.



26.10.2010 Вадим
Пригодилось. Автор молодец. Спасибо!



23.11.2010 Nat
Пробую отправлять два письма на разные адреса

fputs($smtp_conn,"RCPT TO:<1@m.ru>\r\n");
$code = substr(get_data($smtp_conn),0,3);
fputs($smtp_conn,"RCPT TO::<2@m.ru>\r\n");
$code = substr(get_data($smtp_conn),0,3);

if($code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($smtp_conn); exit;}

fputs($smtp_conn,"DATA\r\n");
$code = substr(get_data($smtp_conn),0,3);

Выводит сообщение Сервер не принял команду RCPT TO. На один адрес всё нормально. Что не так, подскажите плиз!


1 2 3 4 5 6 7 8 9 >>>

Добавить свой комментарий


Ваше имя(* обязательно)


Текст сообщения(* обязательно)









 
 
  запомнить

 
Copyright © 2003-2024 WeBi Constructor
Rambler's Top100