Страница 4 из 10

Добавлено: 29 авг 2014, 16:34
Dragon_Knight
Максим писал(а):Вы где-нибудь видели упоминание этой переменной в руководстве?
А Вы видели вообще упоминание о sendmail в руководстве? Я нет...
Максим писал(а):В стандарте RFC идёт речь про поле FROM, или TO, а не про какое-то поле имени и уж тем более не про некую переменную %force_sender%.
'force_sender' вообще-то обязательно необходимо указывать и в 99% случаев оно должно-быть равно логину отправителя, и тем более никак не может быть пустой, иначе, любой уважающий себя SMTP сервер пошлёт нафиг такое письмо.

И опять, Вы, Максим, как 10-ти летнее дидя начинаете включать дурачка, считая что у Вас всё правильно, а во круг вас одни идиоты.

Имя отправителя по стандарту должно быть указано в настройках программы-отправителя, в частном случае в sendmail. Меня совершенно не интересуют классы SMTP как и не интересует указание хедеров в mail(). Меня интересует указание отправителя по умолчанию в конфиге sendmail, что есть параметр %force_sender%.
В можете до посинения писать в хедерах любой адрес, но почта будет отправляться только при:
1) Указанном адресе отправителя в переменной %force_sender%
2) Указанном адресе отправителя в хедере, однако, если мы указали %force_sender%, то это поля не изменить из хедера. Это всё описано в RFC.

И отсюда был вопрос, точнее предложение, привести поле 'ОТ', оно-же 'force_sender' до вида, описанного в RFC 2822, т.е:
1) user@example.com
2) User <user@example.com>

И так-же, если, как Вы говорите, sendmail ничего не подставляет, то почему при указании в force_sender значения 'admin@domain.zone' исходящий пакет содержит сточку: "From: <admin@domain.zone>"? Откуда скобочки появились?

Добавлено: 29 авг 2014, 17:45
Максим
Dragon_Knight писал(а):'force_sender' вообще-то обязательно необходимо указывать и в 99% случаев оно должно-быть равно логину отправителя
Только в ваших мечтах :shock:

force_sender это выдуманная создателем программы fake sendmail переменная, которая была предназначена для принудительной замены адреса отправителя в письмах, если переменная не пустая. Каким боком вы сюда приплели стандарт RFC 2822 который об этой переменной ничего не знает, ибо её там и в помине никогда не было?
Dragon_Knight писал(а):И опять, Вы, Максим, как 10-ти летнее дидя начинаете включать дурачка, считая что у Вас всё правильно, а во круг вас одни идиоты.
Дурачка включаете как раз вы, пытаясь рассказывать про какие-то мифические переменных, о которых ни один стандарт не знает. И да, у меня в sendmail всё правильно.
Dragon_Knight писал(а):Имя отправителя по стандарту должно быть указано в настройках программы-отправителя, в частном случае в sendmail.
Ох лол, в каком стандарте? В вашем личном? Ну так sendmail не по вашим стандартам написан. Ни в каком стандарте, в том числе RFC 2822, не описывается то, что должно быть в настройках sendmail или какой-либо другой программы по отправке почты. Это чушь, почитайте хоть само название стандарта - ФОРМАТ ИНТЕРНЕТ СООБЩЕНИЙ, цитата из стандарта:

This standard specifies a syntax for text messages that are sent
between computer users, within the framework of "electronic mail"
messages.

Этот стандарт определяет синтаксис текстовых сообщений пересылаемых между пользователями посредством электронной почты.


В стандартах могут описываться протоколы передачи данных, формат писем и заголовков, но не настройки программ.
Dragon_Knight писал(а):Меня совершенно не интересуют классы SMTP как и не интересует указание хедеров в mail(). Меня интересует указание отправителя по умолчанию в конфиге sendmail, что есть параметр %force_sender%.
Если вам это так нужно, то я могу это сделать. Этот параметр остался от оригинальной программы, и как я уже говорил был предназначен лишь для замены АДРЕСА, но не имени.
Dragon_Knight писал(а):В можете до посинения писать в хедерах любой адрес, но почта будет отправляться только при:
1) Указанном адресе отправителя в переменной %force_sender%
2) Указанном адресе отправителя в хедере, однако, если мы указали %force_sender%, то это поля не изменить из хедера. Это всё описано в RFC.
:lol: ЛОЛ ГДЕ ???? ДАЙТЕ мне ссылку на этот стандарт, где написано то, что вы сейчас сказали? Покажите мне где в упомянутом вами RFC 2822 хотя бы само слово %force_sender%? Вы хоть понимаете о чём вы говорите? Какое отношение стандарт ФОРМАТА EMAIL СООБЩЕНИЙ может иметь к настройкам какой-либо программы? И уж тем более к названиям переменных в программах и к тому как они в программе используются? Я даже боюсь представить каким образом выдуманная автором fake sendmail переменная в вашей голове перекочевала в мировые стандарты...

