За последние 24 часа нас посетили 17107 программистов и 1835 роботов. Сейчас ищут 1718 программистов ...

При наличии параметра headers функция mail не работает

Тема в разделе "Работа с почтой", создана пользователем akhn, 2 май 2015.

  1. akhn

    akhn Новичок

    С нами с:
    2 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Подскажите, кто знает, сломал всю голову... Примерный текст скрипта:
    Код (PHP):
    1.   $subject = "Форма обратной связи";
    2.   $message = "какое-то содержание";
    3.   $emailto = "name@mail.ru";
    4.   $emailfrom = "name@yandex.ru";
    5. // пример 1 заголовка
    6. // $headers = "Content-type:text/html; Charset=utf-8\r\nFrom:".$emailfrom."\r\n"
    7. // пример 2 заголовка
    8. // $headers = 'From: name@yandex.ru' . "\r\n" . 'Reply-To: name@yandex.ru' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
    9. // пример 3 заголовка
    10. $headers  = 'MIME-Version: 1.0' . "\r\n";
    11. $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    12. $headers .= 'To: <name@mail.ru>' . "\r\n";
    13. $headers .= 'From: <name@yandex.ru>' . "\r\n";
    14. $headers .= 'Cc: name@mail.ru' . "\r\n";
    15. $headers .= 'Bcc: name@mail.ru' . "\r\n";
    16.   $chek = mail($emailto, $subject, $message, $headers); //отправляем сообщение
    17.   if($chek) echo "Ваше письмо1 успешно отправлено!";
    18.   else echo "Ваше письмо1 не отправлено!";
    19.   $chek = mail($emailto, $subject." short", $message); //отправляем сообщение
    20.   if($chek) echo "Ваше письмо2 успешно отправлено!";
    21.   else echo "Ваше письмо2 не отправлено!";
    так вот - оба варианта (с $headers и без) ошибок не возвращают, но до адресата письмо доходит только (!) в том случае, если $headers не был указан. Перепробовал самые разные варианты (в коде приведены 3 шт (2 из них взяты с этого сайта), но были и другие).
    В чём дело?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. akhn

    akhn Новичок

    С нами с:
    2 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Если Вы невнимательно прочитали, то вопрос был не в том, какие ещё средства посылки почты существуют в PHP и где их найти, а как заставить mail() работать в соответствии с описанием. Но, что важнее всего, мне заранее неизвестны реквизиты smtp-сервера - mail их не требует.
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    akhn а может ты не внимательно читал ответ?

    Письма могут не проходить проверку, и почта это не гарантированный способ передачи (особенно отправлять с mail.ru на yandex.ru со своего сервера, это и к другим почтовым серверам относится, лучше у хостера получи почту и с неё отправляй).
    Не осилил функцию mail(), читай RFC по протоколу отправки почты.
    Или постарайся изучить мой ответ, если почитать документацию PHPMailer и посмотреть примеры использования, то можно обнаружить как его использовать с mail() https://github.com/PHPMailer/PHPMailer/blob/master/examples/mail.phps
     
  5. akhn

    akhn Новичок

    С нами с:
    2 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Если бы ТЫ разбирался в вопросе, то знал бы, что внутри класса phpmailer всё равно инспользует mail() с параметром headers, это значит, что вся эта невдолбенная конструкция (phpmailer) не работает, от слова совсем.
    В итоге мы выходим на исходную: почему не работает mail() с параметром headers? - и именно в этом случае.
    PS научись общаться! - отсылка на сторонний пакет без слова комментария это не ответ, а профанация
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    тут не кто никому ничего не должен, если phpmailer не работает, значит настройки сервера неверные, проследи какое письмо уходит с сервер и какой ответ на него получает.
    Твой код у меня отлично работает.
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Да ну?
     
  8. akhn

    akhn Новичок

    С нами с:
    2 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Ну да! - см. строку 650 в файле class.phpmailer.php
    Стоит закомментировать параметр(ы) после $body в вызове, письма начинают приходить.
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А все остальное там чисто для значимости? Вообще, мне конечно пофиг, но логика тут проста. Если почта не отправляется с кривыми заголовками, значит скорее всего они таки кривые. Заюзай нормальный пакет, посмотри чем сформированное ими письмо отличается от твоего, внеси правки. Вон, denis01 вообще пишет что у него все нормально уходит - это прозрачно намекает, что решение не лежит на поверхности и перестановками наугад тут не поможешь. Может проблемы в сервере или где ещё... Но если хочешь отрицать очевидные вещи, то это только лишь твои проблемы )
     
  10. akhn

    akhn Новичок

    С нами с:
    2 май 2015
    Сообщения:
    6
    Симпатии:
    0
    ну, если обращаться к логике... она - упрямая вещь. Дело в том, что все(!) заголовки формируются phpmailer-ом.

    Добавлено спустя 39 секунд:
    согласен. Пардон, если что не так.
    Настройки, вполне возможно, неверные, но ни повлиять на них, ни узнать путь решения сейчас нет возможности - нет связи с техподдержкой хостинга.
    Из всех инструментов диагностики располагаю только возможностью принимать (или не принимать) письма, направленные на свой адрес и сообщениями на веб-странице.
    Похоже, он работает где и у кого угодно :(
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ну раз упрямая, то удачи в борьбе с ветряными мельницами ))
     
  12. akhn

    akhn Новичок

    С нами с:
    2 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Спасибо всем заинтересовавшимся!
    Разобрался. "Дело было не в бобине", как говорится.
    Оказалось, работает-таки mail() с упомянутым параметром, но только в том случае, если в нём нет упоминания поля "From:".
    Вернее, даже так: не работает, если значение этого поля отличается от того, что присваивается автоматически, а значение это имеет абсолютно блевотный вид:
    xxx-su_fd36a3e0@xxx.ru
    (иксы - мои)
    Собственно, ради чего всё и было затеяно - изменить sender-а, т к половина почтовых систем эти письма сразу в спам отправляет.
    Короче, обложили, гады.
     
  13. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Даю подсказку - это автоматически созданный ящик postfix'ом, или что там у вас стоит. Почитайте про настройку почтовой службы, создайте себе тот ящик, который вы хотите, и его указывайте в from