Linux komut satırını kullanarak dosyayı e-posta eki olarak nasıl gönderirim?


289

mysqldumpMySQL veritabanlarımın her birini .sql dosyalarına yedeklemek ve bunları sıkıştırılmış bir .tar dosyası olarak paketlemek için kullanılan Linux sunucumda her gece çalışan bir komut dosyası oluşturdum . Yapmak istediğim bir sonraki adım, bu tar dosyasını e-posta yoluyla güvenli bir şekilde uzak bir e-posta sunucusuna göndermektir. Ben yedek metin dosyası boru mailxgibi vücutta ham komut dosyası bir e-posta gönderebildim :

$ cat mysqldbbackup.sql | mailx backup@email.com

catyedek dosyanın mailx, alıcının e-posta adresi bağımsız değişken olarak iletilen programa aktarılan metnini yankılar .

Bu ihtiyacım olanı başarsa da, bir adım daha iyi olabileceğini düşünüyorum , Kabuk komut dosyalarını kullanarak veya başka bir şekilde, sıkıştırılmış .tar dosyasını bir giden e-posta iletisine ek olarak göndermenin bir yolu var mı ? Bu, başlık verileri içeren ve genellikle kelime kaydırma sorunları olan çok uzun e-posta iletileriyle uğraşmak zorunda kalmaz.


1
MySQL veritabanlarınızı yedekleyen komut dosyasını paylaşabilir misiniz?
Almino Melo

Üzgünüm, bir süredir bunu yapmıyorum. Ben mysqldump(ve mutt) bir e-postaya çıkışını eklenmesi ve eklenmesi dahil biliyorum . Hatta bir zip / tar.gz çıktı da sıkıştırılmış bir adım olmuş olabilir ...
Kit Roed

1
Tamamen merak ediyorum, neden yedeklemelerinizi scp veya rsync'ye e-posta ile gönderelim?
jchook

Yanıtlar:


298

Muttların hiçbiri benim için çalışmadı. E-posta adresinin eklentinin bir parçası olduğunu düşünüyordu. Yapmak zorundaydım:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com

1
Mutt 1.5.21 (2010-09-15) kullanıyorum ve alıcı e-postasından sonra olmak için -a parametresi gerekiyor
nurettin

OpenSUSE Leap 42.1'de Mutt 1.5.24 (2015-08-30) kullanarak çalıştı.
Antonio Vinicius Menezes Medei

3
@fugitive "seçeneklerin sonu" anlamına gelir. Unix.stackexchange.com/questions/11376/…
rynop

İstisnaları kontrol etmenin ve göndermeyi tekrar denemenin bir yolu var mı?
ti034

79

Veya, başarısız:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" backup@email.com

26
Bu, kodlanmış parçayı satır içi olarak gönderir, ek olarak değil . Birçok posta-istemcileri bu olsa tanımak ve görüntülemek ek olarak uuencode'lanmış kısmını.
FuePi

4
Bu gün ve yaşta uuencode kullanmayın. MIME biraz daha karmaşık ama çok daha kullanıcı dostu.
üçlü

@DavidGiven: Örneğin (hızlı bir bakışla) bu sorunun diğer tüm cevaplarına bakın.
Üçlü

6
Hiçbiri posta kullanmıyor!
David

Sonra örneğin stackoverflow.com/questions/3317174/… ve text/htmlekiniz için anlamlı olan MIME türüyle değiştirin . (Bu somut örnek için, sanırım application/gzip.)
üçlü

43

Linux sürümünüze bağlı olarak posta olarak adlandırılabilir. Yukarıdaki @ David'e alıntı yapmak için:

mail -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

veya ayrıca:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql backup@email.com 

@ KarelBílek: Diğer seçenek ne olacak?
Nathan Fellman

Her iki çözüm de benim için çalışmıyor. Outlook 2013 ile e-posta aldım ve posta sadece dosya
adını