Более того, вы что, сами писали программу комплектную sendmail и знаете как там что и когда отправляется? Никаких %force_sender% для отправки письма не нужно, уверяю вас. И адрес с именем как раз таки указывается в хедерах писем при их формировании, не важно вручную или через спец. скрипты.
Dragon_Knight писал(а):И отсюда был вопрос, точнее предложение, привести поле 'ОТ', оно-же 'force_sender' до вида, описанного в RFC 2822, т.е:
Поле ОТ кого, а точнее заголовок From: имеет именно такой вид как и положено при отправке писем через sendmail из комплекта Open Server. Почему вы считаете что это не так и предлагаете это реализовать - загадка. Вот пример того что получается:
Date: Fri, 29 Aug 2014 18:30:10 +0400
From: =?utf-8?B?0JLQu9Cw0LTQuNC80LjRgCDQktC70LDQtNC40LzQuNGA0L7QstC40Yc=?= <xxxxxx@mail.ru>
Message-ID: <xxxxxxxxxxxx@mail.ru>
X-Priority: 3
X-Mailer: PHPMailer 5.2.8 (https://github.com/PHPMailer/PHPMailer/)
MIME-Version: 1.0
В вышеуказанном поле From, которое я взял из отправленного письма, по стандарту закодировано имя и адрес отправителя, как вы и хотите.
Владимир Владимирович <xxxxxx@mail.ru>
И так-же, если, как Вы говорите, sendmail ничего не подставляет, то почему при указании в force_sender значения 'admin@domain.zone' исходящий пакет содержит сточку: "From: <admin@domain.zone>"? Откуда скобочки появились?
Уже ответил на это выше, этот параметр остался от старой версии программы и предназначен лишь для подмены адреса отправителя, если параметр не пустой. Адреса, но не имени. Но ваш посыл я понял, вы хотите чтобы можно было указывать и имя, сделаю это в будущей версии. Только не понятно зачем вы выдумываете небылицы про стандарты с несуществующими в них переменными, причём стандарты которые вообще не имеют отношения к вопросу.

Ближайшее обновление будет через 2 недели, ориентировочно. Точную дату пока не подскажу к сожалению.

Там формат хранения настройки нужно в самом Open Server поменять, а это уже замена openserver.exe нужна, поэтому так сразу не смогу вам сделать это. Но если хотите, то сделаю вам только sendmail.exe, а имя и адрес в параметре force_sender (во временном файле sendmail.ini) пока будете указывать вручную. Ну или уже подождите обновления.

Добавлено: 29 авг 2014, 19:12
Dragon_Knight
Где я привязал RFC 2822 и sendmail? Покажите эту строчку мне пожалуйста.

Я лишь сказал что ВАША программа Open Server имеет параметр под названием: "Email отправителя" с макросом %force_sender% и ВАШ переписанный sendmail имеет параметр "force_sender", пусть даже что он старый и не используется, НО если отправлять письмо в одну строчку: "mail("admin@mail.ru","Тема","Текст")", письмо не уйдёт, пока не будет указан этот параметр, а значит для совместимости его указание обязательно, но видеть в почте, в качестве имени отправителя адрес а не имя, - не хочется.

Я прекрасно знаю как отправить письмо, что-бы были все хедеры в порядке, что-бы аватарка отображалась и так далее, согласно всем нормам, да и сам sendmail используется как заглушка от метода mail(), но это Вы занимаетесь разработкой 'идеальной' программы, как для для web разработчиков так и для public сервера.

Собственно Это ваша задача, решить полезно это или нет. По мне, это полезно, и избавит от вопросов типа "А как указать имя отправителя", не прибегая к описанием хедеров и многомерного массива этих самых хедеров, достаточно будет указать имя в настройках программы.
Что касается адреса отправителя, я-бы сделал его равным логину пользователя, ибо в 99% случаев используется SMTP от yandex, google или mail, и никакой из этих серверов не примет письмо, если адрес отправителя != логин отправителя.

Добавлено: 29 авг 2014, 19:23
Максим
Dragon_Knight, Хм, я ещё не видел ни одного php скрипта, который бы не указывал в заголовках имя отправителя или его адрес. Сама переменная была сделана автором изначальной программы лишь для того, чтобы избежать ошибок при отправке писем, например в движке указан обратный адрес xxx@gmail.com, а отправка идёт через аккаунт xxx@mail.ru. Указывать отправителя нужно только в том случае, если вы не уверены что в ваших скриптах он верный, но никак не в 99% случаев. Хотя согласен с вами в том плане, что в 99% этот параметр использовать нужно (заполняется в настройках почты), чтобы не возникало путаницы.
Тут просто игра слов вышла, "необходимо" и "нужно". В 99% случаев необходимости нет, потому что всё указывается в скриптах, но в 99% указывать нужно бы, чтобы не возникало путаницы да и в самих скриптах многим лень менять отправителя. Тут с вами согласен на 100% :P

[upd=1409329736][/upd]
Dragon_Knight писал(а):Где я привязал RFC 2822 и sendmail? Покажите эту строчку мне пожалуйста.
Пожалуйста:
Dragon_Knight писал(а):Имя отправителя по стандарту должно быть указано в настройках программы-отправителя, в частном случае в sendmail.
Выше вы говорили про RFC 2822 или я не так понял? Имя отправителя, равно как и адрес, указываются в скриптах отправки почты, но никак не в программе. И уж тем более не существует стандартов по настройкам программ. В здешнем sendmail возможность подмены сделана исключительно для избежания ошибок при отправке.

Добавлено: 29 авг 2014, 19:44
Dragon_Knight
Максим, да, указываются, но как Вы сами согласились, стоит не досмотреть и получить не работающую почту на сайте, причём никаких ошибок отправки не будет, и только логи могут пролить свет на причину, но те, кто умеют пользоваться логами обычно не допускают таких ошибок.

Согласитесь-же, куда интереснее скопировать конфиг домена, сделать его кастомным, прописать там параметры для sendmail и больше вообще не думать что почта не уйдёт с этого домена, потому что неверно указано имя отправителя.
Более того, есть CMS, в которые по стандарту системный email = email администратора.
...
Хотя с другой стороны всё это частные случаи, и как ни крути, кому-то это нужно будет, кому-то нет, а кто-то предложит свой вариант, т.к. этот его не устроит или не будет работать....

В общем и целом лично мне это не столь важно, т.к. есть SMTP класс, который уже переписал под себя и буду использовать только его, но..... главное мы пришли к консенсусу, и осталось только Вам решить, на сколько это нужно и на сколько это целесобразно.

Добавлено: 29 авг 2014, 19:54
Максим
Dragon_Knight, написал выше что сделаю в след. версии, через 2 недели примерно будет обновление. Единственное мне нужно будет посмотреть как там sendmail эту настройку обрабатывает, видимо придётся парсить по скобкам <> и нужно будет описать этот момент в документации. Т.е. типа так:

Даша Маша <ololo@mail.ru> чтобы всё в одном поле (том же что и сейчас). Новое поле делать не хочу, там его сейчас вставлять некуда.

Добавлено: 29 авг 2014, 20:16
Dragon_Knight
Может как-то так? что-бы оставить совместимость с имеющей конструкцией.
if( strpos($force_sender, '<') > 0 && strpos($force_sender, '>') > 0 )
{
	// Новый метод, который будет вставить как email и имя отправителя
}
else
{
	// Как сейчас
}

Добавлено: 06 ноя 2014, 22:46
Максим
Dragon_Knight, в общем присел я сделать изменение в sendmail, которое вы просили, но тут обломчик наступил. В принципе надо было сразу вам сказать об этом, но видимо на тот момент я не вникал в подробности реализации.

Всё дело в том, что SMTP сервер (в данном случае наша псевдо-прослойка) по стандарту получает на вход исключительно "готовые данные", которые ни при каких обстоятельствах не должны содержаться символы, не присутствующие в ASCII таблице (т.е. можно только латинские буквы, цифры, знаки пунктуации и псевдографики).

Любая почтовая программа (The Bat, MS Outlook или Mozilla Thunderbird) или любой нормальный почтовый PHP класс сперва подготавливают данные, кодируют их согласно формата и только потом отправляют SMTP серверу.

Например:
From: =?windows-1251?b?0J7RgtC/0YDQsNCy0LjRgtC10LvRjD89?= 
To:  =?windows-1251?b?0J/QvtC70YPRh9Cw0YLQtdC70Yw/PQ==?= 
Subject: =?windows-1251?b?0Y3RgtC+INGC0LXQvNCwINGB0L7QvtCx0YnQtdC90LjRjz89?=
Или вот для UTF-8
Subject: =?utf-8?B?UmU6INCg0LXQs9C40YHRgtGA0LDRhtC40Y8=?=
Вы же предлагаете мне подсунуть SMTP серверу голые данные, но в этом случае письмо у получателя будет отображаться криво, если оно вообще будет принято сервисом (gmail, mail.ru и т.д.) на отправку. Если уж нет возможности указывать имя отправителя в скриптах и так хочется чтобы имя попадало в письма из настроек Open Server , то нужно чтобы сама программа sendmail определяла кодировку письма, тип кодирования (Q-encoded, Base64 и т.д.), выполняла кодирование имени отправителя и отправляла на реальный SMTP сервер уже подготовленные данные, хотя никакие данные подготавливать она не должна. Данные на входе в нашу sendmail-заглушку УЖЕ должны быть готовыми, программа ничего делать не должна. Так что извините, но сами понимаете, влезать в дебри mail кодирования в Delphi ради имени отправителя я уж точно не буду. Давайте всё делать по стандарту, а не через ж. ;)

