SMTPsend v1.9998
Заметил иттересную особенность — небольшие сообщения (ну скажем до 30кб) уходят на хорошей скорости (смотрю в хвосте файла *.smtp, да в принципе и визуально заметно при отправке). С увеличением размера скорость падает просто до неприличия (Send bps=9292). Пробовал отправить такой же большой файл через Аутлук (с той же машины, где и EServ, но мимо его) — все идет со свистом. Это как-то победимо? В запуске SMTPSend вроде ничего лишнего: agents\smtpsend.exe -dw -z -s %Server% -p 2500 -helo domainname -ehlo -u %Login% -w %Password% -o temp\%TempFile%.smtp.
К провайдеру/хостеру скорее всего проблема отношения не имеет — аналогичный результат у троих протестированных.
Сейчас под рукой исходников старого smtpsend нет, и я не вспомню, какой командой буфер подкрутить Попробуйте SmtpSend4 из Eserv/3, там по умолчанию больше.
Пользуясь доброжелательной обстановкой на форуме рискну задать в таком случае несколько вопросов по SMTPSend4:
1. Какой DNS нужно указать в -s ?
2. для чего служит ключ -ir ?
3. для чего служит ключ -sm ?
4. для чего служит ключ -dc ?
5. для чего служит ключ -s3 ?
6. для чего служит ключ -sh ?
7. для чего служит ключ -ll ?
8. Можно ли его настроить, чтобы он работал как и старый SMTPSend, через SMTP провайдера, ну или какой режим для него будет проще, надежнее, быстрее? Может быть можно обойтись малой кровью, слегка подправив командную строку (см. первый пост)?
Прошу прощения за ламерские вопросы, в этой области я не специалист, а решить проблему с отправкой почты надо. Если все это где-то подробно описано — ткните носом пожалуйста, с удовольствием прочту и изучу.
Огромное спасибо ! В выходные поэкспериментирую. Результат Вас интересует (по изменению скорости)? Могу сообщить
<?xml version='1.0' encoding='windows-1251'?>
<?xml-stylesheet href='atom.xsl' type='text/xsl'?>
<feed version='0.3' xmlns='http://purl.org/atom/ns#' xmlns:s='http://www.eserv.ru/smtpsend/log'>
<title>SMTPSEND v4.43 log</title>
<modified>2008-07-19T14:08:44Z</modified>
<author><name>smtpsend4 at </name></author>
<!— -dw -z -s dns_server_name -sh smtp_server_name -p 2500 -helo my_domain_name -ehlo -u my_login -w my_password -o temp\10.1.180869781.smtp -->
<s:Dns>Checking DNS settings.
Server: dns_server_name
DNS settings seem OK</s:Dns>
<entry>
<link rel='alternate' type='message/rfc822' href='sender_address!178775359!1' />
<id><![CDATA[000b01c8e98b$02423b00$0200a8c0@my_name]]></id>
<author><name>my_name</name><email>recipient_address</email></author>
<summary>To: recipient_address </summary>
<title></title>
<s:to>recipient_address</s:to>
<s:mx>MX: mxs.mail.ru</s:mx>
<content type='text/plain'><![CDATA[
]]></content>
<s:ior>Error: 10060 <s:log>2 </s:log>
</s:ior>
<s:host>Send to smarthost: smtp_server_name</s:host>
<content type='text/plain'><![CDATA[
220 mars.neolocation.net ESMTP Exim 4.66 Sat, 19 Jul 2008 14:09:07 +0300
EHLO my_domain_name
250-mars.neolocation.net Hello my_domain_name [IP_ADDRESS]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250-STARTTLS
(TLS supported)
250 HELP
MAIL FROM:<sender_name>
250 OK
RCPT TO:<recipient_name>
550 relay not permitted
]]></content>
<s:ior>Error: 550 <s:log>2 </s:log>
</s:ior>
<s:err>ERR:10060 </s:err>
<s:result>FAILED. Error code: 10060 </s:result>
</entry>
<s:exit>Exit OK</s:exit></feed>
Как я понял, при невозможности отправить напрямую была предпринята попытка отправить через почтовый сервер хостера, но она тоже завершилась ошибкой. Т.е. через 2500 порт не уходит ни напрямую, ни через SMTPserver. А хотелось бы иметь возможность при каких-то затыках с прямой отправкой отправить хоть по-старинке через SMTPserver. Что подкрутить в командной строке, пожалуйста подскажите если не трудно! И вообще как можете прокомментировать такую ситуацию с разницей в скорости отправки (имея ввиду, что через Аутлук тоже уходит со свистом)?
А в отношении скорости — видимо, провайдерский сервер начинает тормозить на больших письмах. Интересно, как Outlook письма на него загоняет. Может, использует pipelining на полную катушку?
Спасибо, понял. Ладно, посмотрим как он напрямую работать будет. Но командная строка у меня правильная-то хоть, аль чего подкрутить надо? Если письмо нескольким получателям, это в нем грамотно отрабатывается?
Outlook по-моему скорость вообще не показывает (может упустил чего?), я по часам засекал и потом высчитывал. Случайностью здесь не пахнет, эксперимент повторен не раз. Конечно такой скорости как у smtpsend4 при отправке напрямую нет, этот шпарит на полную катушку, но разница заметна. Если интересуют конкретные цифры — могу на досуге (в конце рабочего дня) повторить и доложить результаты.
Да, это само собой разумеется.
Наконец-то выбрал время повторить тестирование скорости отправки для разных вариантов. Было создано одно письмо размером 2.089.739.
Отправлялось следующими способами (последовательность сохранена):
450 Client host rejected: cannot find your hostname, [195.222.75.238], но пока это не приняло размеров эпидемии — не смертельно...
Возвращает ли SMTPSend4 какой-нибудь ERRORLEVEL при ошибке отправки? Идея проста — запускать SMTPSend4 из батника на отправку напрямую, в случае ошибки там же запустить отправку через SMTPserver хостера.
Если подскажете как это сделать или тыкнете носом что почитать на эту тему — буду премного благодарен
А по результатам теста (тремя постами выше) что-нибудь прокомментировать можете?
А в DNS надо обязательно обратную зону прописать, за этим нынче строго следят.
Для IP 195.222.75.238 попросите своего провайдера вместо "ppp-195-222-75-238.pe1-static.solo.by" указать в PTR-записи имя вашего хоста из вашего домена (т.е. то, которое в HELO пишете, и которое резолвится обратно в 195.222.75.238).
Результаты отправки с секундомером могу прокомментировать только по логам, если вы их пришлете. Сравнить, чем отличается сам протокол. Например, аутлук указывает в HELO тот домен, который сам вычислит (часто просто netbios-имя машины или вовсе 'localhost'), а smtpsend берет из опции -helo. Соответственно у принимающего сервера проверка HELO может занять сильно разное время. Вообще в таких ситуациях, когда участвуют случайные сетевые задержки, тесты надо гонять многократно для каждого случая и брать среднее. Одно могу сказать точно — в smtpsend нет никакой "закладки", которая, встретив сервер вашего хостера, намеренно замедляла бы отправку письма в 4 раза. Все зависит от внешних причин, а не от реализации команды DATA. Он и гигабит в секунду отдаст, если диск успеет прочесть, а сеть успеет принять — для процессора это пустяк.
Великолепно, значит идея запустить через батник разные командные строки должна сработать безотказно
В HELO при отправке напрямую я могу писать свое имя домена, могу нет — от этого результат не изменяется. Только в логе вижу "HELO ppp-195-222-75-238.pe1-static.solo.by" если не указал, или "HELO мой домен" если указал. А при отправке через SMTP хостера я обязательно пишу свое имя домена, без HELO + EHLO не катит. Т.е. это наше имя домена провайдер и должен прописать в PTR для того, чтобы "nslookup 195.222.75.238" выдал наше имя домена — я правильно понимаю смысл обратного просмотра DNS? Только не ясно, как это повлияет на результат — если сейчас "nslookup 195.222.75.238" отдает "ppp-195-222-75-238.pe1-static.solo.by", а после изменения PTR станет отдавать "имя нашего домена". Ведь если я правильно понимаю, принимающая сторона вообще ничего не может узнать по адресу 195.222.75.238 — "cannot find your hostname, [195.222.75.238]". В чем-то я путаюсь/ошибаюсь/не прав?
Логи SMTPsend'a с удовольствием пришлю когда повторю тест (жалею что не сделал этого сразу), а вот как добыть лог отправки Outlook'а не знаю — я ведь им отправлял минуя EServ.
Упаси Боже, у меня и мыслей таких небыло ...
Да, из сообщения следует так. Может в тот раз DNS-сервер вашего провайдера был недоступен принимающей стороне. А вообще проверка HELO принимающими серверами обычно устроена так: по указанному в HELO имени они получают IP (если не могут — отлуп), сравнивают IP с реальным IP соединившегося отправителя (если не совпадает — отлуп), по IP отправителя ищут имя (как "nslookup IP"; если нет имени — отлуп), сравнивают полученное имя с предъявленным именем (если не совпадает — отлуп). Могут быть и фильтры на подстроки "ppp", "dialup" и т.п. — у тех, кто считает всех диалапщиков спамерами — они обычно и RBL'ы соответствующие злые используют.
APPLIES TO
• Microsoft Outlook Express 4.01
• Microsoft Outlook Express 4.0
• MSN 2.5 Software
• Microsoft Windows 98 Standard Edition
В 6-м OutlookExpress'e это оказалось немного не там — Сервис -> Параметры -> Обслуживание -> нижняя строка (на случай если еще кому понадобится ). Как только вырву время повторить эксперимент, все логи тут же выложу. Большое спасибо за пояснения
Вот такой фокус наблюдается
<s:result>FAILED. Error code: 550 </s:result>
</entry>
<s:exit>Exit OK</s:exit></feed>
т.е. вроде как FAILED. Error code: 550, а по выходу — ОК.
Так что похоже ERRORLEVEL использовать не удастся...
Да, Вы правы, не учел
Тоже IMHO не универсальный алгоритм — в случае, когда письмо возвращено отправителю, в очереди его уже не окажется. У нас такая ситуация последнее время не редкость — кто-то шпарит спам от нашего имени (адреса), и он (адрес) попадает в спам-листы, в таком случае при попытке отправки письмо немедленно возвращается отправителю.
Кстати, не помню как на практике — если в течение отправки в очереди появляются еще письма — они уходят следующей сессией или этой же?
Потенциальная применимость IMHO возникнет только при отправке напрямую, чтобы при ошибке попытаться отправить стандартным способом (через сервер провайдера/хостера). Может быть просто при наличии ошибок просто вернуть не-нулевой ERRORLEVEL — тогда уж то, что осталось в папке, можно попробовать отправлять стандартным способом. Все равно какое-то универсальное решение здесь наврядли найдется. Да и стоит ли вообще ломать копья — системы контроля почты становятся все жестче, и похоже не за горами момент, когда для определенных ситуаций (отправителей) прямая отправка станет совсем невозможна...
Обратно возвращается тоже через очередь.
Обычно сразу же параллельной сессией, если флага -z у smtpsend в ком.строке нет.
http://www.eserv.ru/download/smtpsend445.rar
Прямая отправка намного надежнее (и лучше контролируется), поэтому при наличии выделенного канала стоит побороться за "право" прямой доставки. Т.е. получить выделенный реальный IP, правильное доменное имя к нему, и исключиться из всех черных списков, куда попали из-за предыдущего владельца IP или всей провайдерской подсетью. Эти вопросы обычно можно решить взаимодействием с провайдером.
Спасибо, а я думал что они сразу в spool\to_check уходят...
Нет, я использую -z. В этом случае они следующей сессией уходят, да?
Большое спасибо, попробую — отправка у меня уже сделана через батник, только по-моему условие IF ERRORLEVEL в нем не срабатывало (сколько я просматривал SMTP-логи).
У на есть реальный выделенный IP, но к нему имя ppp-*-*--.pe1-static.solo.by, надо попробовать уговорить провайдера сменить его на что-то более внятное, а домен наш у хостера совсем на другом IP. Но это уже не ваши проблемы, а мои...
Тестирование скорости отправки для разных способов видимо повторю уже после отпуска — ухожу с выходных отдыхать...
Да.
<s:ior>Error: 10060 <s:log>2 </s:log>
</s:ior>
<s:mx>MX: relay2.peterlink.ru</s:mx>
<content type='text/plain'><![CDATA[
]]></content>
<s:ior>Error: 10060 <s:log>2 </s:log>
</s:ior>
<s:err>ERR:10060 </s:err>
<s:result>FAILED. Error code: 10060 </s:result>
</entry>
<s:exit>Exit error cnt:1 </s:exit></feed>
Все равно то, что должно отработать по IF NOT ERRORLEVEL 0 (ну или IF ERRORLEVEL GOTO END) не отрабатывает . В чем я туплю?