Saya ingin mengirim email dari skrip Linux Shell. Apa perintah standar untuk melakukan ini dan apakah saya perlu menyiapkan nama server khusus?
Saya ingin mengirim email dari skrip Linux Shell. Apa perintah standar untuk melakukan ini dan apakah saya perlu menyiapkan nama server khusus?
Jawaban:
Jika server dikonfigurasi dengan baik, misalnya memiliki MTA yang aktif dan berjalan, Anda dapat menggunakan perintah mail.
Misalnya, untuk mengirim konten file, Anda dapat melakukan ini:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
untuk lebih jelasnya.
sudo apt-get install mailutils
dan pilih situs Internet: Email dikirim dan diterima langsung menggunakan SMTP. .
Jika Anda ingin pendekatan yang bersih dan sederhana di bash, dan Anda tidak ingin menggunakan cat
, echo
, dll, cara paling sederhana akan menjadi:
mail -s "subject here" email@address.com <<< "message"
<<<
digunakan untuk mengarahkan input standar. Ini sudah menjadi bagian dari pesta sejak lama.
cat << END
...END | mail -s "subject" test@example.com
Jika exim dan ssmtp berjalan, Anda mungkin mengalami masalah. Jadi jika Anda hanya ingin menjalankan MTA sederhana, hanya untuk memiliki klien smtp sederhana untuk mengirim pemberitahuan email untuk desakan, Anda harus membersihkan MTA yang sudah terinstal seperti exim atau postfix terlebih dahulu dan menginstal ulang ssmtp.
Maka cukup mudah, mengkonfigurasi hanya 2 file (revaliases dan ssmtp.conf) - Lihat ssmtp doc -, dan penggunaan di skrip bash atau bourne Anda seperti:
#!/bin/sh
SUBJECT=$1
RECEIVER=$2
TEXT=$3
SERVER_NAME=$HOSTNAME
SENDER=$(whoami)
USER="noreply"
[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"
[[ -z $2 ]] && RECEIVER="another_configured_email_address"
[[ -z $3 ]] && TEXT="no text content"
MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"
echo -e $MAIL_TXT | sendmail -t
exit $?
Tentunya jangan lupa untuk membuka keluaran firewall anda ke port smtp (25).
Opsi lain untuk di skrip bash:
mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
/tmp/mailtest
diganti setiap kali skrip ini digunakan.Umumnya, Anda ingin menggunakan mail
perintah untuk mengirim pesan Anda menggunakan MTA lokal (yang akan mengirimkannya menggunakan SMTP ke tujuan atau hanya meneruskannya ke beberapa server SMTP yang lebih kuat, misalnya, di ISP Anda). Jika Anda tidak memiliki MTA lokal (meskipun agak tidak biasa bagi sistem mirip UNIX untuk menghilangkannya), Anda dapat menggunakan beberapa MTA minimalis seperti ssmtp .
ssmtp
cukup mudah untuk dikonfigurasi. Pada dasarnya, Anda hanya perlu menentukan di mana server SMTP penyedia Anda berada:
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail
Pilihan lain adalah menggunakan salah satu skrip myriads yang langsung terhubung ke server SMTP dan mencoba mengirim pesan di sana, seperti Smtp-Auth-Email-Script , smtp-cli , SendEmail , dll.
Mengakui Anda ingin menggunakan beberapa server smtp, Anda dapat melakukan:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Ubah somehost
,, someport
dan someaccount@somedomain
ke nilai aktual yang akan Anda gunakan. Tidak ada enkripsi dan otentikasi yang dilakukan dalam contoh ini.
mailx
tidak dipasang?
The mail
perintah melakukan itu (yang akan menduga ;-). Buka shell Anda dan enter man mail
untuk mendapatkan halaman manual untuk mail
perintah untuk semua opsi yang tersedia.
Anda bahkan tidak membutuhkan MTA. Protokol SMTP cukup sederhana untuk langsung menulisnya ke server SMTP Anda. Anda bahkan dapat berkomunikasi melalui SSL / TLS jika Anda telah menginstal paket OpenSSL. Periksa posting ini: https://33hops.com/send-email-from-bash-shell.html
Di atas adalah contoh tentang cara mengirim email teks / html yang akan berfungsi di luar kotak. Jika Anda ingin menambahkan lampiran, masalahnya bisa menjadi sedikit lebih rumit, Anda perlu menyandikan file biner base64 dan menyematkannya di antara batas-batas. Ini adalah tempat yang baik untuk mulai menyelidiki: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
Di linux, utilitas email dapat digunakan untuk mengirim lampiran dengan opsi "-a". Buka halaman manual untuk membaca tentang opsi. Misalnya kode berikut akan mengirimkan lampiran:
mail -s "THIS IS SUBJECT" -a attachment.txt name@domain.com <<< "Hai Sobat, Temukan laporan kegagalan."
MENGGUNAKAN POSTFIX
1: instal perangkat lunak
Debian dan Ubuntu:
apt-get update && apt-get install postfix mailutils
OpenSUSE:
zypper update && zypper install postfix mailx cyrus-sasl
Fedora:
dnf update && dnf install postfix mailx
CentOS:
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
Arch Linux:
pacman -Sy postfix mailutils
FreeBSD:
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
di configaration pilih dukungan SASL
make install clean
pkg install mailx
2. Konfigurasi Gmail
/ etc / postfix. Buat atau edit file kata sandi:
vim /etc/postfix/sasl_passwd
im menggunakan vim kamu dapat menggunakan file editer seperti nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Tambahkan ini
di mana pengguna mengganti dengan nama surat dan kata sandi Anda adalah kata sandi gmail Anda
[smtp.gmail.com]:587 user@gmail.com:password
Simpan dan tutup file dan Jadikan hanya dapat diakses oleh root: karena ini adalah konten sensitif yang berisi kata sandi Anda
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
direktori / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Tambahkan baris:
[smtp.gmail.com]:587 user@gmail.com:password
Simpan dan Jadikan dapat diakses hanya dengan root:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Konfigurasi Postfix
file konfigurasi main.cf
6 parameter yang harus kita atur di Postfix
Ubuntu, Arch Linux, Debian:
edit
vim /etc/postfix/main.cf
ubah nilai-nilai berikut:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_sasl_security_options yang dalam konfigurasi akan disetel kosong , untuk memastikan bahwa tidak ada opsi keamanan yang tidak kompatibel dengan Gmail yang digunakan.
Simpan dan tutup
seperti untuk
OpenSUSE:
vim /etc/postfix/main.cf
memodifikasi
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
itu juga membutuhkan konfigurasi file master.cf
memodifikasi:
vim /etc/postfix/master.cf
seperti dengan menghapus komentar baris ini (hapus #)
#tlsmgr unix - - n 1000? 1 tlsmg
Simpan dan tutup
Fedora, CentOS:
vim /etc/postfix/main.cf
memodifikasi
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
FreeBSD:
vim /usr/local/etc/postfix/main.cf
memodifikasi:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem
simpan dan tutup ini
4. Proses File Kata Sandi:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
untuk freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Mulai ulang postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
untuk FreeBSD:
service postfix onestart
nano /etc/rc.conf
Menambahkan
postfix_enable=YES
simpan lalu jalankan untuk memulai
service postfix start
5. Aktifkan "Aplikasi yang Kurang Aman" Di Gmail menggunakan bantuan tautan di bawah ini
https://support.google.com/accounts/answer/6010255
6. Kirim Email Tes
mail -s "subject" recever@domain.com
tekan enter
tambahkan badan surat sesuai keinginan Anda tekan enter lalu tekan ctrl + d untuk penghentian yang tepat
jika tidak berhasil, periksa semua langkah lagi dan periksa apakah Anda mengaktifkan " aplikasi kurang aman" di gmail Anda
kemudian restart postfix jika Anda memodifikasi sesuatu di dalamnya
untuk skrip shell buat file .sh dan tambahkan perintah 6 langkah sebagai kebutuhan Anda
Misalnya hanya untuk sampel
#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80
if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi
Skrip mengirim email ketika penggunaan disk naik di atas persentase yang ditentukan oleh variabel THRESHOLD (80% di sini).
Anda dapat menggunakan perintah 'email' atau 'emailx'.
(1) $ vim /etc/mail.rc # atau # vim /etc/nail.rc
set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login
(2) $ echo "Tolong ingat untuk menghapus topik ons yang tidak digunakan!" | mail -s "topik limbah" -a a.txt developer@xxx.com #kirim ke pengguna grup 'developer@xxxx.com'