Bagaimana cara mengirim file sebagai lampiran email menggunakan baris perintah Linux?

289

Saya telah membuat skrip yang berjalan setiap malam di server Linux saya yang digunakan mysqldumpuntuk 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 mailxseperti:

$ cat mysqldbbackup.sql | mailx [email protected]

catmenggemakan teks file cadangan yang disalurkan ke mailxprogram 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.

Kit Roed
sumber
1
Bisakah Anda berbagi skrip yang mencadangkan database MySQL Anda?
Almino Melo
Maaf, saya belum melakukan ini untuk sementara waktu sekarang. Saya tahu itu melibatkan memohon mysqldumpdan kemudian melampirkan output ke email (dengan mutt). Saya bahkan mungkin memiliki langkah yang memadatkan output ke zip / tar.gz juga ...
Kit Roed
1
Penasaran murni, mengapa email cadangan Anda vs scp atau rsync mereka?
jchook

Jawaban:

298

Tak satu pun dari mutt yang bekerja untukku. Itu mengira alamat email adalah bagian dari lampiran. Harus dilakukan:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
rynop
sumber
1
Saya menggunakan mutt 1.5.21 (2010-09-15) dan membutuhkan -a parameter untuk menjadi setelah penerima email
nurettin
Bekerja untuk saya menggunakan Mutt 1.5.24 (2015-08-30) di openSUSE Leap 42.1.
Antonio Vinicius Menezes Medei
3
@ buron berarti "opsi akhir". Lihatlah unix.stackexchange.com/questions/11376/…
rynop
Apakah ada cara untuk memeriksa pengecualian dan coba lagi pengiriman?
ti034
79

Atau, gagal mutt:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" [email protected]
Daniel Fone
sumber
26
Ini mengirimkan bagian yang uuencoded sebaris dan bukan sebagai lampiran . Banyak klien email yang mengenali ini dan menampilkan bagian yang uuencoded sebagai lampiran.
FuePi
4
Jangan gunakan uuencode di hari dan usia ini. MIME sedikit lebih kompleks tetapi jauh lebih ramah pengguna.
tripleee
@ DavidViven: Lihat misalnya (dengan cepat) semua jawaban lain untuk pertanyaan ini.
tripleee
6
Tak satu pun dari mereka menggunakan surat!
David Diberikan
Kemudian mis. Stackoverflow.com/questions/3317174/… dan ganti text/htmldengan tipe MIME apa pun yang masuk akal untuk lampiran Anda. (Untuk contoh konkret ini, saya kira application/gzip.)
tripleee
43

Tergantung pada versi linux Anda, itu bisa disebut surat. Mengutip @David di atas:

mail -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt

atau juga:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql [email protected] 
Nathan Fellman
sumber
@ KarelBílek: Bagaimana dengan opsi lainnya?
Nathan Fellman
Kedua solusi tidak bekerja untuk saya. Saya menerima email dengan outlook 2013 dan surat itu hanya berisi nama file
nickel715
2
halaman manual saya berbunyi:-a, --append=HEADER: VALUE append given header to the message being sent
exhuma
2
Nathan, sepertinya kutipan Anda dari David salah - ia menggunakan muttperintah, bukan mail. 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 -aopsi mail- saya bingung di sana sebentar;)
nealmcb
7
bukannya -a Anda harus menggunakan -A: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
Victor Perov
41

Dari melihat man mailx, program mailx tidak memiliki opsi untuk melampirkan file. Anda dapat menggunakan program lain seperti mutt.

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" [email protected]

Opsi baris perintah untuk mutt dapat ditampilkan dengan mutt -h.

Chris N
sumber
Terima kasih! Itu berhasil, saya kesulitan mendapatkan anjing kampung untuk melakukan aksinya secara diam-diam.
Kit Roed
10
Lihat jawaban di bawah ( stackoverflow.com/a/9524359/10608 ) karena ternyata sintaks berubah untuk mutt yang sekarang memerlukan a --.
Alexander Bird
29

Saya menggunakan SendEmail, yang dibuat untuk skenario ini. Ini dikemas untuk Ubuntu jadi saya menganggap itu tersedia

sendemail -f [email protected] -t [email protected] -m "Here are your files!" -a file1.jpg file2.zip

