Bagaimana cara mengirim email dari baris perintah?


29

Bagaimana cara mengirim email dari baris perintah atau skrip? Saya ingin dapat menjalankan skrip secara terprogram dengan mengirimkan penerima dan pesan.


Jika Anda menulis sebuah program, banyak bahasa memiliki perpustakaan yang berhubungan dengan email
user151019

Jawaban:


22

mail -s subject someone@example.com ketik pesan Anda, tekan Ctrl+Duntuk menyelesaikan


11
Jika Anda belum mengonfigurasi sistem Anda untuk memberi tahu ke mana harus mengirim email, itu mungkin tidak akan benar-benar mengirim email, itu hanya akan menumpuk di Mac saya.
TJ Luoma

15
-1: Jawaban ini tidak lengkap. Kecuali jika sistem dikonfigurasikan sebelum menjalankan perintah ini, seperti yang dicatat oleh @TJLuoma, perintah ini tidak akan berfungsi.
melvynkim

1
TJ Luoma dan melvkim salah: sistem standar OS X di luar kotak akan mengirim email dengan baik tanpa konfigurasi yang diperlukan. Mesin OS X akan bertindak sebagai server SMTP sendiri, mencari DNS MX untuk domain tujuan dan mengirim email ke sana.
JohnEDee

2
@patrix, Benar, ia menggunakan nama pengguna panjang akun yang masuk dan alamat ".local" yang dibuat sendiri oleh Mac untuk membentuk "Dari". Saya menggunakannya sepanjang waktu untuk email notifikasi kepada saya dan staf saya dari proses shell-scripted. TJ Luoma dan melvkim mengatakan itu "tidak akan bekerja" dan "tidak benar-benar mengirim email", namun, keduanya tidak benar.
JohnEDee

1
@ RamarajT, ya Anda bisa mengirim output dari perintah echo ke mail, dan kemudian tidak akan membutuhkan Cmd-D. Misalnya: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

Ada dua program yang saya ketahui yang dengan mudah akan memungkinkan Anda untuk mengkonfigurasi Mac Anda untuk mengirim email dari baris perintah.

Saya telah menulis HOWTO untuk mereka berdua:

Dari keduanya, saya sarankan msmtp.

Konfigurasi cukup rumit sehingga saya tidak yakin apakah saya harus meniru semua langkah di sini, tetapi saya akan menyebutkan bahwa jika Anda menggunakan Homebrew, Anda dapat menginstal msmtp menggunakan

brew install msmtp --with-macosx-keyring

Maka sisanya hanyalah masalah pengaturan file konfigurasi terkait

Yang pertama adalah /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

Perhatikan bahwa tls_trust_filebaris harus mengarah ke mana pun Anda mengunduh dan menginstal sertifikat dari https://www.thawte.com/roots/index.html .

Saya memasukkan milik saya ~/Dropbox/Thawte Rootssehingga saya dapat memilikinya di semua Mac saya.

Maka Anda perlu ~/.mailrcfile untuk mengatakan di mana biner msmtp berada. Jika Anda menggunakannya brewmaka /usr/local/bin/msmtpfile akan terlihat seperti ini:

set sendmail="/usr/local/bin/msmtp"

Langkah terakhir tetapi penting adalah memastikan bahwa Keychain Anda memiliki informasi persis dalam format yang diharapkan oleh msmtp:

Saya pikir itu mencakup sebagian besar detail. Lihat http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ jika Anda ingin beberapa hal yang lebih spesifik.


Jelas contoh saya dalam skrip di atas berasumsi bahwa Anda menggunakan Gmail, tetapi dapat digunakan untuk server lain juga. Ubah example@gmail.comke alamat email Gmail atau Google Apps Anda.
TJ Luoma

Saya akhirnya bisa membuatnya berfungsi dengan menggunakan Google Roots yang tersedia di sini: pki.google.com/roots.pem . Jika Anda mengalami masalah dengan file trust dan Gmail, ini dapat membebaskan Anda.
codewise