2
benim manpage okur:-a, --append=HEADER: VALUE append given header to the message being sent
exhuma

2
Nathan, David'den alıntı yanlış gibi görünüyor - muttkomutu kullandı , değil mail. Ayrıca diğerlerinin de belirttiği gibi, mutt şimdi --adresten önce bir tartışma gerektiriyor gibi görünüyor . Ve görüyorum @ exhuma ve ben aslında ne -aseçeneği üzerinde katılıyorum mail- orada bir dakika karıştı;)
nealmcb

7
-a yerine -A kullanmalısınız: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
Victor Perov

41

Bakarak man mailx, mailx program dosyayı bağlanması için bir seçenek yoktur. Mutt gibi başka bir program kullanabilirsiniz.

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com

Mutt için komut satırı seçenekleri ile gösterilebilir mutt -h.


Teşekkürler! Bu hile yaptı, sessizce eylemi yapmak için muting yapmakta zorlanıyordum.
Kit Roed

10
(Aşağıdaki cevabını bakın stackoverflow.com/a/9524359/10608 görünüşte sözdizimi artık gerektirir sokak köpeği için değişti çünkü) --.
Alexander Bird

29

Bu senaryo için oluşturulan SendEmail kullanıyorum. Ubuntu için paketlendi, bu yüzden kullanılabilir olduğunu varsayıyorum

sendemail -f sender@some.where -t receiver@some.place -m "Here are your files!" -a file1.jpg file2.zip

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


Örnekte "sendemail" yerine "sendEmail" olması gerektiğine inanıyorum.
Davit

1
Evet ve hayır - bu (Unix dünyasında) komut satırı araçları için nadir adlandırma stratejisi ise kaynak (hazar) Bu yazılımın Ubuntu ambalaj hem sağlar en azından, E büyük bir kullanır sendemailve sendEmailde /usr/bin/.
Fredrik Wendt

Benim Xubuntu 14.04.3 yüklü değilSendEmail
Vitaly Zdanevich

3
"sudo apt install sendemail" ile sendemail'i kurun ve "-f mandatory@email.com" komutunu çalışmasını sağlayın. sendemail -f mandatory@email.com-t to@some.one -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu

28

Mpack kullanıyorum.

mpack -s subject file user@example.com

Ne yazık ki mpack stdin için bir takma ad olarak '-' tanımıyor. Ancak aşağıdakiler işe yarar ve (kabuk) takma adı veya komut dosyasına kolayca sarılabilir:

mpack -s subject /dev/stdin loser@example.com < file

Bu stdin için bash'da işe yarayabilir. Ben mpack yok, bu yüzden denemedim:mpack -s subject /dev/stdin loser@example.com <(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_id@example.com

4
Bu kabul edilen cevap olmalı. Varsayılan mailx'i kullanır ve mükemmel çalışır. Mutt v1.5.21, cron kullanırken> 1MB'den fazla ek göndermeyi reddediyor.
Joseph

EC2'de çalışan bir şey arıyordum ve bu iyi çalıştı.
tekillik

6
mailxuygun şekilde standartlaştırılmamıştır. Bunu öneren herhangi bir cevap bu uyarıyı göstermelidir. Ortak kullanımda en az üç uyumsuz varyant vardır.
tripleee

13

Bir keresinde Solaris'te ksh için bu işlevi yazdım (base64 kodlaması için Perl kullanır):

# 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
}

8
GNU / Linux'ta base64kodlama için perl yerine komut kullanılabilir
MestreLion

12

E-postayı ekli olarak göndermek için mutt kullanabilirsiniz

mutt -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt

2
En azından mutt 1.5.21'den (Ubuntu güvenilir), -aseçeneği alıcıdan sonra koymanız gerekir : mutt -s "Backup" backup@email.com -a mysqldbbackup.sql < message.txtveya --rynop yanıtında gösterildiği gibi seçeneği alıcıdan önce kullanmanız gerekir .
nealmcb

