Cześć,
Udało mi się w końcu rozwiązać problem, a właściwie oba, tzn. błąd przy wysyłce maili i nie odbierania maili z niektórych domen, np. gmail.com.
Zacznijmy od wysyłki:
Poniżej przedstawiam krótkiego tutoriala jak to zrobić.
Jak już pisałem, nie jestem biegły w Linuksie, więc pewnie będę pisał o "oczywistych oczywistościach", nie mniej, może moje doświadczenia komuś się przydadzą i ułatwią rozwiązanie problemu z wysyłką maili. Rozwiązanie dotyczy sprzętu TP-LINK TL-WDR4300 i OpenWrt Barrier Breaker (trunk), choć problem występuje szerzej.
Niezbędne się okazało skompilowanie xmaila z patchem xmail-fix_endianness_detection.patch (https://dev.openwrt.org/ticket/9913). Jest to patch do patcha 030-sysmachine.patch…
Niestety nie udało mi się go dołączyć do kompilacji (cokolwiek bym nie robił, otrzymywałem jakiś błąd – choć na pewno, jak wszystko w linuksie, jest to banalne, jak już się przebrnie przez n tutoriali, dokumentacji i for, no, ale mnie się nie udało). Ostatecznie zmodyfikowałem oryginalny patch 030-sysmachine.patch (który się znajduje w podkatalogu: ./feeds/packages/mail/xmail/patches/ głównego katalogu ze ściągniętymi źródłami OpenWRT) ręcznie nanosząc poprawki z xmail-fix_endianness_detection.patch, w efekcie powstaje nowy plik 030-sysmachine.patch:
diff -urN xmail-1.25.orig/SysMachine.h xmail-1.25/SysMachine.h
--- xmail-1.25.orig/SysMachine.h 1970-01-01 01:00:00.000000000 +0100
+++ xmail-1.25/SysMachine.h 2008-07-28 10:16:47.000000000 +0200
@@ -0,0 +1,30 @@
+#ifndef _MACHDEFS_H
+#define _MACHDEFS_H
+
+
+#include <endian.h>
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#undef MACH_BIG_ENDIAN_WORDS
+
+#undef MACH_BIG_ENDIAN_BITFIELD
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define MACH_BIG_ENDIAN_WORDS
+#define MACH_BIG_ENDIAN_BITFIELD
+#endif
+
+typedef signed char MachInt8;
+typedef unsigned char MachUInt8;
+#define MACH_TYPE_8BIT char
+
+typedef signed short MachInt16;
+typedef unsigned short MachUInt16;
+#define MACH_TYPE_16BIT short
+
+typedef signed int MachInt32;
+typedef unsigned int MachUInt32;
+#define MACH_TYPE_32BIT int
+
+Teraz należy już skompilować paczkę Xmail, najlepiej pojedynczo, żeby nie trawiło to zbyt długo (ja to robiłem na Ubuntu 12.10 postawionym na wirtualnej maszynie, co nie jest zbyt wydajne).
Podczas kompilacji korzystałem z helpa:
http://wiki.openwrt.org/doc/howto/build, choć jest też na eko.
Po skompilowaniu pojawi się katalog ze skompilowanym Xmailem, z którego ja na router przeniosłem jedynie nowe pliki binarne (u mnie znajdujące się w ./build_dir/target-mips_r2_uClibc-0.9.33.2/xmail-1.26/bin) do wcześniej zainstalowanego już Xmaila. Po zastąpieniu plików z oryginalnej paczki wszystko działa beza problemu.
Łatki od 4 lat nie zostały ruszone, więc nie, nie dodano ich.
Zastanawia mnie, że patch "xmail-fix_endianness_detection.patch" nie został dodany do źródeł, być może są tego jakieś powody, których nie znam, ale wygląda to dziwnie…
Problem nr 2 – nie przyjmowanie maili z niektórych domen, np. gmail.com.
Tutaj sprawa jest znacznie prostsza, mianowicie chodzi o to, że gmail (i inni) pozwalają przesyłać miale między serwerami tylko po TLS/SSL, a ja nie miałem skonfigurowanej tej możliwości po swojej stronie.
Aby prześledzić co się dzieje podczas działania Xmaila należy go uruchomić w trybie debug, najpierw zastopować daemona:
/etc/init.d/xmail stopi następnie uruchomić go w terminalu przykładowo poleceniem:
/usr/bin/XMail -Ms <ścieżka do katalogu MailRoot> -Md -Pl -PX 2 -B- -S1 -SX 2 -X- -Qn 4 -Ql -Qg -Y- -F- -C- -W- -Ln 2 Ll(przełączniki są opisane w dokumentacji Xmaila http://www.xmailserver.org/Readme.html).
Teraz Xmail będzie wypisywał to co się z nim dzieje, można łatwo zaobserwować, że niektóre serwery po nieudanym połączeniu z zewnątrz po TLS/SSL nawiązują połączenie nieszyfrowane, wtedy mail dociera, a niektóre, np. gmail.com, tego nie robią i wtedy mail już nie dociera. Skonfigurowanie TLS/SSL rozkazuje problem, przy czym jest ono proste i ogranicza się do wykonania zaleceń z dokumentacji Xmaila (http://www.xmailserver.org/Readme.html# … figuration). Ja polecenia nieco zmodyfikowałem, stworzyłem krótszy klucz (1024), ale za to cert na 10 lat:
openssl genrsa -out server.key 1024
openssl req -new -x509 -key server.key -out server.pem -days 3600Pozdrawiam,
trandus