sendmail + ssmtp + Google Apps


Odkąd pamiętam, używając jakiejkolwiek dystrybucji Linuksa denerwowało mnie „niedostarczanie” wiadomości przez /usr/sbin/sendmail. Wszystko lądowało w pliku ~/dead.letter . Nie chciałem uruchamiać lokalnego serwera SMTP z prawdziwego zdarzenia, gdyż dla jednej osoby pracującej przy komputerze jest to przerost formy nad treścią.

Przeglądając portage znalazłem ciekawą paczkę:

mail-mta/ssmtp
     Available versions:  2.61-r2 [M]~2.61-r30 [M]~2.61-r31
     Homepage:           
     Description:         Extremely simple MTA to get mail off the system to a Mailhub

Czyli krótko mówiąc, jest to agent który wysyła wszelką pocztę przez zewnętrzny serwer SMTP. Było to proste rozwiązanie, które gotów byłem zaakceptować. Jako okno na świat wykorzystałem serwery Google.

Na początek należy zemergować niezbędne pakiety. ssmtp proponuję skompilować ze wsparciem SSL i IPv6 – myśląc długofalowo ;-).
Mamy trzy możliwości do wyboru:

  • dodać do pliku /etc/make.conf deklarację:
    USE="ssl ipv6"
  • dopisać te flagi do /etc/portage/package.use, czyli:
    # echo "mail-mta/ssmtp ssl ipv6" >> /etc/portage/package.use
  • zadeklarować je przed samym uruchomieniem emerge:
    # USE="ssl ipv6" emerge -va mail-mta/ssmtp

Proces kompilacji jest krótki. Przystąpmy więc do konfiguracji. Wszystko znajdziemy w jednym pliku – /etc/ssmtp/ssmtp.conf.

mailhub=smtp.gmail.com:587
hostname=gierwialo.com
root=xxx@gierwialo.com
AuthUser=xxx@gierwialo.com
AuthPass=yyy
UseSTARTTLS=Yes
UseTLS=Yes

Chyba nie ma potrzeby tłumaczenia poszczególnych linijek. Należy tylko podkreślić, że w przypadku używania serwerów Google, ważne jest podanie prawidłowego portu (:587), oraz ustawienia dwóch opcji: UseSTARTTLS=Yes i UseTLS=Yes bez których nie nawiążemy poprawnie połaczenia.

Całość można przetestować programem /bin/mail z opcją -v dzięki temu szczegółowe informacje dotyczące wysyłki, będą wyświetlane na konsoli.

Przykład:

# /bin/mail -v xxx@epecet.com
Subject: testowy mail
treść
/ Ctrl + D /
Cc: 
[<-] 220 mx.google.com ESMTP y6sm38445963mug
[->] EHLO gierwialo.com
[<-] 250 ENHANCEDSTATUSCODES
[->] STARTTLS
[<-] 220 2.0.0 Ready to start TLS
[->] EHLO gierwialo.com
[<-] 250 ENHANCEDSTATUSCODES
[->] AUTH LOGIN cG9tb2NuaWtAZ2llcndpYWxvLmNvbQ==
[<-] 334 UGFzc3dvcmQ6
[->] NVI5OTQx
[<-] 235 2.7.0 Accepted
[->] MAIL FROM:<root@gierwialo.com>
[<-] 250 2.1.0 OK
[->] RCPT TO:<xxx@epecet.com>
[<-] 250 2.1.5 OK
[->] DATA
[<-] 354 Go ahead
[->] Received: by gierwialo.com (sSMTP sendmail emulation);
[->] From: "root" <root@gierwialo.com>
[->] Date: Sat, 30 Jun 2007 15:26:04 +0200
[->] To: xxx@epecet.com
[->] Subject: testowy mail
[->] 
[->] treść
[->] .
[<-] 250 2.0.0 OK 1183209960 y6sm38445963mug
[->] QUIT
[<-] 

Tak wygląda prawidłowy przebieg komunikacji z serwerem ;-) Jeżeli coś się nie uda, nasz email trafi do ~/dead.letter.

Jak wszystko działa, możemy wypić herbatkę ;-)

Wysłany: 30 czerwca 2007 o 15:37:33

Zostaw odpowiedź

  1. Michał Górny 

    Trudno mi teraz sobie przypomnieć, dlaczego zdecydowałem się używać esmtp zamiast ssmtp… ale w każdym razie był powód i dlatego polecam to pierwsze ( ;. Może ssmtp nie obsługuje konfiguracji per-user?

  2. nelchael 

    Jeśli korzystasz z procmaila lokalnie może Cię zainteresować localsendmail: http://overlays.gentoo.org/dev/nelchael/browser/mail-mta/localsendmail

  3. trójkąt 

    Działa pięknie, dzięki!