Добавлено: 06 ноя 2014, 22:53
Dragon_Knight
Тогда я совершенно не въезжаю как semdmail подставляет force_sender=%force_sender%

[upd=1415304184][/upd]
Я вообще считаю что функцию mail(); нужно первым делом засунуть в disable_functions и никогда не вспоминать про неё при написании проектов. На то есть много причин, но описывать я не буду.
Но не все так думают, в т.ч. некоторые хостеры, и считают отправкой писем через SMTP класс - нелепостью.

Лично у меня оно будет просто заглушкой, на всякий случай, что-бы из-за кривого кода или невнимательности не потерять письма, и хотелось получить на выходе письмо не отличающееся от отправлено через mail() и SMTP класс.

Добавлено: 06 ноя 2014, 23:08
Максим
Dragon_Knight, поправил сообщение, перечитайте ещё раз, исправил несколько ошибок которые меняли смысл сказанного. А что касается %force_sender% то эта настройка предназначена для подстановки адреса отправителя если он не указан в заголовках письма. Извиняюсь, на предыдущей странице дезинформировал вас по поводу того, что происходит замена. Точнее я нашел в программе ошибку, действительно частичная замена происходила, но это ошибка.

В ближайшем обновлении я это исправлю. %force_sender% можно будет использовать только для указания адреса отправителя (без имени) если нет возможности указать его в скрипте при формировании письма. Если же в письме обратный адрес будет указан (не важно с именем или без), то %force_sender% будет игнорироваться даже если заполнен в настройках Open Server.

[upd=1415304697][/upd]
Dragon_Knight писал(а):Я вообще считаю что функцию mail(); нужно первым делом засунуть в disable_functions
Есть мощные PHP классы для отправки писем, которым не важно какую функцию использовать mail() или SMTP. Хотя в чистом виде без обвязки в виде правильных PHP классов функция mail() действительно бесполезна и в таком виде ей место в disable_functions. :)

[upd=1415305202][/upd]
Хотя может сделаю всё таки подмену адреса как и было задумано предыдущим автором программы, пока не знаю, но не суть. Главное мы выяснили что имя указать в настройках Open Server не получится, только адрес.