Komut satırından nasıl e-posta gönderilir?


29

Komut satırından veya komut dosyasından bir e-posta nasıl gönderilir? Komut dosyasını programlı olarak alıcısını ve mesajı ileterek çalıştırabilmek istiyorum.


Bir program yazıyorsanız, birçok dilde e-posta ile ilgilenen kütüphaneler vardır
user151019

Yanıtlar:


22

mail -s subject someone@example.com mesajınızı yazın, Ctrl+Dbitirmek için tuşuna basın .


11
Sisteminizi nereye e-posta göndereceğini söyleyecek şekilde yapılandırmadıysanız, bu muhtemelen e-posta göndermeyecek, yalnızca Mac bilgisayarıma yüklenecek.
TJ Luoma

15
-1: Bu cevap eksik. Sistem bu komutu çalıştırmadan önce yapılandırılmadıysa, @TJLuoma'nın belirttiği gibi bu komut çalışmayacaktır.
melvynkim

1
TJ Luoma ve melvkim yanlıştır: Kutudan çıkan standart bir OS X sistemi, yapılandırmaya gerek kalmadan e-posta gönderir. OS X makinesi, kendi SMTP sunucusu olarak görev yapacak, hedef etki alanı için DNS MX’ini arayacak ve postaları oraya gönderecektir.
JohnEDee

2
@patrix, Doğru, bir "Kimden" oluşturmak için oturum açan hesabın uzun kullanıcı adını ve Mac'in kendi oluşturduğu ".local" adresini kullanır. Bana ve çalışanlarına kabuk komutlu işlemlerden gelen bildirim e-postaları için her zaman kullanıyorum. TJ Luoma ve melvkim "işe yaramayacak" ve "aslında e-posta göndermeyecek" diyorlardı, ancak ikisi de yanlış.
JohnEDee

1
@ RamarajT, evet, echo komutunun çıktısını postaya yönlendirebilir ve daha sonra bir Cmd-D gerektirmez. Örneğin: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

Mac'inizi komut satırından e-posta gönderecek şekilde yapılandırmanıza izin verecek farkında olduğum iki program var.

Her ikisi için de NASIL yazdım:

İki kişiden, öneririm msmtp.

Yapılandırma, buradaki tüm adımları yinelemem gerekip gerekmediğinden emin olmadığım kadar karmaşık, ancak Homebrew kullanıyorsanız msmtp kullanarak

brew install msmtp --with-macosx-keyring

O zaman geri kalan sadece ilgili yapılandırma dosyalarını ayarlama meselesidir

İlk olarak /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

Bu tls_trust_filehattın, https://www.thawte.com/roots/index.html adresinden sertifikaları indirdiğiniz ve yüklediğiniz yeri göstermesi gerektiğini unutmayın .

Benimkini içine koydum, ~/Dropbox/Thawte Rootsböylece tüm Mac'lerimde bulabilirim.

Sonra ~/.mailrcmsmtp binary'in nerede olduğunu söyleyen bir dosyaya ihtiyacınız var . Eğer kullandığınız brewöyle olacak /usr/local/bin/msmtpdosya şu şekilde görünecektir böylece:

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

Son fakat önemli adım, Anahtar Zincirinizin tam olarak msmtp'nin bekleyeceği biçimde bilgiye sahip olmasını sağlamaktır:

Bunun ayrıntıların çoğunu kapsadığını düşünüyorum. Daha fazla bilgi isterseniz, http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ adresini ziyaret edin.


Açıkçası yukarıdaki betiğindeki örneklerim, Gmail kullandığınızı varsayıyor, ancak diğer sunucular için de kullanılabilir. Change example@gmail.comGmail veya Google Apps e-posta adresine.
TJ Luoma

Sonunda, burada mevcut Google Roots'u kullanarak çalışmasını sağlayabildim : pki.google.com/roots.pem . Güven dosyası ve Gmail’le ilgili sorunlarınız varsa, bu engeli kaldırabilir.
codewise

