Apakah mailx mengirim email menggunakan relai SMTP atau apakah itu terhubung langsung ke server SMTP target?

30

Misalkan saya mengirim email menggunakan perintah berikut ini:

mailx [email protected]

kemudian lakukan mailx terlebih dahulu untuk mencari tahu server SMTP ISP saya untuk merelay email atau apakah terhubung langsung. Apakah itu tergantung pada apakah PC saya memiliki alamat IP publik atau di belakang NAT. Bagaimana saya memeriksa pengaturan mailx pada PC saya? Bagaimana saya bisa memverifikasi ini menggunakan tcpdump?

Rohit Banga
sumber

Jawaban:

29

Secara tradisional, Unix maildan turunannya (dan banyak alat Unix lainnya) menggunakan /usr/bin/sendmailantarmuka, yang disediakan oleh hampir semua agen transfer surat (MTA - postfix, exim, kurir, dan tentu saja sendmail).

Yaitu, mailprogram tidak berbicara protokol jaringan apa pun - ia memberi makan pesan sendmailmelalui stdin, dan memungkinkannya menangani pengiriman yang sebenarnya. (Ini kembali ke hari-hari ketika beberapa surat menggunakan SMTP, beberapa menggunakan UUCP, beberapa menggunakan BITNET ...)

Setelah pesan diantrikan sendmail, MTA menangani pengiriman pesan yang sebenarnya, baik melalui SMTP atau yang lainnya. Tergantung pada konfigurasi, itu dapat terhubung langsung ke tujuan MTA, atau menyampaikan email melalui host lain (juga disebut smarthost).

Koneksi langsung lebih umum di server; relay melalui smarthost lebih umum pada komputer pribadi di koneksi rumah - menyampaikan melalui akun email Gmail atau ISP / kantor Anda sangat penting untuk menghindari filter anti-spam "IP dinamis".

(Beberapa MTA seperti esmtpatau nullmailerdibuat khusus untuk pengguna rumahan dan selalu menggunakan relayhost. Ini tidak mendukung penerimaan email dan jauh lebih ringan pada sumber daya.)

mailx → [/ usr / bin / sendmail] → antrian MTA lokal → [SMTP] → MTA penerima → kotak masuk penerima
mailx → [/ usr / bin / sendmail] → antrian MTA lokal → [SMTP] → Gmail atau ISP / server kerja → [SMTP] → MTA penerima → kotak masuk penerima

Program lain, sebagian besar klien grafis yang ramah pengguna seperti Thunderbird atau Outlook, selalu terhubung langsung ke server SMTP relay / smarthost (sekali lagi, biasanya Gmail atau ISP / server SMTP kerja), yang mentransmisikan pesan atas nama Anda.

Dukungan SMTP asli hadir heirloom-mailx, tetapi tidak dalam tradisional bsd-mailx.

aplikasi → [SMTP] → Gmail atau ISP / server kerja → [SMTP] → MTA penerima → kotak masuk penerima

Metode ketiga - menghubungkan langsung ke server penerima - hampir tidak pernah digunakan, dan tidak ada MUA yang mendukungnya. Di komputer pribadi, menggunakannya akan menyebabkan pesan Anda ditolak (banyak spam dikirim dari alamat IP pengguna rumah yang terinfeksi).

aplikasi → [SMTP] → MTA penerima → ditangkap oleh filter spam
grawity
sumber
1
bagaimana cara mengetahui MTA saya di linux?
Rohit Banga
1
@iamrohitbanga 1) Periksa daftar paket yang diinstal. (Tidak semua distro datang dengan MTA secara default.)
grawity
1
@iamrohitbanga 2) Saya sudah menjawabnya. Outlook sering digunakan pada komputer pribadi di rumah, dan banyak server surat menolak pesan yang diterima dari alamat pengguna rumah (karena tingkat spam yang tinggi dari mereka). Itu sebabnya merelay melalui server perusahaan diperlukan.
grawity
1
@iamrohitbanga 3) "atau" berarti "salah satu dari", bukan "keduanya". Mereka yang menggunakan Gmail sebagai akun email utama mereka mengirim email melalui server Gmail. Mereka yang memiliki kotak surat di ISP mereka menggunakan server ISP mereka.
grawity
1
@iamrohitbanga 4) Itu karena mailx tidak menggunakan "metode ketiga". Ini menggunakan MTA seperti yang dijelaskan di atas jawaban saya. Dan sekali lagi, jika Anda tidak menggunakan koneksi Internet perusahaan, surat yang dikirim langsung dari PC Anda (tanpa relay) sangat mungkin dibuang.
grawity
31