http://caspian.dotconf.net/menu/Software/SendEmail/

Fredrik Wendt
sumber
Saya percaya, itu harus "sendEmail" bukan "sendemail" dalam contoh Anda.
Davit
1
Ya dan tidak - sumber (Kaspia) menggunakan huruf besar E, sementara ini adalah strategi penamaan yang tidak biasa untuk alat baris perintah (di dunia Unix), setidaknya kemasan Ubuntu dari perangkat lunak ini menyediakan keduanya sendemaildan sendEmailmasuk /usr/bin/.
Fredrik Wendt
Xubuntu 14.04.3 saya belum diinstalSendEmail
Vitaly Zdanevich
3
"sudo apt install sendemail" untuk menginstal sendemail dan tambahkan "-f [email protected]", sebuah mandatory from field untuk perintah agar berfungsi. sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu
28

Saya menggunakan mpack.

mpack -s subject file [email protected]

Sayangnya mpack tidak mengenali '-' sebagai alias untuk stdin. Tetapi pekerjaan berikut ini, dan dapat dengan mudah dibungkus dengan (shell) alias atau skrip:

mpack -s subject /dev/stdin [email protected] < file

sumber
Ini bisa bekerja di bash untuk stdin. Saya tidak punya mpack, jadi saya belum mencoba:mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
thomasa88
23
 echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log [email protected]
Sourabh Potnis
sumber
4
Ini harus menjadi jawaban yang diterima. Menggunakan mailx default dan berfungsi dengan baik. Mutt v1.5.21 menolak untuk mengirim> 1MB lampiran saat menggunakan cron.
Joseph
Saya mencari sesuatu yang berfungsi di EC2 dan ini bekerja dengan baik.
singularitas
6
mailxtidak distandarisasi dengan benar. Setiap jawaban yang merekomendasikannya harus menunjukkan peringatan ini. Setidaknya ada tiga varian yang tidak kompatibel yang umum digunakan.
tripleee
13

Saya pernah menulis fungsi ini untuk ksh pada Solaris (menggunakan Perl untuk encoding base64):

# usage: email_attachment to cc subject body attachment_filename
email_attachment() {
    to="$1"
    cc="$2"
    subject="$3"
    body="$4"
    filename="${5:-''}"
    boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
    {
        print -- "To: $to"
        print -- "Cc: $cc"
        print -- "Subject: $subject"
        print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
        print -- "Mime-Version: 1.0"
        print -- ""
        print -- "This is a multi-part message in MIME format."
        print -- ""
        print -- "--$boundary"
        print -- "Content-Type: text/plain; charset=ISO-8859-1"
        print -- ""
        print -- "$body"
        print -- ""
        if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
            print -- "--$boundary"
            print -- "Content-Transfer-Encoding: base64"
            print -- "Content-Type: application/octet-stream; name=$filename"
            print -- "Content-Disposition: attachment; filename=$filename"
            print -- ""
            print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
            print -- ""
        fi
        print -- "--${boundary}--"
    } | /usr/lib/sendmail -oi -t
}
glenn jackman
sumber
8
Pada GNU / Linux, seseorang dapat menggunakan base64perintah alih-alih perl untuk penyandian
MestreLion
12

Anda dapat menggunakan mutt untuk mengirim email dengan lampiran

mutt -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt
David Schlosnagle
sumber
2
Setidaknya pada mutt 1.5.21 (Ubuntu trusty), Anda harus meletakkan -aopsi setelah penerima :, mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txtatau menggunakan --opsi sebelum penerima seperti yang ditunjukkan dalam jawaban rynop.
nealmcb
10

Kirim email badan Plaintext dengan satu lampiran plaintext dengan mailx:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' [email protected]

Di bawah ini adalah perintah yang sama seperti di atas, tanpa baris baru

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' [email protected]

Pastikan Anda memiliki file yang /home/el/attachfile.txtditentukan dengan konten ini:

<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer 
trillions in citizens assets through systematic inflation get the nod and 
walk free among us.
</body></html>

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.shdan letakkan di direktori home Anda:/home/el

Masukkan kode berikut test.sh:

#!/usr/bin/ksh
export MAILFROM="[email protected]"
export MAILTO="[email protected]"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID

