За последние 24 часа нас посетили 14876 программистов и 1719 роботов. Сейчас ищут 1232 программиста ...

foreach и отправка email'а

Тема в разделе "PHP для новичков", создана пользователем trusty, 19 ноя 2018.

  1. trusty

    trusty Новичок

    С нами с:
    19 ноя 2018
    Сообщения:
    5
    Симпатии:
    0
    Парюсь третий день над кодом. Почему-то если вместо 'текст письма' вставляю переменную или пишу так: 'текст письма'.$string ($string - строка, которая создается заранее и echo её отображает без проблем, выглядит строка так как нужно) - письмо не отправляется и возникает ошибка на странице:
    Письмо не отправлено. Ошибка: E-mail didn't sent

    PHP:
    1. $body = '';
    2. ......................
    3. foreach($a as $myarr => $s)
    4. {
    5. $body.= "{$myarr} - $s<br>";
    6. }
    7. .......................
    8. $result = $mailSMTP->send('kih@9876543.ru', 'Письмо!', '<br>'.$body, $headers); // отправляем письмо
    Этот код отправляет почту, но без названий найденных файлов.
    PHP:
    1. <?php
    2. header("Content-Type: text/html; charset=windows-1251");
    3.  
    4. $path='files/';
    5. $dir = opendir($path);
    6. $string_to_search='ticket';
    7.  
    8. while(($file = readdir($dir)) !== false)
    9. {
    10.     $a[] = strstr($file,$string_to_search);
    11. }
    12. print_r($a);
    13.  
    14. //вывод названий файлов в папке без цифр и по маске ticket в названии
    15. foreach($a as $myarr)
    16. {
    17.   echo $myarr."<br />";
    18.  
    19. }
    20.  
    21.  
    22.  
    23.  
    24. closedir($dir);
    25.  
    26. require_once "SendMailSmtpClass.php"; // подключаем класс
    27. $mailSMTP = new SendMailSmtpClass('vikt@mail.ru', 'hhDt6dh@78', 'smtp.mail.ru', 'vikt'); // создаем экземпляр класса
    28. // $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
    29. // заголовок письма
    30. $headers= "MIME-Version: 1.0\r\n";
    31. $headers .= "Content-type: text/html; charset=windows-1251\r\n"; // кодировка письма
    32. $headers .= "From: vikt <vikt@mail.ru>\r\n"; // от кого письмо
    33. $result = $mailSMTP->send('kih@9876543.ru', 'письмо!', 'текст письма', $headers); // отправляем письмо
    34. if($result === true){
    35. echo "Письмо успешно отправлено";
    36. }else{
    37. echo "Письмо не отправлено. Ошибка: " . $result;
    38. }
    39.  
    40. ?>
    Натолкните на что нибудь что мне поможет отправлять названия файлов (по маске ticket) на email. Вот этот вывод echo $myarr."<br />"; хочу отправить очень. Спасибо.
     
  2. trusty

    trusty Новичок

    С нами с:
    19 ноя 2018
    Сообщения:
    5
    Симпатии:
    0
    SendMailSmtpClass.php

    PHP:
    1. <?php
    2. /**
    3. * SendMailSmtpClass
    4. *
    5. * Класс для отправки писем через SMTP с авторизацией
    6. *
    7. * @author Ipatov Evgeniy <admin@ipatov-soft.ru>
    8. * @version 1.0
    9. */
    10. class SendMailSmtpClass {
    11. /**
    12. *
    13. * @var string $smtp_username - логин
    14. * @var string $smtp_password - пароль
    15. * @var string $smtp_host - хост
    16. * @var string $smtp_from - от кого
    17. * @var integer $smtp_port - порт
    18. * @var string $smtp_charset - кодировка
    19. *
    20. */
    21. public $smtp_username;
    22. public $smtp_password;
    23. public $smtp_host;
    24. public $smtp_from;
    25. public $smtp_port;
    26. public $smtp_charset;
    27. public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = "utf-8") {
    28. $this->smtp_username = $smtp_username;
    29. $this->smtp_password = $smtp_password;
    30. $this->smtp_host = $smtp_host;
    31. $this->smtp_from = $smtp_from;
    32. $this->smtp_port = $smtp_port;
    33. $this->smtp_charset = $smtp_charset;
    34. }
    35. /**
    36. * Отправка письма
    37. *
    38. * @param string $mailTo - получатель письма
    39. * @param string $subject - тема письма
    40. * @param string $message - тело письма
    41. * @param string $headers - заголовки письма
    42. *
    43. * @return bool|string В случаи отправки вернет true, иначе текст ошибки *
    44. */
    45. function send($mailTo, $subject, $message, $headers) {
    46. $contentMail = "Date: " . date("D, d M Y H:i:s") . " UT\r\n";
    47. $contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?' . base64_encode($subject) . "=?=\r\n";
    48. $contentMail .= $headers . "\r\n";
    49. $contentMail .= $message . "\r\n";
    50. try {
    51. if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
    52. throw new Exception($errorNumber.".".$errorDescription);
    53. }
    54. if (!$this->_parseServer($socket, "220")){
    55. throw new Exception('Connection error');
    56. }
    57. fputs($socket, "HELO " . $this->smtp_host . "\r\n");
    58. if (!$this->_parseServer($socket, "250")) {
    59. fclose($socket);
    60. throw new Exception('Error of command sending: HELO');
    61. }
    62. fputs($socket, "AUTH LOGIN\r\n");
    63. if (!$this->_parseServer($socket, "334")) {
    64. fclose($socket);
    65. throw new Exception('Autorization error');
    66. }
    67. fputs($socket, base64_encode($this->smtp_username) . "\r\n");
    68. if (!$this->_parseServer($socket, "334")) {
    69. fclose($socket);
    70. throw new Exception('Autorization error');
    71. }
    72. fputs($socket, base64_encode($this->smtp_password) . "\r\n");
    73. if (!$this->_parseServer($socket, "235")) {
    74. fclose($socket);
    75. throw new Exception('Autorization error');
    76. }
    77. fputs($socket, "MAIL FROM: ".$this->smtp_username."\r\n");
    78. if (!$this->_parseServer($socket, "250")) {
    79. fclose($socket);
    80. throw new Exception('Error of command sending: MAIL FROM');
    81. }
    82. fputs($socket, "RCPT TO: " . $mailTo . "\r\n");
    83. if (!$this->_parseServer($socket, "250")) {
    84. fclose($socket);
    85. throw new Exception('Error of command sending: RCPT TO');
    86. }
    87. fputs($socket, "DATA\r\n");
    88. if (!$this->_parseServer($socket, "354")) {
    89. fclose($socket);
    90. throw new Exception('Error of command sending: DATA');
    91. }
    92. fputs($socket, $contentMail."\r\n.\r\n");
    93. if (!$this->_parseServer($socket, "250")) {
    94. fclose($socket);
    95. throw new Exception("E-mail didn't sent");
    96. }
    97. fputs($socket, "QUIT\r\n");
    98. fclose($socket);
    99. } catch (Exception $e) {
    100. return $e->getMessage();
    101. }
    102. return true;
    103. }
    104. private function _parseServer($socket, $response) {
    105. while (@substr($responseServer, 3, 1) != ' ') {
    106. if (!($responseServer = fgets($socket, 256))) {
    107. return false;
    108. }
    109. }
    110. if (!(substr($responseServer, 0, 3) == $response)) {
    111. return false;
    112. }
    113. return true;
    114. }
    115. }
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Настоятельно рекомендую теперь пойти и поменять пароли
     
    AlexProg, trusty и AlexandrS нравится это.
  4. trusty

    trusty Новичок

    С нами с:
    19 ноя 2018
    Сообщения:
    5
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3. header("Content-Type: text/html; charset=windows-1251");
    4.  
    5. require_once "SendMailSmtpClass.php"; // подключаем класс
    6. $mailSMTP = new SendMailSmtpClass('fwii@mail.ru', 'feefegeh$GD', 'smtp.mailserver.ru', 'fwii'); // создаем экземпляр класса
    7. // $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
    8. // заголовок письма
    9. $headers= "MIME-Version: 1.0\r\n";
    10. $headers .= "Content-type: text/html; charset=windows-1251\r\n"; // кодировка письма
    11. $headers .= "From: zayavkitii <fwii@mail.ru>\r\n"; // от кого письмо
    12.  
    13. $path='files/';
    14. $dir = opendir($path);
    15. $string_to_search='ticket';
    16. $s=' ';
    17.  
    18.  
    19. while(($file = readdir($dir)) !== false)
    20. {
    21.     $a[] = strstr($file,$string_to_search);
    22. }
    23. print_r($a);
    24.  
    25. //вывод названий файлов с заявками без лишних цифр и файлов по маске ticket в названии
    26. foreach($a as $myarr)
    27. {
    28.   echo $myarr."<br />";
    29.  
    30. }
    31. $s = $myarr;
    32.  
    33.  
    34.  
    35. closedir($dir);
    36.  
    37. echo $s;
    38. $result = $mailSMTP->send('kih@4252433.ru', 'Заявка!', ' '.$s.' ', $headers); // отправляем письмо
    39. if($result === true){
    40. echo "Письмо успешно отправлено";
    41. }else{
    42. echo "Письмо не отправлено. Ошибка: " . $result;
    43. }
    44.  
    45. ?>
    письмо по прежнему не уходит, а echo $s выводит только последнюю запись из foreach($a as $myarr) почему-то (
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Свою s засунь суда вот так, только что это тебе даст? :
    PHP:
    1. foreach($a as $myarr)
    2. {
    3. $s .= $myarr."<br />";
    4. }
    5.  
    6. echo $s;
    Мне кажется надо как то так:
    PHP:
    1. foreach($a as $myarr)
    2. {
    3.    $mailSMTP->send('kih@4252433.ru','Заявка!',' '.$myarr.' ',$headers);
    4. }
     
    trusty нравится это.
  6. trusty

    trusty Новичок

    С нами с:
    19 ноя 2018
    Сообщения:
    5
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3. header("Content-Type: text/html; charset=windows-1251");
    4.  
    5. require_once "SendMailSmtpClass.php"; // подключаем класс
    6. $mailSMTP = new SendMailSmtpClass('asasasas@mail.ru', '3456789876543345', 'smtp.mailserver.ru', 'asasasas'); // создаем экземпляр класса
    7. // $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
    8. // заголовок письма
    9. $headers= "MIME-Version: 1.0\r\n";
    10. $headers .= "Content-type: text/html; charset=windows-1251\r\n"; // кодировка письма
    11. $headers .= "From: asasasas <asasasas@mail.ru>\r\n"; // от кого письмо
    12.  
    13. $path='files/';
    14. $dir = opendir($path);
    15. $string_to_search='ticket';
    16. $s=' ';
    17.  
    18.  
    19. while(($file = readdir($dir)) !== false)
    20. {
    21.     $a[] = strstr($file,$string_to_search);
    22. }
    23. print_r($a);
    24.  
    25. //вывод названий файлов с заявками без лишних цифр и файлов по маске ticket в названии
    26. foreach($a as $myarr)
    27. {
    28.   echo $myarr."<br />";
    29.  
    30. }
    31.  
    32. foreach($a as $myarr)
    33. {
    34. $s .= $myarr."<br />";
    35. }
    36. //в $s теперь то что на почту должно уйти
    37.  
    38.  
    39. closedir($dir);
    40.  
    41. echo $s;
    42. //foreach($a as $myarr)
    43. //{
    44. $mailSMTP->send("kih@747526524.ru","Заявка!", " <br>".$s,$headers);// отправляем письмо
    45. // не отправляет ни в фореаче ни без фореача почту...
    46. //}
    47.  
    48. //$result = $mailSMTP->send('kih@3564353.ru', 'Заявка!', ' '.$s.' ', $headers); // отправляем письмо
    49. if($result === true){
    50. echo "Письмо успешно отправлено";
    51. }else{
    52. echo "Письмо не отправлено. Ошибка: " . $result;
    53. }
    54.  
    55. ?>
    теперь переменная s содержит то что надо , отображается на странице, но когда дело до отправки мыла доходит то "Письмо не отправлено. Ошибка: ":(
    библиотека smtp send'ера что-ли косячная или мой код?..
    --- Добавлено ---
    Artur_hopf, благодарю!:)
    --- Добавлено ---
    PHP:
    1. if($result = true){
    2. echo "Письмо успешно отправлено";
    3. }else{
    4. echo "Письмо не отправлено. Ошибка: " . $result;
    5. }
    так в конце написал вместо $result === true и скрипт выдал, что отправлено письмо, но пока его в ящике нет....
     
  7. trusty

    trusty Новичок

    С нами с:
    19 ноя 2018
    Сообщения:
    5
    Симпатии:
    0
    поменял либу для отправки. теперь использую swift-mailer 5.4.3. и понял что одинарное равно это присваивание :) и поэтому писало что отправлено, а письмо так и не ушло.

    этот код пытается отправить переменную $s

    PHP:
    1. <?php
    2.  
    3. require("lib/swift_required.php");
    4. $path='files/';
    5. $dir = opendir($path);
    6. $string_to_search='ticket';
    7. $s=' ';
    8.  
    9. $transport = Swift_SmtpTransport::newInstance('smtp.mailserver.ru', 465)
    10.   ->setUsername('zayavki@mailserver.ru')
    11.   ->setPassword('143647352646')
    12. ;
    13.  
    14. $mailer = Swift_Mailer::newInstance($transport);
    15.  
    16.  
    17.  
    18. while(($file = readdir($dir)) !== false)
    19. {
    20.     $a[] = strstr($file,$string_to_search);
    21. }
    22. print_r($a);
    23.  
    24. //вывод названий файлов с заявками без лишних цифр и файлов по маске ticket в названии
    25. foreach($a as $myarr)
    26. {
    27.   echo $myarr."<br />";
    28.  
    29. }
    30.  
    31. foreach($a as $myarr)
    32. {
    33. $s .= $myarr."<br />";
    34. }
    35.  
    36.  
    37.  
    38.  
    39. closedir($dir);
    40.  
    41. echo $s;
    42.  
    43. $message = Swift_Message::newInstance('Subject')
    44.   ->setFrom(array('zayavki@mailserver.ru' => 'zayavki'))
    45.   ->setTo(array('kih@6436.ru' => 'asasasas'))
    46.   ->setBody('на!  '.$s)
    47.   ;
    48.  
    49.  
    50. $result = $mailer->send($message);
    51. ?>
    но не везет по прежнему мне (
    PHP:
    1. 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
     
  8. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Может из-за цикла не успевает отправлять?
    Делайте по 10 писем в минуту, допустим.
    Везде же есть лимиты...