Saya telah membuat skrip yang berjalan setiap malam di server Linux saya yang digunakan mysqldump
untuk membuat cadangan setiap database MySQL saya ke file .sql dan mengemasnya bersama sebagai file .tar terkompresi. Langkah selanjutnya yang ingin saya capai adalah mengirim file tar itu melalui email ke server email jarak jauh untuk diamankan. Saya sudah bisa mengirim skrip mentah di badan email dengan mem-pipkan file teks cadangan mailx
seperti:
$ cat mysqldbbackup.sql | mailx [email protected]
cat
menggemakan teks file cadangan yang disalurkan ke mailx
program dengan alamat email penerima diteruskan sebagai argumen.
Sementara ini memenuhi apa yang saya butuhkan, saya pikir itu bisa menjadi satu langkah lebih baik, Apakah ada cara, menggunakan skrip shell atau sebaliknya, untuk mengirim file .tar terkompresi ke pesan email keluar sebagai lampiran ? Ini akan mengalahkan harus berurusan dengan pesan email yang sangat panjang yang berisi data header dan sering memiliki masalah pembungkus kata dll.
sumber
mysqldump
dan kemudian melampirkan output ke email (denganmutt
). Saya bahkan mungkin memiliki langkah yang memadatkan output ke zip / tar.gz juga ...Jawaban:
Tak satu pun dari mutt yang bekerja untukku. Itu mengira alamat email adalah bagian dari lampiran. Harus dilakukan:
sumber
Atau, gagal mutt:
sumber
text/html
dengan tipe MIME apa pun yang masuk akal untuk lampiran Anda. (Untuk contoh konkret ini, saya kiraapplication/gzip
.)Tergantung pada versi linux Anda, itu bisa disebut surat. Mengutip @David di atas:
atau juga:
sumber
-a, --append=HEADER: VALUE append given header to the message being sent
mutt
perintah, bukanmail
. Juga seperti yang telah ditunjukkan orang lain, mutt sekarang tampaknya membutuhkan--
argumen sebelum alamat. Dan saya melihat bahwa @exhuma dan saya benar-benar menyetujui apa yang dilakukan-a
opsimail
- saya bingung di sana sebentar;)-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
Dari melihat
man mailx
, program mailx tidak memiliki opsi untuk melampirkan file. Anda dapat menggunakan program lain seperti mutt.Opsi baris perintah untuk mutt dapat ditampilkan dengan
mutt -h
.sumber
--
.Saya menggunakan SendEmail, yang dibuat untuk skenario ini. Ini dikemas untuk Ubuntu jadi saya menganggap itu tersedia
http://caspian.dotconf.net/menu/Software/SendEmail/
sumber
sendemail
dansendEmail
masuk/usr/bin/
.SendEmail
sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Saya menggunakan mpack.
Sayangnya mpack tidak mengenali '-' sebagai alias untuk stdin. Tetapi pekerjaan berikut ini, dan dapat dengan mudah dibungkus dengan (shell) alias atau skrip:
sumber
mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
sumber
mailx
tidak distandarisasi dengan benar. Setiap jawaban yang merekomendasikannya harus menunjukkan peringatan ini. Setidaknya ada tiga varian yang tidak kompatibel yang umum digunakan.Saya pernah menulis fungsi ini untuk ksh pada Solaris (menggunakan Perl untuk encoding base64):
sumber
base64
perintah alih-alih perl untuk penyandianAnda dapat menggunakan mutt untuk mengirim email dengan lampiran
sumber
-a
opsi setelah penerima :,mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txt
atau menggunakan--
opsi sebelum penerima seperti yang ditunjukkan dalam jawaban rynop.Kirim email badan Plaintext dengan satu lampiran plaintext dengan mailx:
Di bawah ini adalah perintah yang sama seperti di atas, tanpa baris baru
Pastikan Anda memiliki file yang
/home/el/attachfile.txt
ditentukan dengan konten ini:Jika Anda tidak memiliki uuencode baca ini: /unix/16277/how-do-i-get-uuencode-to-work
Di Linux, Kirim email tubuh HTML dengan lampiran PDF dengan sendmail:
Pastikan Anda telah menginstal ksh:
yum info ksh
Pastikan Anda telah menginstal dan mengkonfigurasi sendmail.
Pastikan Anda telah menginstal uuencode dan tersedia: /unix/16277/how-do-i-get-uuencode-to-work
Buat file baru yang dipanggil
test.sh
dan letakkan di direktori home Anda:/home/el
Masukkan kode berikut
test.sh
:Ubah variabel ekspor di bagian atas
test.sh
untuk mencerminkan alamat dan nama file Anda.Unduh dokumen uji pdf dan masukkan ke dalamnya
/home/el
disebut pdf-test.pdfBuat file bernama /home/el/email_body.htm dan tulis baris ini di dalamnya:
Pastikan file pdf memiliki 755 izin yang memadai.
Jalankan skrip
./test.sh
Periksa kotak masuk email Anda, teks harus dalam format HTML dan file pdf secara otomatis diartikan sebagai file biner. Berhati-hatilah untuk tidak menggunakan fungsi ini lebih dari mengatakan 15 kali dalam sehari, bahkan jika Anda mengirim email kepada diri Anda sendiri, filter spam di gmail dapat membuat daftar hitam domain yang memuntahkan email tanpa memberi Anda pilihan untuk membiarkannya lewat. Dan Anda akan menemukan ini tidak berfungsi lagi, atau hanya membiarkan melalui lampiran, atau email tidak datang sama sekali. Jika Anda harus melakukan banyak pengujian tentang ini, sebarkan selama berhari-hari atau Anda akan diberi label sebagai spammer dan fungsi ini tidak akan berfungsi lagi.
sumber
(echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
uuencode
adalah tidak benar lampiran. Ini hanya menanamkan gumpalan teks yang dapat dibaca oomputer di tengah beberapa teks lainnya. Dulu bekerja dengan baik ketika tidak ada mekanisme yang lebih baik, tapi itu 20 + tahun yang lalu.Ada beberapa jawaban di sini yang menyarankan
mail
ataumailx
jadi ini lebih merupakan latar belakang untuk membantu Anda menafsirkannya dalam konteks.Catatan Sejarah
Asal usul Unix
mail
kembali ke kabut sejarah awal Bell Labs Unix ™ (1969?), Dan kita mungkin tidak bisa berharap untuk masuk ke silsilah lengkapnya di sini. Cukuplah untuk mengatakan bahwa ada banyak program yang mewarisi kode dari atau reimplement (atau mewarisi kode dari implementasi ulang)mail
dan bahwa tidak ada basis kode tunggal yang dapat dengan jelas diidentifikasi sebagai "the"mail
.Namun, salah satu pesaing untuk posisi itu tentu saja "Berkeley Mail" yang awalnya disebut
Mail
dengan huruf kapital M dalam 2BSD (1978); tetapi dalam 3BSD (1979), ia menggantikanmail
perintah huruf kecil juga, yang menyebabkan beberapa kebingungan baru. SVR3 (1986) termasuk turunan yang disebutmailx
. Thex
itu mungkin ditambahkan untuk membuatnya unik dan berbeda; tetapi ini juga sekarang telah disalin, diimplementasikan kembali, dan dimutilasi sehingga tidak ada satu pun versi individu yang definitif.Kembali pada hari itu, standar de facto untuk mengirim binari melalui surat elektronik adalah
uuencode
. Itu masih ada, tetapi memiliki banyak masalah kegunaan; jika memungkinkan, Anda harus mengirim lampiran MIME sebagai gantinya, kecuali jika Anda secara khusus berusaha untuk dapat berkomunikasi dengan akhir 1980-an.MIME diperkenalkan pada awal 1990-an untuk menyelesaikan beberapa masalah dengan email, termasuk dukungan untuk berbagai jenis konten selain teks biasa dalam satu set karakter tunggal yang hanya benar-benar cocok untuk subset bahasa Inggris (dan, kami diberitahu, Hawaii ). Ini memperkenalkan dukungan untuk pesan multi bagian, internasionalisasi, tipe konten yang kaya, dll, dan dengan cepat memperoleh daya tarik sepanjang 1990-an.
(Catatan Pusaka
mail
/mailx
sejarah sangat membantu ketika menyusun ini, dan tentu layak dibaca jika Anda menyukai hal-hal semacam itu.)Penawaran Saat Ini
Pada 2018, Debian memiliki tiga paket yang termasuk a
mail
ataumailx
perintah. (Anda dapat mencariProvides: mailx
.)(Saya tidak memilih Debian sebagai rekomendasi; ini yang saya gunakan, jadi saya akrab dengannya; dan memberikan cara untuk membedakan berbagai alternatif secara jelas dengan merujuk pada nama paket masing-masing. Jelas juga merupakan distro dari Ubuntu yang mendapatkan paket-paket ini.)
bsd-mailx
adalah yang relatif sederhanamailx
yang tampaknya tidak mendukung pengiriman lampiran MIME. Lihat halaman manualnya dan perhatikan bahwa ini adalah yang Anda harapkan untuk ditemukan pada sistem * BSD, termasuk MacOS, secara default.heirloom-mailx
sekarang dipanggils-nail
dan tidak mendukung pengiriman lampiran MIME-a
. Lihat halaman manualnya dan lebih umum proyek Heirloommailutils
alias GNU mailutils mencakupmail
/mailx
kompatibilitas wrapper yang tidak mendukung pengiriman MIME lampiran dengan-A
Dengan keprihatinan ini, jika Anda memerlukan kode Anda untuk dibawa-bawa dan dapat bergantung pada paket yang agak rumit, cara sederhana untuk mengirim lampiran MIME dengan mudah adalah dengan menggunakannya
mutt
.sumber
Alternatif lain - Swaks (Pisau Tentara Swiss untuk SMTP).
sumber
metamail memiliki alat metasend
sumber
Saya menggunakan
dan ini bekerja dengan baik untuk saya ....
sumber
Saya biasanya hanya menggunakan perintah email di RHEL. Saya sudah mencoba mailx dan cukup efisien.
sumber
cara terpendek bagi saya adalah
jadi untuk contoh Anda itu akan menjadi
bagian baiknya adalah saya dapat mengingatnya dengan Ctrl + r untuk mengirim file lain ...
sumber
Dari mesin sumber
Di mesin tujuan. Simpan badan email yang diterima sebagai db.sql.gz.b64 ; kemudian..
sumber
Hanya untuk menambahkan 2 sen, saya akan menulis Skrip PHP saya sendiri:
http://php.net/manual/en/function.mail.php
Ada banyak cara untuk melakukan lampiran pada contoh di halaman itu.
sumber
sh
bahkan lebih ada di mana-mana. Ada pertanyaan duplikat dengan jawaban dengan contoh yang bagus; ini milikku.mailx
memang memiliki-a
opsi sekarang untuk lampiran.sumber
mailx
do. Saya percaya ada dua implementasi. Satu-a
untuk lampiran, yang lain untuk header.Bukan metode untuk mengirim email, tetapi Anda dapat menggunakan server Git online (mis. Bitbucket atau layanan serupa) untuk itu.
Dengan cara ini, Anda dapat menggunakan
git push
perintah, dan semua versi akan disimpan dengan cara terkompresi dan terorganisir.sumber
Inilah yang saya lakukan dengan satu file log besar di CentOS:
sumber
WHOAMI
danHOSTNAME
dua kali?Jika file tersebut adalah teks, Anda dapat mengirimnya termudah di badan sebagai:
sumber
menggunakan perintah mailx
menggunakan sendmail
sumber
uuencode
mendukung MIME.eval
dan misteri di seluruh alat tidak perlu di sini.Mailutils membuat ini sepotong kue
-A file
melampirkan file-M
mengaktifkan MIME, sehingga Anda dapat memiliki badan lampiran dan plaintext.Jika belum diinstal, jalankan
sumber
Tergantung pada opsi perintah email Anda (periksa dengan
man mail
) dan versi yang bisa Anda lakukanecho yourBody|mail -s yoursubject -A /your/attachment/file [email protected]
sumber
-A
pilihannya adalah khusus untukmailutils
versi GNUmail
seperti yang ditunjukkan dalam jawaban saya serta @ rumpel'sJika mutt tidak berfungsi atau tidak diinstal, coba ini-
sumber