Makc666 0 Опубликовано: 12 декабря 2010 Рассказать Опубликовано: 12 декабря 2010 (изменено) Речь идёт о файле: mail.class.php И о 1ой строке: $this->mail_headers .= "Return-Path: <" . $this->from . ">" . $this->eol; И о 2ой строке: if( ! @mail( $this->to, $this->subject, $this->message, $this->mail_headers ) ) { Если читать manual, то: http://ru.php.net/manual/en/function.mail.php bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) additional_headers (optional) Failing to do this will result in an error message similar to Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. The From header sets also Return-Path under Windows. additional_parameters (optional) The additional_parameters parameter can be used to pass additional flags as command line options to the program configured to be used when sending mail, as defined by the sendmail_path configuration setting. For example, this can be used to set the envelope sender address when using sendmail with the -f sendmail option. The user that the webserver runs as should be added as a trusted user to the sendmail configuration to prevent a 'X-Warning' header from being added to the message when the envelope sender (-f) is set using this method. For sendmail users, this file is /etc/mail/trusted-users. Таким образом видно, что: 1ых, под Windows Return-Path берется из From 2ых, "envelope sender address" или другими словами Return-Path задаётся с помощью -f в 4ой переменной $additional_parameters функции mail(). Если смотреть на строку: if( ! @mail( $this->to, $this->subject, $this->message, $this->mail_headers ) ) { То передать в $this->mail_headers (или другими словами передать в $additional_headers) строку Return-Path не представляется возможным. Если не указано -f, то тот же sendmail подставляет свою строку H?P?Return-Path: <$g>, что будет на деле выглядеть как Return-Path: <www@имя_хоста>. Что нужно сделать в файле mail.class.php 1. Удалить строку: $this->mail_headers .= "Return-Path: <" . $this->from . ">" . $this->eol; 2. После строки: $this->from = $config['admin_mail']; Добавить строку: $this->rpath = $config['admin_mail']; 3. После строки: $this->from = preg_replace( "/,,/", ",", $this->from ); Добавить строку: $this->rpath = (!(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') && $this->rpath != null) ? '-f '.$this->rpath : null; 4. Заменить строку: if( ! @mail( $this->to, $this->subject, $this->message, $this->mail_headers ) ) { На строку: if( ! @mail( $this->to, $this->subject, $this->message, $this->mail_headers, $this->rpath ) ) { И тогда Return-Path будет отлично добавляться в письмо. А это в свою очередь поможет проходить проверку SPF. P.S. Ближайшую неделю не смогу комментировать данную тему. И такое небольшое дополнение для Вас, Владимир. Присмотритесь к скрипту http://xpertmailer.sourceforge.net XPertMailer is a PHP class that will help you send/read encoded MIME type mail messages (text, HTML, HTML embedded images, attachments) towards a localhost, client, relay with optional authentication and TLS/SSL support. Cc and Bcc functionality are included.The XPertMailer class functions are optimised to execute in a very small time and also to be easy to use. This reduces the size of the code and the time required to write it.The names of the public functions in the XPertMailer class are eloquent so that they can be used without any confusions being made.The data sendig is done according to the RFC 821, RFC 822, RFC 2821, RFC 2822, RFC 2487 and the message type is in conformity with the RFC 2045, RFC 2046, RFC 2047, RFC 2048 and RFC 2049. Это потрясающе написанный скрипт для отправки почты. Очень легкий в использовании и очень гибкий. Поэтому возможно в будущих версиях Вы захотите его использовать. И его использую во многих своих скриптах и очень-очень доволен. Изменено 12 декабря 2010 пользователем Makc666 Цитата Ссылка на сообщение Поделиться на других сайтах
Captain 625 Опубликовано: 12 декабря 2010 Рассказать Опубликовано: 12 декабря 2010 Чет, Владимир не отвечает? Я в этом не понимаю, но чисто интересно пару слов от разработчика услышать/увидеть. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 13 декабря 2010 Рассказать Опубликовано: 13 декабря 2010 Если не указано -f, то тот же sendmail подставляет свою строку H?P?Return-Path: <$g>, что будет на деле выглядеть как Return-Path: <www@имя_хоста>. Неверно. У меня почему то такой проблемы нет, как и 99% других. Это напрямую зависит от настроек почтового сервера. Единственное чего нет в скрипте, это управления additional_parameters но это вовсе не значит, что неверно указывается заголовок Return-Path, единственное это то что на некоторых серверах его нужно указывать как additional_parameters, а на некоторых его неуказать никак, а на большинстве именно так как используется в DLE. О чем кстати написано в мануале, который вы привели в этой теме. Цитата Ссылка на сообщение Поделиться на других сайтах
Makc666 0 Опубликовано: 23 декабря 2010 Рассказать Опубликовано: 23 декабря 2010 Автор Неверно. У меня почему то такой проблемы нет, как и 99% других. То, что у других такой проблемы нет - это не означает, что её нет. Это может означать, что они эту проблему и не замечали. Это напрямую зависит от настроек почтового сервера. Единственное чего нет в скрипте, это управления additional_parameters но это вовсе не значит, что неверно указывается заголовок Return-Path, единственное это то что на некоторых серверах его нужно указывать как additional_parameters, а на некоторых его неуказать никак, а на большинстве именно так как используется в DLE. О чем кстати написано в мануале, который вы привели в этой теме. Владимир, поверьте мне, ошибка есть. Вы можете называть это "управления additional_parameters". Наверное Вы в этом правы. К примеру, vBulletin имеет такую опцию в настройках. Установить параметр "-f" Некоторые сервера с sendmail могут требовать установить параметр "-f" для отправки писем через PHP. Если ваши пользователи не получают письма, отправленные с этого форума, попробуйте включить эту опцию. Однако, скорее всего подобная проблема не связана с этой опцией. Этот параметр не работает, если включен безопасный режим PHP. Enable "-f" Parameter Some email servers require the "-f" parameter to be sent with email calls from PHP. If users are not receiving email from your forum, then you can try enabling this option. В коде это выглядит как: if (!SAFEMODE AND $this->registry->options['needfromemail']) { $result = @mail($this->toemail, $this->subject, $this->message, trim($this->headers), '-f ' . $this->fromemail); } else { $result = @mail($this->toemail, $this->subject, $this->message, trim($this->headers)); } Я написал Вам данный пост, т.к. "привык", что все скрипты, которыми я пользуюсь, используют параметр -f для отправки почты и для меня было удивительно обнаружить, что в DLE этого нет и это вызывает проблемы в его работе. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 23 декабря 2010 Рассказать Опубликовано: 23 декабря 2010 Makc666, Вы несовсем верно интерпретируете мои сообщения. Если вы посмотрите на раздел форума, то увидите что мы находимся в разделе приема багов, притом что баг обозначен как Return-Path задан неверно так вот такого бага нет, он задан верно. О чем было сообщено, чтобы другие пользователи в случае проблем с отправкой не правили скрипт, т.к. в 99% это не решит проблем с их отправкой. также я указал что утверждение Если не указано -f, то тот же sendmail подставляет свою строку H?P?Return-Path: <$g>, что будет на деле выглядеть как Return-Path: <www@имя_хоста>. в корне неверно, потому как вы ее описываете как применительную ко всем sendmail, а это неправда и объяснил почему. Это применительно исключительно вашего sendmail сервера, а всех, о чем я собственно и написал. Я вовсе не дискутировал с вами нужно ли добавлять настройку с -f или нет. По одной простой причине, такая дискуссия не относится к разделу багов скрипта. Это относится к пожеланиям к новым версиям скрипта, но никак не к багам. Поэтому я не говорил что эта настройка не нужна в скрипте, она больше нужна, чем не нужна т.к. 1% это тоже процент, и в данном вопросе я с вами вовсе не спорил, и согласен с вами, поэтому мне не нужно доказывать обратное, я прекрасно понимаю о чем идет речь и для чего.Вообще я всегда цитирую то что я комментирую, т.е. я пишу только по поводу того что процитировал в сообщении, все что не входит в эти цитаты, значит не входит в текст моего комментария. Цитата Ссылка на сообщение Поделиться на других сайтах
Makc666 0 Опубликовано: 23 декабря 2010 Рассказать Опубликовано: 23 декабря 2010 Автор Makc666, Вы несовсем верно интерпретируете мои сообщения. Если вы посмотрите на раздел форума, то увидите что мы находимся в разделе приема багов, притом что баг обозначен как Return-Path задан неверно так вот такого бага нет, он задан верно. О чем было сообщено, чтобы другие пользователи в случае проблем с отправкой не правили скрипт, т.к. в 99% это не решит проблем с их отправкой. Да, Владимир, я действительно неправильно интерпретировал Ваш ответ. После данного Вашего объяснения я понимаю, что Вы пытались мне ответить. Приношу свои извинения. также я указал что утверждение Если не указано -f, то тот же sendmail подставляет свою строку H?P?Return-Path: <$g>, что будет на деле выглядеть как Return-Path: <www@имя_хоста>. в корне неверно, потому как вы ее описываете как применительную ко всем sendmail, а это неправда и объяснил почему. Это применительно исключительно вашего sendmail сервера, а всех, о чем я собственно и написал. Спасибо за доброжелательное пояснение. Возможно я правда не сталкивался с sendmail, которые работают иначе. Я вовсе не дискутировал с вами нужно ли добавлять настройку с -f или нет. По одной простой причине, такая дискуссия не относится к разделу багов скрипта. Это относится к пожеланиям к новым версиям скрипта, но никак не к багам. Поэтому я не говорил что эта настройка не нужна в скрипте, она больше нужна, чем не нужна т.к. 1% это тоже процент, и в данном вопросе я с вами вовсе не спорил, и согласен с вами, поэтому мне не нужно доказывать обратное, я прекрасно понимаю о чем идет речь и для чего. Я так понимаю, что Вы приняли это во внимание и писать об этом в раздел пожеланий необходимости нет? Хотя я такой раздел и не нашёл Вообще я всегда цитирую то что я комментирую, т.е. я пишу только по поводу того что процитировал в сообщении, все что не входит в эти цитаты, значит не входит в текст моего комментария. Я учту данное замечание на будущее. Спасибо ещё раз за Ваше терпение. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 23 декабря 2010 Рассказать Опубликовано: 23 декабря 2010 Я так понимаю, что Вы приняли это во внимание и писать об этом в раздел пожеланий необходимости нет? Хотя я такой раздел и не нашёл нет писать дополнительно не нужно, я сделал себе пометку на этот счет Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.