Jika Anda mengalami masalah dengan lokasi file config (msmtprc), setelah menginstal dengan Homebrew di macOS 10.13.3, msmtp mencarinya di direktori home saya: ~/.msmtprc
codewise

15

Cara paling dasar untuk mengirim surat adalah melalui sesi telnet dengan server smtp dari penyedia / jaringan Anda. Setelah Anda menghubungi server dan setelah setiap perintah, server akan menjawab jika menerima perintah dengan sesuatu seperti "250 OK", atau jika tidak dengan pesan kesalahan.

Semua detail dapat ditemukan di RFC2821 - Protokol Transfer Surat Sederhana, Google untuk itu. Cara dasar ini bagus untuk menguji mengapa ada yang salah mengirim surat, tapi saya pikir itu cukup rumit untuk skrip itu bukti lengkap.

Pertama-tama dapatkan antarmuka baris perintah di komputer Anda, dengan memulai Terminal. Kemudian lanjutkan dengan perintah berikut, satu demi satu.

Buka sesi telnet ke port 25 dari server smtp penyedia / jaringan Anda

telnet name_or_ip_of_smtp_server 25

say hello plus internetname dari penyedia / jaringan Anda, seperti abc.com

EHLO name_of_your_network

a from = alamat pengirim diperlukan, <dan> adalah bagian dari perintah

MAIL FROM:<your_email_adress>

berikan satu atau lebih tujuan, <dan> adalah bagian dari perintah

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

beri tahu server Anda ingin mulai mengirim data

DATA

sekarang server harus menjawab Anda dapat mulai mengirim surat Anda dan masuk ke mode data

your data
more data
etc

sekarang selesaikan data dengan titik karena hanya char pada baris

.

server kembali ke mode-perintah sehingga Anda dapat keluar

QUIT

13

Ini bekerja untuk saya, itu ditulis dengan Lion dalam pikiran tetapi bekerja untuk Mountain Lion. Btw ini menggunakan Gmail jadi jika Anda tidak ...

Anda tidak perlu mengunduh apa pun! (cukup siapkan akun gmail)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Konfigurasikan Postfix untuk file Edit SMTP Gmail /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

dan tambahkan berikut ini di bawah relayhosts yang dikomentari: -

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

Hasilkan sasl_password jika belum ada

sudo vim /etc/postfix/sasl_passwd

dan masukkan yang berikut ini: -

[smtp.gmail.com]:587 username@gmail.com:password

Jalankan perintah berikut

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

Dan Anda selesai ....
Sekarang, Anda harus dapat mengirim email dari dalam baris perintah misalnya untuk mengirim isi direktori sebagai pohon ke alamat email

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

PS: Saya membuat ini berfungsi dengan baik ketika menjalankan ini secara manual dari Terminal atau dalam skrip. Namun pada titik ini saya terjebak dengan masalah bahwa surat tidak pernah dikirim ketika launchd meluncurkan skrip. Saya kira itu masalah dengan pengaturan pekerjaan launchd.
Jonny

Saya membuatnya bekerja. Lihat apple.stackexchange.com/questions/92406/…
Jonny

+1 Terima kasih telah menambahkan ini. Sangat membantu saya. Yang saya butuhkan hanyalah entri relayhost di main.conf (ini adalah server SMTP saya sendiri di LAN saya).
boot13

3
Di atas mungkin kedaluwarsa. Saya harus menambahkan "smtp_sasl_mechanism_filter = plain" sesuai stackoverflow.com/a/26451135/197789 untuk membuatnya berfungsi. Kalau tidak, saya mendapat kesalahan "kegagalan generik".
Von


0

Anda mungkin ingin memeriksa postfixconf yang memungkinkan dan mengkonfigurasi OS X untuk mengirim email dari baris perintah (menggunakan input Anda).

Ini didasarkan pada konfigurasi postfix yang didokumentasikan dengan baik di web di sini , di sini dan di sini .


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.