За последние 24 часа нас посетили 17558 программистов и 1315 роботов. Сейчас ищут 1730 программистов ...

Отправить письма нескольким адресатам

Тема в разделе "Работа с почтой", создана пользователем EndoCrinolog, 6 фев 2012.

  1. EndoCrinolog

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

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Итак, у меня есть несколько почтовых ящиков. Когда столкнулся с проблемой отправки нескольким адресатам через SMTP, то яндекс мне предложил 2 решения:
    1) Прописать адресатов в команде "RCPT TO: "
    Решение 1:
    Прописав юзеров так: <mail1@mail.ru>,<mail2@mail.ru> - он отправил только первому адресату
    Решение 2:
    Прописав юзеров так: <mail1@mail.ru><mail2@mail.ru> - он отправил только первому адресату
    Решение 3:
    Прописав юзеров так: <mail1@mail.ru, mail2@mail.ru> - он выдал ошибку о том, что сервер не принял эту команду

    2) Используя команду RSET, сбрасывать и заново прописать адресата. Получилось такое:
    Код (PHP):
    1. <?php
    2. // Кусок кода:
    3. fputs($smtp_conn,"RCPT TO: <mail1@.ru>\r\n");
    4. $code = substr(get_data($smtp_conn),0,3);
    5. if(($code != 250)&&($code != 251)){
    6. echo "Сервер не принял команду RCPT TO";
    7. fclose($smtp_conn);
    8. }
    9.  
    10. fputs($smtp_conn,"RSET\r\n");
    11. $code = substr(get_data($smtp_conn),0,3);
    12. if($code != 354){
    13. echo "Сервер не принял RSET";
    14. fclose($smtp_conn);
    15. }
    16.  
    17. fputs($smtp_conn,"RCPT TO: <mail2@.ru>\r\n");
    18. $code = substr(get_data($smtp_conn),0,3);
    19. if(($code != 250)&&($code != 251)){
    20. echo "Сервер не принял команду RCPT TO";
    21. fclose($smtp_conn);
    22. }
    23.  
    24. fputs($smtp_conn,"DATA\r\n");
    25. $code = substr(get_data($smtp_conn),0,3);
    26. if($code != 354){
    27. echo "Сервер не принял DATA";
    28. fclose($smtp_conn);
    29. }
    30. ?>
    Он стал жаловаться на вторую отправку, не приняв команду RCPT TO.

    Друзья, не подскажете, что может тут не так?

    Добавлено спустя 10 минут 23 секунды:
    Всё, решение нашел =)
    Просто подряд вводить несколько раз RCPT TO с разными адресатами:
    Код (PHP):
    1. for ($ss=1; $ss<=$cou; $ss++){
    2. $fl = "subscribe/mail".$ss.".mail";
    3. $mail = "";
    4. $fp = fopen($fl, "r");
    5. while (!feof($fp)){
    6. $mail .= fgets($fp,2);
    7. }
    8. fclose($fp);
    9.  
    10. fputs($smtp_conn,"RCPT TO: <".$mail.">\r\n");
    11. $code = substr(get_data($smtp_conn),0,3);
    12. if(($code != 250)&&($code != 251)){
    13. echo "Сервер не принял команду RCPT TO";
    14. fclose($smtp_conn);
    15. } else {
    16. $mls .= "Отправлено: $ss$mail<br>";
    17. }
    18.  
    19. }
    20.