A "mail" nem küldi el a levelet.

Fórumok

Linux terminálban mondjuk: mail valami@gmail.com
Aztán megadom a tárgyat, az üzenetet, majd ctrl+D.
Aztán ezt kapom üzenetként:
[jani@manjaro~]$ /usr/sbin/sendmail: Nincs ilyen fájl vagy könyvtár
"/home/jani/dead.letter" 10/207
.. message not sent.
Aztán enterrel vissza kapom a terminált használatra.

Aztán sendmail-t felraktam, utána már nem írt ki hibaüzenetet. De nem is érkezett meg a levél. Az email cím jó, a spam mappában sincs. Működnie kellene, mégsem működik. Pedig jó lenne, mert kényelmesebb használni otthon.
Mit ellenőrizzek? Van pl /etc/mail/sendmail.cf fájl, ami nekem kínai, van itt 1474 sor. Ha keresnem kell itt valamit, akkor mit keressek? A kódok láttán mintha ezt nem a felhasználók számára készítették volna.

Hozzászólások

Logban vmi hibaüzenet?

Ip-d fel van véve spf txt rekordba a DNS-ben?
Címzett spam/bulk folderében ott a mail?

De még 1001 oka lehet...

A mail.log ezt mondja:
Jun 7 11:40:06 manjaro sendmail[14069]: My unqualified host name (manjaro) unknown; sleeping for retry
Az ip címes dolgot nem értem. Nem webszervert akarok csinálni, hanem csak levelet küldeni otthoni gépemről a mail segítségével. Esetleg gmail-es fiókomat beállíthatom valahogy.
Ahogy írtam, a spam mappában sem volt.

......................
Egymás segítésére még: http://pc-kozosseg.com

A sendmail szerintem is pilótavizsgás. Én úgy oldottam meg Fedorán - technikai infót, például IP-címet küldenek magukról az általam karbantartott gépek -, hogy feltettem az msmtp nevű SMTP klienst. A /etc/msmtprc file-ban kikommentelve van egy példa, hogyan kell a szolgáltatódat konfigurálni. Mivel az authentikációhoz a jelszó szerepel a file-ban, figyelj arra, hogy root:root 0640-es jogai legyenek a file-nak, hogy ne tudja minden felhsználó a jelszót nézegetni.

Aztán van a /etc/mail.rc file, ez tartozik a mail illetve mailx parancshoz. Ennek a végéről kommentezd ki a set sendmail kezdetű sort, valamint írj bele egy új sort:

# set sendmail="/usr/bin/msmtp"
set sendmail="/usr/local/bin/mailtext"

A /usr/local/bin/mailtext egy saját scriptem, tudniillik az egyik parancssori paramétert nem kompatibilisen állítja elő a mail. Tehát ez a scriptem így néz ki:

#!/bin/bash

