Парюсь третий день над кодом. Почему-то если вместо 'текст письма' вставляю переменную или пишу так: 'текст письма'.$string ($string - строка, которая создается заранее и echo её отображает без проблем, выглядит строка так как нужно) - письмо не отправляется и возникает ошибка на странице: Письмо не отправлено. Ошибка: E-mail didn't sent PHP: $body = ''; ...................... foreach($a as $myarr => $s) { $body.= "{$myarr} - $s<br>"; } ....................... $result = $mailSMTP->send('kih@9876543.ru', 'Письмо!', '<br>'.$body, $headers); // отправляем письмо Этот код отправляет почту, но без названий найденных файлов. PHP: <?php header("Content-Type: text/html; charset=windows-1251"); $path='files/'; $dir = opendir($path); $string_to_search='ticket'; while(($file = readdir($dir)) !== false) { $a[] = strstr($file,$string_to_search); } print_r($a); //вывод названий файлов в папке без цифр и по маске ticket в названии foreach($a as $myarr) { echo $myarr."<br />"; } closedir($dir); require_once "SendMailSmtpClass.php"; // подключаем класс $mailSMTP = new SendMailSmtpClass('vikt@mail.ru', 'hhDt6dh@78', 'smtp.mail.ru', 'vikt'); // создаем экземпляр класса // $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя'); // заголовок письма $headers= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=windows-1251\r\n"; // кодировка письма $headers .= "From: vikt <vikt@mail.ru>\r\n"; // от кого письмо $result = $mailSMTP->send('kih@9876543.ru', 'письмо!', 'текст письма', $headers); // отправляем письмо if($result === true){ echo "Письмо успешно отправлено"; }else{ echo "Письмо не отправлено. Ошибка: " . $result; } ?> Натолкните на что нибудь что мне поможет отправлять названия файлов (по маске ticket) на email. Вот этот вывод echo $myarr."<br />"; хочу отправить очень. Спасибо.
SendMailSmtpClass.php PHP: <?php /** * SendMailSmtpClass * * Класс для отправки писем через SMTP с авторизацией * * @author Ipatov Evgeniy <admin@ipatov-soft.ru> * @version 1.0 */ class SendMailSmtpClass { /** * * @var string $smtp_username - логин * @var string $smtp_password - пароль * @var string $smtp_host - хост * @var string $smtp_from - от кого * @var integer $smtp_port - порт * @var string $smtp_charset - кодировка * */ public $smtp_username; public $smtp_password; public $smtp_host; public $smtp_from; public $smtp_port; public $smtp_charset; public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = "utf-8") { $this->smtp_username = $smtp_username; $this->smtp_password = $smtp_password; $this->smtp_host = $smtp_host; $this->smtp_from = $smtp_from; $this->smtp_port = $smtp_port; $this->smtp_charset = $smtp_charset; } /** * Отправка письма * * @param string $mailTo - получатель письма * @param string $subject - тема письма * @param string $message - тело письма * @param string $headers - заголовки письма * * @return bool|string В случаи отправки вернет true, иначе текст ошибки * */ function send($mailTo, $subject, $message, $headers) { $contentMail = "Date: " . date("D, d M Y H:i:s") . " UT\r\n"; $contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?' . base64_encode($subject) . "=?=\r\n"; $contentMail .= $headers . "\r\n"; $contentMail .= $message . "\r\n"; try { if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){ throw new Exception($errorNumber.".".$errorDescription); } if (!$this->_parseServer($socket, "220")){ throw new Exception('Connection error'); } fputs($socket, "HELO " . $this->smtp_host . "\r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: HELO'); } fputs($socket, "AUTH LOGIN\r\n"); if (!$this->_parseServer($socket, "334")) { fclose($socket); throw new Exception('Autorization error'); } fputs($socket, base64_encode($this->smtp_username) . "\r\n"); if (!$this->_parseServer($socket, "334")) { fclose($socket); throw new Exception('Autorization error'); } fputs($socket, base64_encode($this->smtp_password) . "\r\n"); if (!$this->_parseServer($socket, "235")) { fclose($socket); throw new Exception('Autorization error'); } fputs($socket, "MAIL FROM: ".$this->smtp_username."\r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: MAIL FROM'); } fputs($socket, "RCPT TO: " . $mailTo . "\r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: RCPT TO'); } fputs($socket, "DATA\r\n"); if (!$this->_parseServer($socket, "354")) { fclose($socket); throw new Exception('Error of command sending: DATA'); } fputs($socket, $contentMail."\r\n.\r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception("E-mail didn't sent"); } fputs($socket, "QUIT\r\n"); fclose($socket); } catch (Exception $e) { return $e->getMessage(); } return true; } private function _parseServer($socket, $response) { while (@substr($responseServer, 3, 1) != ' ') { if (!($responseServer = fgets($socket, 256))) { return false; } } if (!(substr($responseServer, 0, 3) == $response)) { return false; } return true; } }
PHP: <?php header("Content-Type: text/html; charset=windows-1251"); require_once "SendMailSmtpClass.php"; // подключаем класс $mailSMTP = new SendMailSmtpClass('fwii@mail.ru', 'feefegeh$GD', 'smtp.mailserver.ru', 'fwii'); // создаем экземпляр класса // $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя'); // заголовок письма $headers= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=windows-1251\r\n"; // кодировка письма $headers .= "From: zayavkitii <fwii@mail.ru>\r\n"; // от кого письмо $path='files/'; $dir = opendir($path); $string_to_search='ticket'; $s=' '; while(($file = readdir($dir)) !== false) { $a[] = strstr($file,$string_to_search); } print_r($a); //вывод названий файлов с заявками без лишних цифр и файлов по маске ticket в названии foreach($a as $myarr) { echo $myarr."<br />"; } $s = $myarr; closedir($dir); echo $s; $result = $mailSMTP->send('kih@4252433.ru', 'Заявка!', ' '.$s.' ', $headers); // отправляем письмо if($result === true){ echo "Письмо успешно отправлено"; }else{ echo "Письмо не отправлено. Ошибка: " . $result; } ?> письмо по прежнему не уходит, а echo $s выводит только последнюю запись из foreach($a as $myarr) почему-то (
Свою s засунь суда вот так, только что это тебе даст? : PHP: foreach($a as $myarr) { $s .= $myarr."<br />"; } echo $s; Мне кажется надо как то так: PHP: foreach($a as $myarr) { $mailSMTP->send('kih@4252433.ru','Заявка!',' '.$myarr.' ',$headers); }
PHP: <?php header("Content-Type: text/html; charset=windows-1251"); require_once "SendMailSmtpClass.php"; // подключаем класс $mailSMTP = new SendMailSmtpClass('asasasas@mail.ru', '3456789876543345', 'smtp.mailserver.ru', 'asasasas'); // создаем экземпляр класса // $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя'); // заголовок письма $headers= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=windows-1251\r\n"; // кодировка письма $headers .= "From: asasasas <asasasas@mail.ru>\r\n"; // от кого письмо $path='files/'; $dir = opendir($path); $string_to_search='ticket'; $s=' '; while(($file = readdir($dir)) !== false) { $a[] = strstr($file,$string_to_search); } print_r($a); //вывод названий файлов с заявками без лишних цифр и файлов по маске ticket в названии foreach($a as $myarr) { echo $myarr."<br />"; } foreach($a as $myarr) { $s .= $myarr."<br />"; } //в $s теперь то что на почту должно уйти closedir($dir); echo $s; //foreach($a as $myarr) //{ $mailSMTP->send("kih@747526524.ru","Заявка!", " <br>".$s,$headers);// отправляем письмо // не отправляет ни в фореаче ни без фореача почту... //} //$result = $mailSMTP->send('kih@3564353.ru', 'Заявка!', ' '.$s.' ', $headers); // отправляем письмо if($result === true){ echo "Письмо успешно отправлено"; }else{ echo "Письмо не отправлено. Ошибка: " . $result; } ?> теперь переменная s содержит то что надо , отображается на странице, но когда дело до отправки мыла доходит то "Письмо не отправлено. Ошибка: " библиотека smtp send'ера что-ли косячная или мой код?.. --- Добавлено --- Artur_hopf, благодарю! --- Добавлено --- PHP: if($result = true){ echo "Письмо успешно отправлено"; }else{ echo "Письмо не отправлено. Ошибка: " . $result; } так в конце написал вместо $result === true и скрипт выдал, что отправлено письмо, но пока его в ящике нет....
поменял либу для отправки. теперь использую swift-mailer 5.4.3. и понял что одинарное равно это присваивание и поэтому писало что отправлено, а письмо так и не ушло. этот код пытается отправить переменную $s PHP: <?php require("lib/swift_required.php"); $path='files/'; $dir = opendir($path); $string_to_search='ticket'; $s=' '; $transport = Swift_SmtpTransport::newInstance('smtp.mailserver.ru', 465) ->setUsername('zayavki@mailserver.ru') ->setPassword('143647352646') ; $mailer = Swift_Mailer::newInstance($transport); while(($file = readdir($dir)) !== false) { $a[] = strstr($file,$string_to_search); } print_r($a); //вывод названий файлов с заявками без лишних цифр и файлов по маске ticket в названии foreach($a as $myarr) { echo $myarr."<br />"; } foreach($a as $myarr) { $s .= $myarr."<br />"; } closedir($dir); echo $s; $message = Swift_Message::newInstance('Subject') ->setFrom(array('zayavki@mailserver.ru' => 'zayavki')) ->setTo(array('kih@6436.ru' => 'asasasas')) ->setBody('на! '.$s) ; $result = $mailer->send($message); ?> но не везет по прежнему мне ( PHP: Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host smtp.mailserver.ru [Connection refused #111]' in /home/zayavki/public_html/lib/classes/Swift/Transport/StreamBuffer.php:269 Stack trace: #0 /home/zayavki/public_html/lib/classes/Swift/Transport/StreamBuffer.php(62): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/zayavki/public_html/lib/classes/Swift/Transport/AbstractSmtpTransport.php(113): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/zayavki/public_html/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() #3 /home/zayavki/public_html/index_2.php(68): Swift_Mailer->send(Object(Swift_Message)) #4 {main} thrown in /home/zayavki/public_html/lib/classes/Swift/Transport/StreamBuffer.php on line 269
Может из-за цикла не успевает отправлять? Делайте по 10 писем в минуту, допустим. Везде же есть лимиты...