(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
 echo ""
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/plain; charset=ISO-8859-1"
 echo "You need to enable HTML option for email"
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/html; charset=ISO-8859-1"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "--$MAILPART_BODY--"

 echo "--$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: uuencode"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 echo ""
 uuencode $ATTACH $(basename $ATTACH)
 echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO

Ubah variabel ekspor di bagian atas test.shuntuk mencerminkan alamat dan nama file Anda.

Unduh dokumen uji pdf dan masukkan ke dalamnya /home/eldisebut pdf-test.pdf

Buat file bernama /home/el/email_body.htm dan tulis baris ini di dalamnya:

<html><body><b>this is some bold text</b></body></html>

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.

pengguna1651561
sumber
1
Bagi saya itu bekerja sebaliknya. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
Vicky
uuencodeadalah 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.
tripleee
9

Ada beberapa jawaban di sini yang menyarankan mailatau mailxjadi ini lebih merupakan latar belakang untuk membantu Anda menafsirkannya dalam konteks.

Catatan Sejarah

Asal usul Unix mailkembali 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) maildan 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 Maildengan huruf kapital M dalam 2BSD (1978); tetapi dalam 3BSD (1979), ia menggantikan mailperintah huruf kecil juga, yang menyebabkan beberapa kebingungan baru. SVR3 (1986) termasuk turunan yang disebut mailx. The xitu 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/ mailxsejarah 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 mailatau mailxperintah. (Anda dapat mencari Provides: mailx.)

debian$ aptitude search ~Pmailx
i   bsd-mailx                       - simple mail user agent
p   heirloom-mailx                  - feature-rich BSD mail(1)
p   mailutils                       - GNU mailutils utilities for handling mail