Config (msmtprc) dosyasının konumu ile ilgili sorun yaşıyorsanız, MacOS 10.13.3'e Homebrew ile kurduktan sonra, msmtp ev dizinimde aradı:~/.msmtprc
codewise

15

Posta göndermenin en temel yolu, sağlayıcınızın / ağınızın smtp sunucusuyla yapılan telnet oturumudur. Sunucuyla iletişime geçtikten ve her komuttan sonra, sunucu komutu "250 Tamam" gibi bir şeyle kabul ederse veya bir hata mesajı vermezse yanıtlayacaktır.

Tüm detayları RFC2821 - Basit Posta Aktarım Protokolü, Google için bulabilirsiniz. Bu temel yol, neden bir şeylerin posta gönderirken neden yanlış gittiğini test etmek için harikadır, ancak bence tam olarak el yazması oldukça karmaşıktır.

Önce Terminal'i başlatarak, bilgisayarınızda bir komut satırı arayüzü edinin. Ardından, aşağıdaki komutlarla arka arkaya devam edin.

Sağlayıcınızın / ağınızın smtp sunucusunun 25 numaralı bağlantı noktasına bağlantı yapmak için bir telnet oturumu açın

telnet name_or_ip_of_smtp_server 25

merhaba deyin abc.com gibi sağlayıcınızın / ağınızın internet adını yazın

EHLO name_of_your_network

a from = return adres gereklidir, <ve> komutun bir parçasıdır

MAIL FROM:<your_email_adress>

bir veya daha fazla hedef belirtin, <ve> komutun bir parçasıdır

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

Sunucuya veri göndermeye başlamak istediğini söyle

DATA

şimdi sunucu cevap vermeli, postanızı göndermeye başlayabilir ve veri moduna geçebilirsiniz

your data
more data
etc

Şimdi bir satırda sadece char olarak bir nokta ile veri bitirmek

.

Sunucu komut moduna geri döner, böylece

QUIT

13

Bu benim için çalıştı, akılda aslan aklıyla yazılmış ama dağ aslanı için çalışıyor. Btw bu Gmail kullanıyor, bu yüzden değilseniz ...

Hiçbir şey indirmenize gerek yok! (sadece bir gmail hesabı kurun)

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

Gmail SMTP için Postfix'i yapılandırma Dosyayı /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

ve yorumlanan röportajlara aşağıdakileri ekleyin: -

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

Henüz mevcut değilse, sasl_password oluşturun

sudo vim /etc/postfix/sasl_passwd

ve aşağıdakileri girin: -

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

Aşağıdaki komutları çalıştırın

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

Ve bitti….
Artık komut satırından e-posta gönderebilmeniz gerekir; örneğin, bir dizinin içeriğini bir ağaç olarak bir e-posta adresine göndermek için

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

Not: Bu el ile Terminal'den veya komut dosyalarında çalıştırırken harika çalışmasını sağladım. Ancak bu noktada, başlatılan komut dosyasını başlattığında postaların hiçbir zaman gönderilmediği sorununa kapılıyorum. Sanırım bu işe başlama ile ilgili bir problem.
Jonny

Çalışmasını sağladım. Bkz apple.stackexchange.com/questions/92406/...
Jonny

+1 Bunu eklediğiniz için teşekkür ederiz. Bana gerçekten yardımcı oldu. Gerçekten ihtiyacım olan şey main.conf'daki röle evrakuydu (LAN'ımdaki kendi SMTP sunucum).
boot13 19

3
Yukarıdakiler güncel olmayabilir. Ben gereğince "smtp_sasl_mechanism_filter düz =" add yapmak zorunda stackoverflow.com/a/26451135/197789 işe almak için. Aksi halde "genel başarısızlık" hatası alıyorum.
Von


0

OS X'i komut satırından e-posta göndermek için etkinleştiren ve yapılandıran postfixconf'u (girişinizi kullanarak) kontrol etmek isteyebilirsiniz .

Burada , burada ve burada web'de iyi belgelendirilmiş postfix yapılandırmasına dayanmaktadır .


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.