10

Mailx ile bir düz metin eki olan bir Düz Metin gövde e-postası gönderin:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com

Aşağıda, yeni satırlar olmadan yukarıdakiyle aynı komut yer almaktadır

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com

/home/el/attachfile.txtBu içeriklerle tanımlanmış bir dosyanız olduğundan emin olun :

<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>

Eğer uuencode'unuz yoksa bunu okuyun: /unix/16277/how-do-i-get-uuencode-to-work

Linux'ta, sendmail ile PDF eki ile HTML gövde e-postası gönder:

Ksh'nin kurulu olduğundan emin olun: yum info ksh

Sendmail'in kurulu ve yapılandırılmış olduğundan emin olun.

Uuencode'un kurulu ve kullanılabilir olduğundan emin olun: /unix/16277/how-do-i-get-uuencode-to-work

Yeni bir dosya oluşturun test.shve ana dizininize yerleştirin:/home/el

Aşağıdaki kodu girin test.sh:

#!/usr/bin/ksh
export MAILFROM="el@defiant.com"
export MAILTO="youremail@gmail.com"
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

En üstteki dışa aktarma değişkenlerini test.shadresinizi ve dosya adlarınızı yansıtacak şekilde değiştirin.

Bir test pdf belgesi indirin ve /home/elpdf-test.pdf olarak adlandırın

/Home/el/email_body.htm adlı bir dosya oluşturun ve içine şu satırı koyun:

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

Pdf dosyasının yeterli 755 iznine sahip olduğundan emin olun.

Komut dosyasını çalıştırın ./test.sh

E-posta gelen kutunuzu kontrol edin, metin HTML biçiminde olmalı ve pdf dosyası otomatik olarak ikili dosya olarak yorumlanmalıdır. Bu işlevi günde 15 defadan fazla kullanmamaya dikkat edin, e-postaları kendinize gönderseniz bile, gmail'deki spam filtreleri, size izin verme seçeneği vermeden bir alan adı bildiren e-postaları kara listeye alabilir. Ve bunun artık işe yaramadığını veya yalnızca eki kullanmasına izin verdiğini veya e-postanın hiç gelmediğini göreceksiniz. Bu konuda çok fazla test yapmanız gerekiyorsa, bunları günler boyunca yayınlayın veya spam gönderen olarak etiketlenirsiniz ve bu işlev artık çalışmaz.


1
Benim için tam tersi oldu. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' user@domain.com
Vicky

uuencodeolduğu değil düzgün bir ek değildir. Basitçe okunabilir bir metin bloğunu başka bir metnin ortasına gömer. Daha iyi bir mekanizma olmadığında iyi çalışırdı, ancak bu 20+ yıl önceydi.
tripleee

9

Burada öneren birkaç cevap var mailya da mailxbu, bunları bağlam içinde yorumlamanıza yardımcı olacak bir arka plan.

Tarihsel Notlar

Unix'in kökenleri mailBell Labs Unix ™ 'in (1969?) Erken tarihinin sislerine geri döner ve muhtemelen burada tam şecere içine girmeyi umamayız. Kodu miras alan veya yeniden uygulayan (veya kodu yeniden uygulamadan miras alan) birçok program olduğunu mailve açıkça "the" olarak tanımlanabilecek tek bir kod tabanı olmadığını söylemek yeterlidir mail.

Bununla birlikte, bu pozisyondaki yarışmacılardan biri kesinlikle "Berkeley Mail" dir ve aslında Mail2BSD'de büyük harf M olarak adlandırılmıştır (1978); ancak 3BSD'de (1979) küçük harf mailkomutunun da yerini aldı ve yeni bir karışıklığa neden oldu. SVR3 (1986) adı verilen bir türevi içermiştir mailx. xTahminen, eşsiz ve farklı hale getirmek için ilave edildi; ancak bu da, kesin olan tek bir tek versiyonun olmaması için kopyalandı, yeniden uygulandı ve sakatlandı.

