Реферат: Программное обеспечение почтового обмена
Естественно, что правила преобразования адресов S13 и R23 должны быть описаны в файле настроек sendmail.
Тестирование обслуживания по протоколу SMTP
Для проверки сервиса SMTP применяют программу telnet, запущенную по порту 25:
citmgu> telnet server.citmgu.ru 25В этом случае система отвечает строкой приглашения протокола SMTP, после чего можно вводить команды SMTP и проверять реакцию системы на них:
# telnet citmgu.ru 25Trying 194.85.135.66...Connected to citmgu.ru.Escape character is '^]'. 220 cit-u.citmgu.ru ESMTP Sendmail 8.8.5/8.8.5; Mon, 30 Jun 1997 09:45:55 GMT help 214-This is Sendmail version 8.8.5 214-Topics: 214- HELO EHLO MAIL RCPT DATA 214- RSET NOOP QUIT HELP VRFY 214- EXPN VERB ETRN DSN 214-For more info use "HELP <topic>". 214-To report bugs in the implementation send email to 214- [email protected]. 214-For local information send email to Postmaster at your site. 214 End of HELP info MAIL FROM: paul 250 paul... Sender ok RCPT TO: paul 250 paul... Recipient ok DATA 354 Enter mail, end with "." on a line by itself This is a test message . 250 JAA24836 Message accepted for delivery quit 221 cit-u.citmgu.ru closing connection Connection closed by foreign host. You have new mail. #В приведенном здесь сеансе сначала пользователь выдал команду help и получил список команд, которые можно использовать при взаимодействии по протоколу SMTP. Затем пользователь выдал команду MAIL FROM: для указания адреса отправителя почтового сообщения. После этого выдана команда RCPT TO: , и указан адрес получателя почтового сообщения. Команда DATA открывает возможность ввода почтового сообщения, т.е. клиент из режима командной строки переходит в режим редактирования сообщения. Редактировать можно только в пределах одной строки путем затирания символом забоя предварительно набитых символов. Вернуться на строку выше нельзя. Конец режима редактирования обозначается символом "." в первой позиции строки. После этого клиент возвращается в режим командной строки, а сообщение отсылается. Совершенно очевидно: что за один сеанс можно отправить несколько сообщений как одному и тому же адресату, так и разным адресатам на одном и том же компьютере. Посылать сообщения можно через другую машину, если в качестве адреса получателя указать что-либо подобное ниже приведенному:
paul%[email protected]В этом случае сообщение отправляется на citmgu.ru, а затем оно будет переправлено на quest.polyn.kiae.su.
Тестирование по протоколу POP3
ормально, взаимодействие по протоколу POP3 можно разделить на две фазы: фазу аутентификации и фазу обмена данными. В фазе аутентификации пользователь должен сообщить свой идентификатор и пароль. Если аутентификация была произведена успешно, то система позволяет работать с домашним ящиком пользователя. Сам протокол POP3 очень похож на SMTP с той только разницей, что сообщения можно принимать но нельзя отправлять.
Приведем пример взаимодействия по протоколу POP3:
quest> telnet quest.net.kiae.su Trying 144.206.130.138... Connected to quest.net.kiae.su. Escape character is '^]'. +OK QPOP (version 2.2) at quest.net.kiae.su starting. <[email protected]> user paul +OK Password required for paul. pass Kukuru23432 +OK paul has 6 messages (12576 octets). stat +OK 6 12576 list +OK 6 messages (12576 octets) 1 1447 2 2640 3 2296 4 1100 5 3025 6 2068 . noop +OK last +OK 4 is the last read message. retr 4 +OK 1100 octets Received: from mail1.relcom.ru (mail1.relcom.ru [193.125.152.4]) by quest.net.kiae.su (8.7.5/8.7.3) with ESMTP id CAA09628 for <[email protected]>; Wed, 2 Jul 1997 02:51:43 +0400 (MSD) Received: from thevni (uucp@localhost) by mail1.relcom.ru (8.7.5.R.ML.S/Relcom-2A) with UUCP id BAA03544 for paul;Wed, 2 Jul 1997 01:34:45 +0400 (MSD) Received: by Relay1.relcom.ru (UUMAIL/2.0); Wed, 2 Jul 97 01:34:44 +0300 Received: by theor.vniinm.msk.su (UUPC/@ v5.06gamma, 07Feb93); Wed, 2 Jul 1997 01:24:57 +0400 To: [email protected] References: <[email protected]> Message-Id: <[email protected]> Organization: A.A. Bochvar Institute for Inorganic Materials, Theoret From: "Alexander Z. Solontsov" <[email protected]> Date: Wed, 2 Jul 97 01:24:56 +0400 X-Mailer: BML [MS/DOS Beauty Mail v.1.36] Subject: life Lines: 9 X-UIDL: 2313051b98ef908dceefe8b801d9e60d Status: RO To: N.M.Sergeeva Dear H.M., I am still alive, publishing a lot, and this year applied to RAN. Would be pleased to hear from you in a more derect way. Alexander . dele 4 +OK Message 4 has been deleted. rset 4 -ERR Too many arguments for the rset command. rset +OK Maildrop has 6 messages (12576 octets) list +OK 6 messages (12576 octets) 1 1447 2 2640 3 2296 4 1100 5 3025 6 2068 . quit +OK Pop server at quest.net.kiae.su signing off. Connection closed by foreign host.В данном примере используется все тот же прием доступа к серверу через программу Telnet по 110 порту TCP. В начале выдаются команды фазы аутентификации user и pass. Затем выдается команда stat, которя сообщает статус почтового ящика пользователя paul. По команде list система сообщает число сообщений и их размер в байтах. По команде retr можно получить текст сообщения. По команде dele пометить сообщение к удалению. Удаляются сообщения только в момент окончания сеанса, а во время сеанса они только помечаются как удаленные, поэтому по команде rset эти пометки можно снять. Команда Quit завершает сеанс работы с сервером.
Протокол IMAP
Другим протоколом разбора почты является протокол IMAP (Interactive Mail Access Protocol), который по своим возможностям очень похож на POP3, но был разработан как более надежная альтернатива последнего и к тому же обладает более широкими возможностями по управлению процессом обмена с сервером.
Работа протокола осуществляется по 143 потру TCP. Главным отличием от POP является возможность поиска нужного сообщения и разбор заголовков сообщения.
Ниже приведен пример взаимодействия по протоколу IMAP
OK IMAP2 Server Ready A001 LOGIN Fred Secret A001 OK User Fred logged in A002 SELECT INBOX * FLAGS (Meeting Notice \Answered \Flagged \Deleted \Seen) * 19 Exists * 2 Recent * A002 OK Select compete A003 FETCH 1:19 ALL * 1 Fetch ( ..... * 19 Fetch (.... A003 OK Fetch complete A004 LOGOUT * Bye IMAP2 server quitting A004 OK Logout completeДля поиска информации используются команды FIND с различными аргументами.
Тестирование отправки почты программой Sendmail - флаг "-v"
Для того чтобы убедится, что почта уходит туда куда вы предполагаете можно, запустить sendmail из командной строки в так называемом verbowse режиме, т.е. когда диалог между транспортными агентами (двумя программами sendmail) трассируется на экране монитора или записывается в файл. Некоторые грубые ошибки в настройке sendmail можно таким образом установить, например зацикливание при локальной рассылке.
% sendmail -v [email protected] Test . [email protected]... Connecting to local... [email protected]... Sent % sendmail -v [email protected] Test . [email protected]... Connecting to quest.net.kiae.su. via esmtp... 220 quest.net.kiae.su ESMTP Sendmail 8.7.5/8.7.3; Mon, 30 Jun 1997 11:36:31 +040 0 (MSD) >>> EHLO cit-u.citmgu.ru 250-quest.net.kiae.su Hello [194.85.135.66], pleased to meet you 250-EXPN 250-8BITMIME 250-SIZE 250-DSN 250-VERB 250-ONEX 250 HELP >>> MAIL From:<[email protected]> SIZE=5 250 <[email protected]>... Sender ok >>> RCPT To:<[email protected]> 250 Recipient ok >>> DATA 354 Enter mail, end with "." on a line by itself >>> . 250 LAA07168 Message accepted for delivery [email protected]... Sent (LAA07168 Message accepted for delivery) Closing connection to quest.net.kiae.su. >>> QUIT 221 quest.net.kiae.su closing connection %В этом примере сначала тестируется локальная рассылка, а затем проверяется удаленная рассылка почты. Если бы на локальной машине существовал скрытый цикл, то программа выдала бы предупреждение о возможных ошибках в файле конфигурации sendmail. Однако чаще всего эти ошибки связаны с настройками named, а не sendmail.
Тестирование правил преобразования адресов
Для тестирования правил преобразования адресов sendmail запускают с флагом "-bt" для того, чтобы тестирование было более детальным, можно применять и ряд других флагов.
Пример тестирования набора правил 0 и его подправил.
% sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 0 [email protected] rewrite: ruleset 0 input: paul @ polyn . kiae . su rewrite: ruleset 98 input: paul @ polyn . kiae . su rewrite: ruleset 98 returns: paul @ polyn . kiae . su rewrite: ruleset 97 input: paul @ polyn . kiae . su rewrite: ruleset 3 input: paul @ polyn . kiae . su rewrite: ruleset 96 input: paul < @ polyn . kiae . su > rewrite: ruleset 96 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 3 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 0 input: paul < @ polyn . kiae . su . > rewrite: ruleset 98 input: paul < @ polyn . kiae . su . > rewrite: ruleset 98 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 90 input: < polyn . kiae . su > paul < @ polyn . kiae . su . > rewrite: ruleset 90 input: polyn . < kiae . su > paul < @ polyn . kiae . su . > rewrite: ruleset 90 input: polyn . kiae . < su > paul < @ polyn . kiae . su . > rewrite: ruleset 90 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 90 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 90 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 95 input: < > paul < @ polyn . kiae . su . > rewrite: ruleset 95 returns: paul < @ polyn . kiae . su . > rewrite: ruleset 0 returns: $# esmtp $@ polyn . kiae . su . $: paul < @ polyn . kiae . su . > rewrite: ruleset 97 returns: $# esmtp $@ polyn . kiae . su . $: paul < @ polyn . kiae . su . > rewrite: ruleset 0 returns: $# esmtp $@ polyn . kiae . su . $: paul < @ polyn . kiae . su . > >В этом примере четко виден порядок преобразования. Сначала производится канонизация имени, а затем его преобразование в соответствии с рассылкой. Набор правил 0 - это набор преобразования адресов получателей. После него принимается решение о рассылке почты.
Чаще всего ошибки встречаются в наборе правил 3, а точнее в поднаборе этого набора 96. Здесь производится канонизация адресов. Наибольшие проблемы проявляются с так называемыми фиктивными доменами, которые не могут быть разрешены службой доменных имен. В этом случае происходит, обычно, расширение имени именем текущего домена, и, как результат, ошибка при рассылке. Такие имена либо надо вносить в список адресов фиктивных доменов (BITNET или UUCP), либо их отлавливать и запускать написанные для них программы рассылки.
В приведенном ниже примере тестирование адресов производится с максимальной опцией отладки, когда указываются не только номера наборов правил, но и сами тестируемые правила:
%sendmail -bt -d21.12 >3 [email protected] ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > rewrite: ruleset 3 input: paul @ polyn . kiae . su -----trying rule: $@ ----- rule fails -----trying rule: $* -----rule matches: $: $1 < @ > rewritten as: paul @ polyn . kiae . su < @ > -----trying rule: $* < $* > $* < @ > ----- rule fails -----trying rule: $* : : $* < @ > ----- rule fails -----trying rule: : include : $* < @ > ----- rule fails -----trying rule: $* : $* < @ > ----- rule fails -----trying rule: $* < @ > -----rule matches: $: $1 rewritten as: paul @ polyn . kiae . su -----trying rule: $* ; ----- rule fails -----trying rule: $@ ----- rule fails -----trying rule: $* -----rule matches: $: < $1 > rewritten as: < paul @ polyn . kiae . su > -----trying rule: $+ < $* > ----- rule fails -----trying rule: < $* > $+ ----- rule fails -----trying rule: < > ----- rule fails -----trying rule: < $+ > -----rule matches: $: $1 rewritten as: paul @ polyn . kiae . su -----trying rule: @ $+ , $+ ----- rule fails -----trying rule: @ $+ : $+ ----- rule fails -----trying rule: $+ : $* ; @ $+ ----- rule fails -----trying rule: $+ : $* ; ----- rule fails -----trying rule: $+ @ $+ -----rule matches: $: $1 < @ $2 > rewritten as: paul < @ polyn . kiae . su > -----trying rule: $+ < $+ @ $+ > ----- rule fails -----trying rule: $+ < @ $+ > -----rule matches: $@ $> 96 $1 < @ $2 > -----callsubr 96 rewrite: ruleset 96 input: paul < @ polyn . kiae . su > -----trying rule: $* < @ localhost > $* ----- rule fails -----trying rule: $* < @ localhost . net . kiae . su > $* ----- rule fails -----trying rule: $* < @ localhost . UUCP > $* ----- rule fails -----trying rule: $* < @ [ $+ ] > $* ----- rule fails -----trying rule: $* < @ @ $=w > $* ----- rule fails -----trying rule: $* < @ @ $+ > $* ----- rule fails -----trying rule: $* < @ $+ . UUCP > $* ----- rule fails -----trying rule: $* < @ $* $~P > $* -----rule matches: $: $1 < @ $[ $2 $3 $] > $4 rewritten as: paul < @ polyn . kiae . su . > -----trying rule: $* < @ $=w > $* ----- rule fails -----trying rule: $* < @ $* $=P > $* -----rule matches: $: $1 < @ $2 $3 . > $4 rewritten as: paul < @ polyn . kiae . su . . > -----trying rule: $* < @ $* . . > $* -----rule matches: $1 < @ $2 . > $3 rewritten as: paul < @ polyn . kiae . su . > -----trying rule: $* < @ $* . . > $* ----- rule fails -----trying rule: $* < @ quest . net . kiae . su > $* ----- rule fails rewrite: ruleset 96 returns: paul < @ polyn . kiae . su . > rewritten as: paul