Отправка писем по SMTP
Добавлено: Пн июл 20, 2015 2:53 am
Как я сделал... класс email объект emessage соотв свойства: emessage.tema emessage.telo
Если не пустые, то сценарий запускающийся из периодического метода отправляет соотв сообщение.
если получается, то опустошаются эти свойства, если нет то нет, поэтому если Вы хотите что-то отправить, не устанавливайте эти свойства, а добавляйте к ним текст сообщения, тогда при первой возможности сервак отправит все, что накопилось, возможно прочитать интересно будет)) говорилка присутсвует, трещит каждый раз если не получается, так что при пропадании инета будет много инфы. адреса и пароли в коде, большими буквами, замените на свой. планирую сделать взятие из свойств объекта, но уже не среди ночи) обновлю. Пример с mail.ru через SSL - они щас все шифруются)
Если не пустые, то сценарий запускающийся из периодического метода отправляет соотв сообщение.
если получается, то опустошаются эти свойства, если нет то нет, поэтому если Вы хотите что-то отправить, не устанавливайте эти свойства, а добавляйте к ним текст сообщения, тогда при первой возможности сервак отправит все, что накопилось, возможно прочитать интересно будет)) говорилка присутсвует, трещит каждый раз если не получается, так что при пропадании инета будет много инфы. адреса и пароли в коде, большими буквами, замените на свой. планирую сделать взятие из свойств объекта, но уже не среди ночи) обновлю. Пример с 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);}
}