mailx dapat menggunakan SMTP. File konfigurasinya adalah ~ / .mailrc

Salah satu contoh adalah mailx menggunakan SMTP Gmail .

Konfigurasi bahkan bisa dalam satu perintah:

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://smtp.gmail.com:587 \
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
-S smtp-auth-user=$FROM_EMAIL_ADDRESS \
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ \
$TO_EMAIL_ADDRESS

Jika server SMTP normal digunakan, itu jauh lebih mudah (lihat pengantar rinci di sini ):

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp=smtp://smtp.example.com
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
$TO_EMAIL_ADDRESS

Anda juga dapat memasukkan ini ke file konfigurasi mailx ~ / .mailrc

ericzma
sumber
Perhatikan bahwa ini tergantung pada heirloom-mailx yang bukan mailx default.
Scott
@Scott: Ya. Tetapi tergantung pada distribusi Linux. Pada beberapa sistem, standarnya bukan heirloom (mis. Ubuntu: fclose.com/b/linux/1411/… . Tampaknya ada 3 versi mailx). Pada beberapa yang lain seperti Fedora, OpenSUSE, yang standar adalah "fitur riched" "heirloom-mailx".
ericzma
@ ericzma Saya kira heirloom-mailx adalah yang terbaik / adalah heirloom satu-satunya mailx yang dapat melakukannya (menentukan dari dan smtp server pada command line)? Ini berfungsi dengan baik pada Debian meskipun tidak diinstal secara default. Pada tautan mailx Debian ke / etc / alternative / mailx yang terhubung ke / usr / bin / bsd-mailx Setelah menginstal heirloom-mailx ke debian, / etc / alternative / tautan mailx ke / usr / bin / heirloom-mailx dan bekerja dengan baik
barlop
@barlop Temuan Anda konsisten dengan milik saya: heirloom-mailx berfungsi sementara bsd-mailx tidak. Belum mengetahui tentang implementasi kerja lainnya.
ericzma
CentOS 6.7 menggunakan Heirloom mailx 12.4
Joshua Grigonis
3

Dari mailx(1)halaman manual, bagian DESCRIPTION , sub bagian Opsi String :

   smtp   Normally, mailx invokes sendmail(8) directly to  transfer
          messages.  If the smtp variable is set, a SMTP connection
          to the server specified by the value of this variable  is
          used  instead.
Ignacio Vazquez-Abrams
sumber
ini sedikit membingungkan saya. dapatkah Anda lebih rumit?
Rohit Banga
Uhh ... ini digunakan sendmailkecuali opsi ini diatur.
Ignacio Vazquez-Abrams
1

ada alternatif tanpa mta lokal seperti sendmail / postix.

paket debian ssmtp

info dari deskripsi rpm:

Summary     : Extremely simple MTA to get mail off the system to a Mailhub
URL         : http://packages.debian.org/stable/mail/ssmtp
License     : GPLv2+
Description : A secure, effective and simple way of getting mail off a system to your mail
            : hub. It contains no suid-binaries or other dangerous things - no mail spool
            : to poke around in, and no daemons running in the background. Mail is simply
            : forwarded to the configured mailhost. Extremely easy configuration.

hth

Stefan K.

StefanKaerst
sumber
1
Hampir ... ssmtp adalah klien SMTP seperti MTA. Berperilaku seperti / usr / bin / sendmail tetapi bukannya terhubung langsung ke catatan MX dari domain tertentu, itu mendelegasikan tugas ini ke server SMTP yang dapat diakses (biasanya melalui nama pengguna / kata sandi) ke mesin yang menjalankan ssmtp. Ini sangat berguna untuk sistem yang mengirim email dari rentang IP spam tinggi seperti rentang IP dinamis ADSL, penyedia hosting yang cerdik, dll.
Andre de Miranda