Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Taki mały problem.
Jakich komend użyć, żeby z poziomu konsoli (zdalnie) dostać się do kont pocztowych na serwerze Postfix, ale bez potrzeby wklepywania haseł do tych kont, czyli z uprawnieniami roota/administratora, tak żeby można było przeglądać dowolne skrzynki pocztowe? Dokładniej chodzi o to jak przeczytać pocztę, oznaczyć jako przeczytaną, skasować maila itp.
Od razu mówię że nie chodzi o podglądanie poczty pracowników/userów mojego serwera itp. Po prostu różne apki wysyłają wiadomości na różne konta i czasami potrzebny jest właśnie taki sposób dostępu.
Ostatnio edytowany przez Areh (2013-11-21 11:50:11)
Offline
To wszystko zależy, jak masz skonfigurowanego postfixa (skrzynki jako Maildir lub Mbox). Jeśli jest to Mbox, sprawa jest mocno utrudniona (wszystko składowane jest w jednym pliku). Poniżej fragment z Wikipedii dotyczący Maildir, który powinien odpowiedzieć na drugą część Twojego pytania:
The program (process) that delivers an e-mail message writes it to a file in the tmp directory with a unique filename. The current algorithm for generating the unique filename combines the time, the host name, and a number of pseudo-random parameters to ensure uniqueness.[1]
The delivery process stores the message in the maildir by creating and writing to tmp/unique, and then moving this file to new/unique. The moving is commonly done by hard linking the file to new and then unlinking the file from tmp, but some implementations simply rename() it there. This sequence guarantees that a maildir-reading program will not see a partially written message, as MUAs never look in tmp.
When the mail user agent process finds messages in the new directory it moves them to cur (using rename() - link then unlink strategy may result in having the message duplicated) and appends an informational suffix to the filename before reading them. The information suffix consists of a colon (to separate the unique part of the filename from the actual information), a '2', a comma and various flags. The '2' specifies, loosely speaking, the version of the information that follows the comma. '2' is the only currently officially specified version, '1' being an experimental version. One can only assume that it was used while the Maildir format was under development. The specification defines flags which show whether the message has been read, deleted and so on: the initial (capital) letter of Passed, Replied, Seen, Trashed, Draft, and Flagged.[1] Dovecot uses lowercase letters to match 26 IMAP keywords,[3] which may include standardised keywords such as $MDNSent, and user defined flags.[/quote]
Offline
Maildir
Czyli dobre rozumiem że nie da się tego zrobić?
Offline
Jeśli to Maildir, to nie jest to problemem. Wiadomości masz w oddzielnych plikach tekstowych (katalogi new i cur)
Offline
Postfix tylko przyjmuje i przekazuje pocztę, dalej masz serwer POP3/IMAP,
i tam jest całe zarządzanie zawartością skrzynki.
Czytanie nie jest standardowo dostępne, ale np w Dovecocie jest sporo narzędzi do sprzątania skrzynek.
Wszystko przez komendę:
doveadm [...OPCJE....]
Ostatnio edytowany przez Jacekalex (2013-11-20 17:48:54)
Offline
Tylko że mi nie tylko o sprzątanie chodzi, ale o to co w pierwszym poście napisałem. Jeżeli nie da się z poziomu samego Postfiksa, to Dovecot też się nada. Tak naprawdę to ten serwer jeszcze nie stoi. Jest to w fazie planowania, będzie do tego pisana apka za pomocą której będzie można te rzeczy robić, tylko najpierw potrzebne są te komendy.
Powiem tak - o Dovecot i Postfix zacząłem czytać dopiero dzisiaj, nigdy wcześniej do niczego nie było mi to potrzebne i już dzisiaj dostałem "prośbę" o podanie tych komend, ale jakby to powiedzieć - w jeden dzień nie dałem rady tego ogarnąć (cóż, nikt nie pozwoli mi w pracy siedzieć 8h i tylko czytać, jest też inna robota do zrobienia), dlatego liczyłem/liczę na pomoc kogoś kto się tym zajmuje.
Offline
Możesz kombinować z jakimś konsolowym klientem poczty, gdzie np skrzypka pocztowa będzie wskazywana zmienną albo innym parametrem przy uruchomieniu.
Chyba, żeby kopie wiadomości przekierowywać do admina, w Postfixie i Qmailu są narzędzia do kopiowania poczty.
Dla Postfixa to są funkcję *BCC - w dokumentacji Posfixa masz opis,
w Qmailu łatka tap.
Ostatnio edytowany przez Jacekalex (2013-11-21 11:58:47)
Offline
No właśnie chodzi o to że tą apkę trzeba napisać, a nie korzystać z gotowej (brzmi bez sensu, ale to będzie tylko dodatkowa funkcjonalność tego) i problem w tym, jakiego polecenia ma ona użyć żeby osiągnąć to co opisałem w pierwszym poście.
Offline
Wszystkie informacje masz już podane. Aby przeczytać wiadomość, wystarczy otworzyć konkretny plik, jeśli chcesz oznaczyć jako przeczytaną, przenosisz z new do cur, jeśli chcesz usunąć, kasujesz plik.
Offline
To już coś, dzięki. Tylko że w tym rozwiązaniu muszę mieć dostęp do konsoli, zalogować się po ssh i dopiero działać. Rozumiem że nie ma możliwości zrobienia tego tak jak pisałem, czyli:
polecenie <opcje><skrzynka> - i mamy np wylistowane wiadomości na danym koncie polecenie <opcje><skrzynka><wiadomość><opcje> - czytamy wiadomość polecenie <opcje><skrzynka><wiadomość><opcje> - oznaczamy jako przeczytaną itp
Tylko że programy pocztowe to potrafią, niezależnie od systemu operacyjnego, nieważne czy to komp, czy urządzenie mobilne, więc domyślam się że jakoś da radę to zrobić.
Offline
W taki sposób też da radę po IMAPie. Nie wiem, w czym piszesz tę aplikację, ale bardzo możliwe że będziesz miał gotową bibliotekę do obsługi IMAPa. Przykładowe biblioteki:
[b]PERL:[/b]
[url]http://search.cpan.org/~djkernen/Mail-IMAPClient/IMAPClient.pod[/url]
[url]http://search.cpan.org/~jpaf/Net-IMAP-Simple-0.93/Simple.pm[/url]
[b]C++:[/b]
[url]http://www.vmime.org/[/url]
Offline
To nie ja (na szczęście) piszę. Od tego są programiści :D
To co robią to aplikacje webowe, tak więc głównie java.
Offline
Czyli, jeśli stawiasz serwer, to musisz uruchomić na nim również IMAP (czyli np. wspomniany wcześniej Dovecot) a w aplikacji trzeba będzie zaimplementować obsługę tego protokołu.
Offline
Do tego (Dovecot) doszliśmy już na początku. Dokładnie nie wiem jak te apki wyglądają. Nie mam z nimi styczności. Dostałem plecenie znalezienia poleceń konsolowych które coś takiego umożliwią - tylko tyle i nic więcej, żadnych szczegółów. Apki stoją na serwerach linuksowych (GlassFish oraz JBoss) więc mają dostęp do basha.
-----
Wczytuję się w tą dokumentację doveadm i powiem szczerze - czarna magia.
-----
Dobra, skleiłem coś takiego:
Wyświetlanie wszystkich wiadomości usera:
doveadm search -u user@domena.com ALL
Tutaj inne przykłady, chyba nie muszę pisać co miałem na myśli
doveadm search -u user@domena.com NEW doveadm search -u user@domena.com SAVEDON 2013-11-21 doveadm search -u user@domena.com SAVEDBEFORE 2013-11-21 doveadm search -u user@domena.com mailbox Inbox/Spam/Send subject todo
Do kasowania wiadomości:
doveadm expunge -u user@domena.com
Oczywiście z parametrami, np. tak jak wyżej.
Czy dobrze kombinuje?
Mam tylko problem z działaniem na pojedynczej, konkretnej wiadomości, oraz z oznaczeniem wiadomości jako przeczytanej. Mógłbym tutaj prosić o pomoc?
Ostatnio edytowany przez Areh (2013-11-21 11:26:04)
Offline
A czy Roundcube przypadkiem nie stosuje uwierzytelnienia przez serwer Imap?
Pytam, bo o ile mi wiadomo, jeśli w Dovecocie mamy kilkadziesiąt rożnych form uwierzytelnienia, to chyba da się wykombinować "kapitańskie" hasło do wszystkich skrzynek.
Np PAM, to dosyć elastyczny mechanizm, a w razie czego źródełka też są pod ręką.
Albo np passdb skryptem, korzystając z mechanizmu checkpasswd.
Sznurek:
http://wiki2.dovecot.org/AuthDatabase/CheckPassword
Trzeba by wtedy na bazie oryginalnego qmailowego Checkpassword napisać własny.
Przykłady są:
eix checkpassword --only-names net-mail/checkpassword net-mail/checkpassword-pam
Ostatnio edytowany przez Jacekalex (2013-11-21 12:02:40)
Offline
Na razie wolałbym skupić się na tym co napisałem w poprzednim poście. Wydaje mi się że takie rozwiązanie by wystarczyło, tylko nie wiem czy dobrze to robię.
----
Nieaktualne. Mój szef nie potrafi tłumaczyć i okazało się że o coś całkiem innego mu chodziło.
będzie to serwer Exchange, apka tak jak mówiłem, będzie miała wbudowanego takiego jakby klienta pocztowego, który będzie łączył się z serwerem userem o podwyższonych uprawnieniach i boi się że po działaniach tego usera na innych skrzynkach mogą wystąpić problemy z uprawnieniami do wiadomości na których ten user działał i chce do tego wykorzystać PROXYAUTH w celu przełączania się na właścicieli skrzynek.
Coś w tym rodzaju:
> 1 LOGIN administrator password
> 1 OK User logged in
> 2 PROXYAUTH real_user
> 2 OK Completed
I chodzi o to jaki protokół do tego wykorzystać, ale to już raczej nie pasuje do tego tematu. Założę nowy wątek.
Ostatnio edytowany przez Areh (2013-11-21 13:10:02)
Offline
Time (s) | Query |
---|---|
0.00023 | SET CHARSET latin2 |
0.00006 | SET NAMES latin2 |
0.00214 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.129.69.134' WHERE u.id=1 |
0.00088 | UPDATE punbb_online SET logged=1732863176 WHERE ident='3.129.69.134' |
0.00047 | SELECT * FROM punbb_online WHERE logged<1732862876 |
0.00061 | SELECT topic_id FROM punbb_posts WHERE id=246264 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=24651 ORDER BY posted |
0.00064 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=24651 AND t.moved_to IS NULL |
0.00008 | SELECT search_for, replace_with FROM punbb_censoring |
0.00108 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=24651 ORDER BY p.id LIMIT 0,25 |
0.00092 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=24651 |
Total query time: 0.00716 s |