Отправка писем по SMTP

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Отправка писем по SMTP

Сообщение lysyy » Пн июл 20, 2015 2:53 am

Как я сделал... класс email объект emessage соотв свойства: emessage.tema emessage.telo
Если не пустые, то сценарий запускающийся из периодического метода отправляет соотв сообщение.
если получается, то опустошаются эти свойства, если нет то нет, поэтому если Вы хотите что-то отправить, не устанавливайте эти свойства, а добавляйте к ним текст сообщения, тогда при первой возможности сервак отправит все, что накопилось, возможно прочитать интересно будет)) говорилка присутсвует, трещит каждый раз если не получается, так что при пропадании инета будет много инфы. адреса и пароли в коде, большими буквами, замените на свой. планирую сделать взятие из свойств объекта, но уже не среди ночи) обновлю. Пример с mail.ru через SSL - они щас все шифруются)

Код: Выделить всё

function get_data($smtp_conn)
{
    $data="";
    while($str = fgets($smtp_conn,515))
    {
        $data .= $str;
        if(substr($str,3,1) == " ") { break; }
    }
    return $data;
}
$text=getglobal('emessage.telo');
$tema=getglobal('emessage.tema');
if ($text != ''){$header="Date: ".date("D, j M Y G:i:s")." +0700\r\n";
$header.="From: =?utf8?Q?".str_replace("+","_",str_replace("%","=",urlencode('Алиса')))."?= <ОТ КОГО@mail.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('КОМУИМЯ')))."?= <КОМУВЕРНУТЬАДРЕС@mail.ru>\r\n";
$header.="X-Priority: 3 (Normal)\r\n";
$header.="Message-ID: <172562218.".date("YmjHis")."@mail.ru>\r\n";
$header.="To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('КОМУИМЯ')))."?= <andlf@mail.ru>\r\n";
$header.="Subject: =?utf8?Q?".str_replace("+","_",str_replace("%","=",urlencode(getglobal('emessage.tema'))))."?=\r\n" ;
$header.="MIME-Version: 1.0\r\n";
$header.="Content-Type: text/plain; charset=utf8\r\n";
$header.="Content-Transfer-Encoding: 8bit\r\n";

//$text=getglobal('emessage.telo');
$smtperr = ' '; //$smtperr.= 1;
$smtp_conn = fsockopen("ssl://smtp.mail.ru", 465,$errno, $errstr, 10);
if(!$smtp_conn) {$smtperr = 1;$smtperr.="соединение с серверов не прошло"; fclose($smtp_conn); $smtperr = 1;}
$data = get_data($smtp_conn);
fputs($smtp_conn,"EHLO vasya\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 250) {$smtperr = 1;$smtperr.="ошибка приветствия EHLO"; fclose($smtp_conn); }
fputs($smtp_conn,"AUTH LOGIN\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 334) {$smtperr.="сервер не разрешил начать авторизацию"; fclose($smtp_conn); }

fputs($smtp_conn,base64_encode("ИМЯПОЛЬЗОВАТЕЛЯ, для мейла адрес почты")."\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 334) {$smtperr.="ошибка доступа к такому юзеру"; fclose($smtp_conn);}


fputs($smtp_conn,base64_encode("ПАРОЛЬОТЯЩИКАНАМЕЙЛРУ")."\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 235) {$smtperr.="не правильный пароль"; fclose($smtp_conn);}

$size_msg=strlen($header."\r\n".$text);

fputs($smtp_conn,"MAIL FROM:<ОТКОГОМЫЛО> SIZE=".$size_msg."\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 250) {$smtperr.="сервер отказал в команде MAIL FROM"; fclose($smtp_conn);}

fputs($smtp_conn,"RCPT TO:Andrey<КОМУМЫЛО>\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 250 AND $code != 251) {$smtperr.="Сервер не принял команду RCPT TO"; fclose($smtp_conn);}

fputs($smtp_conn,"RCPT TO:Andrey<КОМУМЫЛОКОПИЯ>\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 250 AND $code != 251) {$smtperr.= "Сервер не принял команду RCPT TO"; fclose($smtp_conn);}

fputs($smtp_conn,"DATA\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 354) {$smtperr.="сервер не принял DATA"; fclose($smtp_conn);}

fputs($smtp_conn,$header."\r\n".$text."\r\n.\r\n");
$code = substr(get_data($smtp_conn),0,3);
if($code != 250) {$smtperr.= "ошибка отправки письма"; fclose($smtp_conn); }

fputs($smtp_conn,"QUIT\r\n");
fclose($smtp_conn);
$skaz = $tema.' '."$text";
echo $smtperr;
//echo $text;                 
//echo $skaz;
                 if ($smtperr=' '){ say('Отправлено сообщение '.$skaz,2);setglobal('emessage.tema','');setglobal('emessage.telo','');}
                else{say('Сообщение не отправлено! Ошибка '.$smtperr." Сообщение ".$skaz,2);}
                

                  

} 
За это сообщение автора lysyy поблагодарили (всего 2):
kozsv (Ср авг 03, 2016 6:05 pm) • Amarok (Чт авг 04, 2016 9:34 am)
Рейтинг: 2.33%
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Отправка писем по SMTP

Сообщение LutsenkoDenis » Пн июл 20, 2015 2:51 pm

А может не нужно изобретать каждый раз велосипед?!
Вот библиотека по отправке почты.
Там уже "из коробки" поддерживается и массовая отправка писем и отлов ошибок и работа по SMTP, POP3, и как угодно.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Отправка писем по SMTP

Сообщение lysyy » Ср июл 22, 2015 9:11 pm

Спасибо!
Я с PHP сталкиваюсь первый раз, админ а не программер) пытаюсь адаптировать куски кода из инета под свои задачи, как всегда в бездонной бочке попадается не все, что нужно...
К тому же, я думаю что нужно все сделать проще, так больше последователей системы будет, поскольку пока еще рановато человеку не-программисту) MD система интересная, аналогов нет, а я пытался сделать готовый рецепт, добавил текст к свойству и не паришься, само уйдет.
kozsv
Сообщения: 38
Зарегистрирован: Пт дек 11, 2015 9:26 pm
Благодарил (а): 8 раз
Поблагодарили: 3 раза

Re: Отправка писем по SMTP

Сообщение kozsv » Ср авг 03, 2016 6:04 pm

Автор что делать, всё сделал, при запуске скрипта ни ошибки не чего вообще и письмо неприхоидт куда копать
kozsv
Сообщения: 38
Зарегистрирован: Пт дек 11, 2015 9:26 pm
Благодарил (а): 8 раз
Поблагодарили: 3 раза

Re: Отправка писем по SMTP

Сообщение kozsv » Ср авг 03, 2016 6:09 pm

Данные скрипт забрал, в чат написал, а письмо никуда нипришло
kozsv
Сообщения: 38
Зарегистрирован: Пт дек 11, 2015 9:26 pm
Благодарил (а): 8 раз
Поблагодарили: 3 раза

Re: Отправка писем по SMTP

Сообщение kozsv » Ср авг 03, 2016 6:24 pm

Заработало, не понятно с кого раза, но отправило, буду разбираться что к чему, ещё раз спасибо за скрипт.
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Отправка писем по SMTP

Сообщение lysyy » Чт ноя 17, 2016 9:21 pm

а везде в коде поменяли на свои данные?
Ответить