(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-mailxadalah yang relatif sederhana mailxyang 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-mailxsekarang dipanggil s-naildan tidak mendukung pengiriman lampiran MIME -a. Lihat halaman manualnya dan lebih umum proyek Heirloom
  • mailutilsalias GNU mailutils mencakup mail/ mailxkompatibilitas 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.

tripleee
sumber
Saya awalnya memposting ini sebagai jawaban untuk pertanyaan duplikat cukup populer stackoverflow.com/questions/902591/…
tripleee
4

Alternatif lain - Swaks (Pisau Tentara Swiss untuk SMTP).

swaks -tls \
    --to ${MAIL_TO} \
    --from ${MAIL_FROM} \
    --server ${MAIL_SERVER} \
    --auth LOGIN \
    --auth-user ${MAIL_USER} \
    --auth-password ${MAIL_PASSWORD} \
    --header "Subject: $MAIL_SUBJECT" \
    --header "Content-Type: text/html; charset=UTF-8" \
    --body "$MESSAGE" \
    --attach mysqldbbackup.sql
Alexander Yancharuk
sumber
2

metamail memiliki alat metasend

metasend -f mysqlbackup.sql.gz -t [email protected] -s Backup -m application/x-gzip -b
Pistol
sumber
Ini digunakan untuk diinstal hampir di mana-mana, tetapi hampir tidak pernah digunakan. Karena sudah lama tidak dipelihara (dan masih AFAIK), itu telah dihapus dari perangkat standar de facto pada banyak platform.
tripleee
2

Saya menggunakan

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "[email protected]" 

dan ini bekerja dengan baik untuk saya ....

ponco
sumber
1

Saya biasanya hanya menggunakan perintah email di RHEL. Saya sudah mencoba mailx dan cukup efisien.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf [email protected]

This is the content of my msg.

.
Alejandro Santillan
sumber
1

cara terpendek bagi saya adalah

file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address

jadi untuk contoh Anda itu akan menjadi

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" [email protected]

bagian baiknya adalah saya dapat mengingatnya dengan Ctrl + r untuk mengirim file lain ...

Pipo
sumber
Kawat gigi tidak akan banyak membantu Anda tetapi untuk sepenuhnya portabel Anda harus menggunakan tanda kutip ganda di sekitar variabel. Lihat juga stackoverflow.com/questions/10067266/…
tripleee
1

Dari mesin sumber

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail [email protected]

Di mesin tujuan. Simpan badan email yang diterima sebagai db.sql.gz.b64 ; kemudian..

base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf
Konchog
sumber
0

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.

Mike Graf
sumber
2
Tidak semua server dapat memasang PHP. Jika Anda benar-benar ingin turun jalan "tulis skrip Anda sendiri", maka perl atau python lebih cocok karena mereka biasanya tersedia secara default.
exhuma
shbahkan lebih ada di mana-mana. Ada pertanyaan duplikat dengan jawaban dengan contoh yang bagus; ini milikku.
tripleee
0

mailxmemang memiliki -aopsi sekarang untuk lampiran.

Allan Pinto
sumber
2
Opsi "-a" adalah untuk header
Yves Martin
man mail [x], versi 12.5 dari 10/9/10 (beberapa tahun yang lalu) dengan jelas mengatakan -sebuah file Lampirkan file yang diberikan ke
pesan.`
4
beberapa versi mailxdo. Saya percaya ada dua implementasi. Satu -auntuk lampiran, yang lain untuk header.
exhuma
1
Versi mailx di Ubuntu berasal dari GNU dan di sana -a berarti menambahkan header. manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html Sistem mana dan mailx mana yang dilampirkan?
nealmcb
3
Dalam implementasi baru "-a" adalah untuk Header dan "-A" adalah untuk attchments
Avi Mehenwal
0

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 pushperintah, dan semua versi akan disimpan dengan cara terkompresi dan terorganisir.

Yoav
sumber
0

Inilah yang saya lakukan dengan satu file log besar di CentOS:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"[email protected]"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
# Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
    cd ${LOGDIR}
    # This works too. The message content will be taken from text file below
    # echo 'Hello!' >/root/scripts/audit_check.sh.txt
    # echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    /bin/rm "${LOGDIR}/${LOGNAME}.log"
fi
dagorv
sumber
Mengapa Anda mendefinisikan WHOAMIdan HOSTNAME dua kali?
David C. Rankin
Ini memiliki beberapa kesalahan gaya pengkodean shell. shellcheck.net akan menunjukkan beberapa, tetapi tidak semua, dari mereka.
tripleee
0

Jika file tersebut adalah teks, Anda dapat mengirimnya termudah di badan sebagai:

sendmail [email protected] < message.txt
perawat
sumber
1
Ini tidak mengirimkannya sebagai lampiran, atau bahkan sebagai badan pesan. Sendmail mengharapkan inputnya menjadi pesan email RFC5322 yang lengkap dan terbentuk dengan baik, dan mungkin gagal dengan cara yang menarik jika tidak.
tripleee
0

menggunakan perintah mailx

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name [email protected]

menggunakan sendmail

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: [email protected]"
  echo "Cc: [email protected]"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;
Girdhar Singh Rathore
sumber
1
sendmail adalah contoh yang bagus, senang saya menemukannya di sini.
Honza P.
Perhatikan bahwa Anda memerlukan baris kosong di awal "tubuh Anda", jika tidak, tubuh akan menghilang ke header, atau mungkin memecah pesan sepenuhnya. Juga lihat catatan di tempat lain tentang menghindari uuencodemendukung MIME.
tripleee
Dan backsticks yang mengerikan evaldan misteri di seluruh alat tidak perlu di sini.
tripleee
0

Mailutils membuat ini sepotong kue

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf [email protected]
  • -A file melampirkan file
  • -M mengaktifkan MIME, sehingga Anda dapat memiliki badan lampiran dan plaintext.

Jika belum diinstal, jalankan

sudo apt install mailutils
rumpel
sumber
0

Tergantung pada opsi perintah email Anda (periksa dengan man mail) dan versi yang bisa Anda lakukan

echo yourBody|mail -s yoursubject -A /your/attachment/file [email protected]

Pipo
sumber
Ini sepertinya menggandakan jawaban yang sudah ada tanpa menambahkan sesuatu yang baru, terutama -Apilihannya adalah khusus untuk mailutilsversi GNU mailseperti yang ditunjukkan dalam jawaban saya serta @ rumpel's
tripleee
-1

Jika mutt tidak berfungsi atau tidak diinstal, coba ini-

*#!/bin/sh

FilePath=$1
FileName=$2
Message=$3
MailList=$4

cd $FilePath

Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
Paras Singh
sumber