i=0
while [ $# -gt 0 ]; do
    if [ x"$1" = x'-r' ]; then
        param[i]='-f'
    else
        param[i]="$1"
    fi
    shift
    ((i++))
done
exec msmtp "${param[@]}"

Látszik, hogy a '-r' kapcsolót cseréli '-f'-re, majd hívja az msmtp-t. A script jogai root:root 0755. A csere egyébként ezért kell:

Részlet a man mail-ből:

       -r address
              Sets  the From address. Overrides any from variable specified in
              environment or startup files.  Tilde escapes are disabled.   The
              -r  address options are passed to the mail transfer agent unless
              SMTP is used.  This option exists for compatibility only; it  is
              recommended to set the from variable directly instead.

Valamint részlet a man msmtp-ből:

              -f, --from=address
                     Set the envelope-from  address.  It  is  only  used  when
                     auto_from is off.
                     If  no account was chosen yet (with --account or --host),
                     this option will choose the first account  that  has  the
                     given  envelope-from address (set with the from command).
                     If no such account is found, "default" is used.

A levél küldése shell scriptből így történik:

mail -s "$subject" -r "$from" "$address" <<-EOF
Ez itt a szövegtörzs.
EOF

A subject, from, address változók értelemszerűen kitöltve.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Hozd létre:

defaults
tls off
aliases /etc/aliases
# tls_trust_file /etc/ssl/certs/ca-certificates.crt
# logfile ~/.msmtp.log

# A freemail service
# account freemail
# host smtp.freemail.example
# from joe_smith@freemail.example
# auth on
# user joe.smith
# password secret

# The SMTP server of the provider.
account T-Online
host mail.t-online.hu
from valaki@freemail.hu
auth plain
user szolgáltatód_user_login_név
password jelszó

# Set a default account
account default : T-Online

A felhasználónév, jelszó az, amit a levelezésnél a küldőként, azaz SMTP beállításokban kell megadnod, ha pl. a Thunderbird-öt használod.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Még nem stimmel valami, ezt állítottam be:
# The SMTP server of the provider.
account Gmail
host smtp.gmail.com
port 465
from nev@gmail.com
auth plain
user nev
password jelszo

# Set a default account
account default : Gmail

Próbaképp a mail -s tárgy -r valami@gmail.com valami@gmail.com parancsot adtam, aztán szöveg, aztán ctrl+D. Majd ^DEOT-tal zárva visszaadta az üzenetet. levél még nem érkezett.

......................
Egymás segítésére még: http://pc-kozosseg.com

Olvass logokat, debugolj! Teszem azt, nézd meg Wireshark-kal, hogyan próbál kapcsolódni a Gmail szerveréhez, mi a szerver válasza, s onnan látni fogod, mi a teendő.

Amikor a scriptemet írtam, amelyik a '-r' kapcsolót lecseréli '-f'-re, ott is az volt, hogy nem működött, elkezdtem debugolni. Mivel a mail.rc-ben megadható, smtp gyanánt kit hívjon a mail, gondoltam egyet, hogy ide saját scriptet írok, ami annyit csinál, hogy file-ba logolja, milyen paraméterekkel hívják. Aztán itt szépen kiderült, hogy '-r' kapcsolót ad át az msmtp-nek, miközben az msmtp manualját tanulmányozva láttam, hogy az '-f'-et vár. Így keletkezett ez a picike wrapper scriptem, s cseréltem le azt az egy kapcsolót.

Szóval légy kreatív, nézd meg, mi történik, s gyere rá, mi a megoldás. Ebből lehet igazán tanulni, abból kevesebbet, ha mechanikusan csinálsz dolgokat, és az működik.

Érdemes észrevenni, hogy a scriptem kihasznál bash-specifikus dolgot, tehát, ha nincs feltelepítve a bash, csak a dash, akkor írd át. Szerintem az ((i++)) nem fog működni dash-ben, oda talán az i=$((i+1)) kifejezés kell, de a tömbre hivatkozás is lehet, hogy csak param[$i] módon fog működni. Ekkor persze érdemes az első sort #!/bin/dash alakra cserélni. Vagy #!/bin/sh formára.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ha debian alapú a rendszered, akkor használd az exim-t, azt menüből is lehet konfigurálni és viszonylag egyszerű.

Természetesen nem beszélem le az exim-ről, de tényleg ennyi a konfig file-ja az msmtp-nek. Lényegében hostnév, autentikáció típusa, felhasználónév, jelszó, account név, illetve az, hogy az egyetlen account-ból éppen azt az egyet használja alapértelmezettként. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Azt elfelejtettük megkérdezni tőle, hogy mi a cél:

- egy desktop gépről scriptelhetően levelet küldeni (erre adtam én megoldást)

- egy mail szervert építeni, rendesen statikus IP, domain név, éjjel-nappal jár, miegymás

A kérdésből én az elsőre tippeltem, ezért is volt ez a válaszom.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Sima desktop. Most tanulom a bash-t, awk meg a többit, ezeket elküldöm email címemre, hogy más gépen is elérhető legyen. VPS-sen egy mail valami@gmail.com < 1.sh módszer tökéletesen működött. Sajnos otthoni linuxomon ez még nem működik.

......................
Egymás segítésére még: http://pc-kozosseg.com