За последние 24 часа нас посетили 16252 программиста и 1579 роботов. Сейчас ищут 1607 программистов ...

Замена mail() на smtp

Тема в разделе "Работа с почтой", создана пользователем phpjunior, 23 дек 2013.

  1. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    есть такой скрипт
    Код (Text):
    1. <?php
    2.  
    3. echo "<font size=\"-1\"><hr><form method=\"POST\" action=\"send.php\">";
    4. echo "your adress<br><input type=\"text\" name=\"fromemail\" value=\"$fromemail\" size=\"25\"><br>";
    5. echo "Theme<br><input type=\"text\" name=\"subject\" value=\"$subject\" size=\"50\">";
    6. echo "<br>Text:<br><textarea name=\"body\" rows=\"8\" cols=\"50\"></textarea>";
    7. echo "<br><input type=\"submit\" value=\"Send\"></form></font>";
    8. for ($i = 0; $i < sizeof ($maillist); $i++) print $maillist[$i]. "<br>";
    9. $homepage = "";
    10. error_reporting(0);
    11. $subject = $HTTP_POST_VARS["subject"];
    12. $body = $HTTP_POST_VARS["body"];
    13. $subject = stripslashes($subject);
    14. $body = stripslashes($body);
    15. $file = "maillist.txt";
    16. $maillist = file($file);
    17. print "to base". sizeof($maillist) ." adress<br>";
    18. for ($i = 0; $i < sizeof ($maillist); $i++)
    19. {
    20. #echo($maillist[$i]."<br>");
    21. mail($maillist[$i], $subject,$body ."$odr $homepag $maillist[$i]",
    22. "From: $fromemail");
    23.  
    24. }
    Как правильно заменить отправку через mail() на отправку через smtp mail самое главное что бы работало не надо ничего предлогать изменить. И ещё вопрос этот скрипт работает в цикле, при подключении к смтп серверу он будет при каждом цикле заново подключаться или он будет работать не закрывая сокет? пожалуйста помогите очень нужно возможно заплачу за хороший ответ!!!
     
  2. MaXyC_Web_Studio

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

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    на сколько я знаю в настройках пхп.ини помжно настроить поведение функции mail на смтп и прочее
     
  3. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Дело в том что этот скрипт работает в одиночку без конфигов и прочих файлов, просто нужно загнать в цикл отправку сообщений на смтп сервер то есть просто заменить локальную отправку через mail() на smtp или отправлять массивами. Я даже не знаю как лучше, подскажите пожалуйста.
     
  4. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    http://mails-1.ru/ тут вся информация о версии php. Я там ненашёл mail() и send_mail() там тоже нету!((
     
  5. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    А где изменить поведение функции mail()? где этот php.ini на простом сервере?

    Добавлено спустя 10 минут 23 секунды:
    Попытался воткнуть кусок кода и подключиться к смтп серверу нифига не получилось
    Код (Text):
    1. <?php
    2.  $mhSmtpMail_Server     = "***";      
    3.  $mhSmtpMail_Port       = "25";                  
    4.  $mhSmtpMail_Username   = "***";
    5.  $mhSmtpMail_Password   = "******";              
    6.  $mhSmtpMail_From       = "***";
    7.  
    8.  
    9.  
    10. {
    11.  
    12.   global $mhSmtpMail_Server, $mhSmtpMail_Port, $mhSmtpMail_Username, $mhSmtpMail_Password;
    13.  
    14.   $mhSmtpMail_localhost  = "localhost";
    15.   $mhSmtpMail_newline    = "\r\n";
    16.   $mhSmtpMail_timeout    = "30";
    17.  
    18.   $smtpConnect = fsockopen($mhSmtpMail_Server, $mhSmtpMail_Port, $errno, $errstr, $mhSmtpMail_timeout);
    19.   $smtpResponse = fgets($smtpConnect, 515);
    20.  
    21.   if(empty($smtpConnect))
    22.     {
    23.       $output = "Failed to connect: $smtpResponse";
    24.       return $output;
    25.     }
    26.   else
    27.     {
    28.       $logArray['connection'] = "Connected: $smtpResponse";
    29.     }
    30.       fputs($smtpConnect, "HELO $mhSmtpMail_localhost" . $mhSmtpMail_newline);
    31.   $smtpResponse = fgets($smtpConnect, 515);
    32.   $logArray['heloresponse'] = "$smtpResponse";
    33.  
    34.   fputs($smtpConnect,"AUTH LOGIN" . $mhSmtpMail_newline);
    35.   $smtpResponse = fgets($smtpConnect, 515);
    36.   $logArray['authrequest'] = "$smtpResponse";
    37.  
    38.   fputs($smtpConnect, base64_encode($mhSmtpMail_Username) . $mhSmtpMail_newline);
    39.   $smtpResponse = fgets($smtpConnect, 515);
    40.   $logArray['authmhSmtpMail_username'] = "$smtpResponse";
    41.  
    42.   fputs($smtpConnect, base64_encode($mhSmtpMail_Password) . $mhSmtpMail_newline);
    43.   $smtpResponse = fgets($smtpConnect, 515);
    44.   $logArray['authmhSmtpMail_password'] = "$smtpResponse";
    45.  
    46.   fputs($smtpConnect, "MAIL FROM: $mhSmtpMail_Username" . $mhSmtpMail_newline);
    47.   $smtpResponse = fgets($smtpConnect, 515);
    48.   $logArray['mailmhSmtpMail_fromresponse'] = "$smtpResponse";
    49.  
    50.   fputs($smtpConnect, "RCPT TO: $to" . $mhSmtpMail_newline);
    51.   $smtpResponse = fgets($smtpConnect, 515);
    52.   $logArray['mailtoresponse'] = "$smtpResponse";
    53.  
    54.   fputs($smtpConnect, "DATA" . $mhSmtpMail_newline);
    55.   $smtpResponse = fgets($smtpConnect, 515);
    56.   $logArray['data1response'] = "$smtpResponse";
    57.  
    58.   fputs($smtpConnect, "Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
    59.  
    60.   $smtpResponse = fgets($smtpConnect, 515);
    61.   $logArray['data2response'] = "$smtpResponse";
    62.  
    63.   fputs($smtpConnect,"QUIT" . $mhSmtpMail_newline);
    64.   $smtpResponse = fgets($smtpConnect, 515);
    65.   $logArray['quitresponse'] = "$smtpResponse";
    66.   }
    67. echo "<font size=\"-1\"><hr><form method=\"POST\" action=\"index.php\">";
    68. echo "your adress<br><input type=\"text\" name=\"fromemail\" value=\"$fromemail\" size=\"25\"><br>";
    69. echo "Theme<br><input type=\"text\" name=\"subject\" value=\"$subject\" size=\"50\">";
    70. echo "<br>Text:<br><textarea name=\"body\" rows=\"8\" cols=\"50\"></textarea>";
    71. echo "<br><input type=\"submit\" value=\"Send\"></form></font>";
    72. for ($i = 0; $i < sizeof ($maillist); $i++) print $maillist[$i]. "<br>";
    73. $homepage = "";
    74. error_reporting(0);
    75. $file = "maillist.txt";
    76. $maillist = file($file);
    77. print "to base". sizeof($maillist) ." adress<br>";
    78. for ($i = 0; $i < sizeof ($maillist); $i++)
    79. {
    80. #echo($maillist[$i]."<br>");
    81. function MailSmtp($maillist[$i], $subject,$body ."$odr $homepag $maillist[$i]",
    82. "From: $fromemail");
    83. }
    84. ?>
     
  6. MaXyC_Web_Studio

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

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    я думаю вы ошиблись форумом. где покупали хостинг там и с прашивайте
     
  7. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    Спасибо за помощь!
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    В папке libs должен быть ZendFramework
    Код (PHP):
    1.         function ZendSendmail($server, $port, $login, $password, $from_name, $to, $subject, $text) {
    2.         require_once 'libs/Zend/Config.php';
    3.         require_once 'libs/Zend/Mail.php';
    4.         require_once 'libs/Zend/Config/Ini.php';
    5.         if (!empty($server)) {
    6.             require_once 'libs/Zend/Mail/Transport/Smtp.php';
    7.             $transport = new Zend_Mail_Transport_Smtp($server, array(
    8.                         'port' => $port,
    9.                         'auth' => 'login',
    10.                         'username' => $login,
    11.                         'password' => $password
    12.                     ));
    13.             Zend_Mail::setDefaultTransport($transport);
    14.         }
    15.         $mail = new Zend_Mail('windows-1251');
    16.         $mail->setFrom($login, $from_name);
    17.         $mail->addTo($to, $to);
    18.         $mail->setSubject($subject);
    19.         $mail->setBodyText($text);
    20.         return $mail->send();
    21.     } 
    Функция отправляет письмо через любой SMTP, хоть локальный хоть внешний
     
  9. phpjunior

    phpjunior Новичок

    С нами с:
    23 дек 2013
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Барнаул
    А да ладно фигня тот скрипт я нашёл рабочий классный сделал логи всё работает. так же там можно добавлять бесконечное количество получателей просто дублируя этот кусочек
    Код (Text):
    1. fputs($smtp_conn,"RCPT TO: $mail");
    2.   $data = get_data($smtp_conn);
    Сейчас мне нужна помошь немножко по другому. RCPT TO это SMTP запрос на добавление получателя его можно без конца дублировать. Проблема в том что RCPT TO выполняеться один раз. Думал всю ночь и пришло несколько идей
    1- Запихнуть в массив всех получателе и продублировать RCPT TO в документе в каждый из них запихнуть этот массив
    2- Либо при получении ответа от сервера if заменить $mail на следующий адресс или строку из документа
    есть ещё варианты???