O günlerde, elektronik posta üzerinden ikili dosyalar göndermek için fiili standart oldu uuencode. Hala var, ancak çok sayıda kullanılabilirlik sorunu var; mümkünse, 1980'lerin sonlarıyla iletişim kurabilmek için özellikle çaba göstermediğiniz sürece, bunun yerine MIME ekleri göndermelisiniz.

MIME 1990'ların başında, sadece İngilizce'nin bir alt kümesi için gerçekten uygun olan tek bir karakter kümesinde düz metin dışındaki çeşitli içerik türlerini de içeren e-posta ile ilgili çeşitli sorunları çözmek için tanıtıldı (ve bize söylendi, Hawai'ian ). Bu, çok parçalı mesajlar, uluslararasılaşma, zengin içerik türleri vb. İçin destek sağladı ve 1990'lar boyunca hızla çekiş kazandı.

( Heirloom mail/ mailxtarih notları bunu oluştururken en yararlıydı ve bu tür şeylere giriyorsanız kesinlikle okumaya değer.)

Mevcut Teklifler

2018 itibariyle Debian'ın bir mailveya mailxkomut içeren üç paketi var . (Arayabilirsiniz 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

(Debian'ı bir öneri olarak söylemiyorum; kullandığım şey, bu yüzden aşina oldum; ve ilgili paket adlarına atıfta bulunarak çeşitli alternatifleri açık bir şekilde ayırt etmenin bir yolunu sunuyor. hangi Ubuntu bu paketleri alır.)

  • bsd-mailxNispeten basit mailxgelmez değil MIME ekleri gönderme desteği görünmektedir. Kılavuz sayfasına bakın ve bunun varsayılan olarak MacOS dahil * BSD sisteminde bulmayı beklediğiniz sistem olduğuna dikkat edin.
  • heirloom-mailxŞimdi çağrıldığını s-nailve yaptığı ile MIME ekleri gönderme desteği -a. Onun Bkz kılavuz sayfasını ve daha genel Heirloom projesini
  • mailutilsaka GNU Mailutils bir içermektedir mail/ mailxuyumluluk sarıcı yapar ile destek gönderme MIME ekleri-A

Bu endişelerle, kodunuzun taşınabilir olması gerekiyorsa ve biraz karmaşık bir pakete bağlı olabilirseniz, MIME eklerini taşınabilir olarak göndermenin basit yolu kullanmaktır mutt.


Aslında bunu orta derecede popüler bir yinelenen soruya cevap olarak gönderdim stackoverflow.com/questions/902591/…
tripleee

4

Başka bir alternatif - Swaks (SMTP için İsviçre Çakısı).

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

2

metamail araç metasendine sahiptir

metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b

Bu hemen hemen her yere kuruluyordu, ama neredeyse hiç kullanılmamıştı. Uzun bir süre bakımsız olduğu (ve hala AFAIK olduğu) birçok platformda de facto standart araç setinden kaldırıldı .
üçlü

2

kullandım

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c" 

ve bu benim için iyi çalıştı ....


1

Genellikle yalnızca RHEL'deki posta komutunu kullanırım. Mailx'i denedim ve oldukça verimli.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com

This is the content of my msg.

.

1

benim için en kısa yol

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

örnek için

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com

iyi tarafı, başka bir dosya göndermek için Ctrl + r ile hatırlayabilir ...


Diş telleri size pek iyi gelmez, ancak tamamen taşınabilir olabilmek için değişkenlerin etrafında çift tırnak kullanmalısınız. Ayrıca bkz. Stackoverflow.com/questions/10067266/…
tripleee

1

Kaynak makineden

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com

Hedef makinede. Alınan posta gövdesini db.sql.gz.b64 kaydedin ; sonra..

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

0

Sadece 2 sent eklemek için, kendi PHP Scriptimi yazarım:

http://php.net/manual/en/function.mail.php

Bu sayfadaki örneklerde eki yapmanın birçok yolu vardır.


2
Her sunucuda PHP yüklü olmayabilir. Gerçekten "kendi betiğinizi yazın" yolunda gitmek istiyorsanız, perl veya python genellikle varsayılan olarak kullanılabilir oldukları için çok daha uygundur.
exhuma

shdaha da yaygındır. İyi örneklerle cevapları olan yinelenen sorular var; işte benim.
Üçlü

0

mailx-aartık ekler için bir seçenek sunuyor.


2
"-A" seçeneği başlıklar içindir
Yves Martin

man mail [x], sürüm 12.5 / 10/9/10 (birkaç yıl önce) açıkça diyor ki -a dosya Verilen dosyayı
mesaja ekleyin.`

4
bazı sürümleri mailxyapmak. İki uygulama olduğuna inanıyorum. Biri -aekler, diğeri başlıklar içindir.
exhuma

1
Ubuntu'daki mailx sürümü GNU'dan geliyor ve orada bir başlık eklemek anlamına geliyor. manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html hangi sistem ve mailx eki nedir?
nealmcb

3
Yeni uygulamada "-a", Başlıklar ve "-A",
katılımlar

0

E-posta gönderme yöntemi değil, bunun için bir çevrimiçi Git sunucusu (örneğin Bitbucket veya benzeri bir hizmet) kullanabilirsiniz.

Bu şekilde git pushkomutları kullanabilirsiniz ve tüm sürümler sıkıştırılmış ve organize bir şekilde saklanır.


0

CentOS büyük bir günlük dosyası ile nasıl yapıyorum:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
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

Neden tanımlıyorsanız WHOAMIve HOSTNAME iki kez?
David C. Rankin

Bunun birkaç kabuk kodlama stili hatası vardır. shellcheck.net hepsine değil bazılarına işaret edecektir.
tripleee

0

Dosya metinse, gövdede en kolay olanı şu şekilde gönderebilirsiniz:

sendmail recipient@example.com < message.txt

1
Bu, ek olarak veya ileti gövdesi olarak gönderilmez. Sendmail, girdisinin eksiksiz, iyi biçimlendirilmiş bir RFC5322 e-posta mesajı olmasını bekler ve değilse ilginç şekillerde başarısız olabilir.
tripleee

0

mailx komutunu kullanma

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com

sendmail kullanma

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: user@company.com"
  echo "Cc: user@company.com"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;

1
Sendmail güzel bir örnek, burada bulduğuma sevindim.
Honza P.

"Vücudunuzun" başlangıcında boş bir satıra ihtiyacınız olduğunu unutmayın, aksi takdirde gövde başlıklara kaybolacak veya mesajı tamamen kesecektir. Ayrıca uuencodeMIME lehine kaçınmayla ilgili başka yerlere de bakınız .
üçlü

Ve evaltüm mekanizmanın etrafındaki korkunç ve gizemli backticks burada tamamen gereksiz.
üçlü

0

Mailutils bunu bir parça kek yapar

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf mail@example.org
  • -A file bir dosya ekler
  • -M bir ek ve düz metin gövdesine sahip olabilmeniz için MIME özelliğini etkinleştirir.

Henüz yüklenmediyse çalıştırın

sudo apt install mailutils

0

Posta komutu seçeneklerinize (kontrol edin man mail) ve yapabileceğiniz sürüme bağlı olarak

echo yourBody|mail -s yoursubject -A /your/attachment/file john@doe.com


Bu, yeni bir şey eklemeden mevcut cevapları çoğaltıyor gibi görünüyor, en önemlisi -Aseçenek cevabımda belirtildiği gibi @ rumpel'inmailutilsmail
üçlü 3

-1

Mutt çalışmıyorsa veya takılı değilse, bunu deneyin-

*#!/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*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.