Làm thế nào để gửi email từ dòng lệnh?


28

Làm thế nào để gửi email từ dòng lệnh hoặc tập lệnh? Tôi muốn có thể chạy tập lệnh theo chương trình bằng cách chuyển người nhận và tin nhắn.


Nếu bạn đang viết một chương trình, nhiều ngôn ngữ có thư viện xử lý email
user151019

Câu trả lời:


21

mail -s subject someone@example.com gõ tin nhắn của bạn, nhấn Ctrl+Dđể kết thúc


11
Nếu bạn chưa cấu hình hệ thống của mình để cho biết nơi gửi email, điều đó có thể sẽ không thực sự gửi email, nó sẽ chỉ chồng chất trên máy Mac của tôi.
TJ Luoma

15
-1: Câu trả lời này không đầy đủ. Trừ khi hệ thống được cấu hình trước khi thực hiện lệnh này, như @TJLuoma lưu ý, lệnh này sẽ không hoạt động.
melvynkim

1
TJ Luoma và melvkim không chính xác: một hệ thống OS X tiêu chuẩn nằm ngoài hộp sẽ gửi email tốt mà không cần cấu hình. Máy OS X sẽ hoạt động như một máy chủ SMTP của chính nó, tra cứu DNS MX cho miền đích và gửi thư đến đó.
JohnEDee

2
@patrix, Đúng, nó sử dụng tên người dùng dài của tài khoản đã đăng nhập và địa chỉ ".local" tự tạo của Mac để tạo thành "Từ". Tôi sử dụng tất cả thời gian để gửi email thông báo cho tôi và nhân viên của tôi từ các quy trình theo kịch bản. TJ Luoma và melvkim đã nói rằng "sẽ không hoạt động" và "không thực sự gửi email", tuy nhiên, cả hai đều không chính xác.
JohnEDee

1
@RamarajT, vâng, bạn có thể chuyển đầu ra của lệnh echo sang mail và sau đó nó sẽ không yêu cầu Cmd-D. Ví dụ: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

Có hai chương trình mà tôi biết sẽ dễ dàng cho phép bạn định cấu hình máy Mac của mình để gửi email từ dòng lệnh.

Tôi đã viết lên HOWTO cho cả hai:

Trong hai, tôi đề nghị msmtp.

Cấu hình đủ phức tạp đến nỗi tôi không chắc mình có nên sao chép tất cả các bước ở đây không, nhưng tôi sẽ đề cập rằng nếu bạn sử dụng Homebrew, bạn có thể cài đặt msmtp bằng

brew install msmtp --with-macosx-keyring

Sau đó, phần còn lại chỉ là vấn đề thiết lập các tệp cấu hình liên quan

Đầu tiên là /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

Lưu ý rằng tls_trust_filedòng nên trỏ đến bất cứ nơi nào bạn đã tải xuống và cài đặt chứng chỉ từ https://www.thawte.com/roots/index.html .

Tôi đặt cái của tôi vào ~/Dropbox/Thawte Rootsđể tôi có thể có nó trên tất cả các máy Mac của tôi.

Sau đó, bạn cần một ~/.mailrctập tin để nói vị trí của nhị phân msmtp. Nếu bạn sử dụng brewnó sẽ là /usr/local/bin/msmtpnhư vậy tập tin sẽ như thế này:

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

Bước cuối cùng nhưng rất quan trọng là đảm bảo Keychain của bạn có thông tin chính xác theo định dạng mà msmtp sẽ mong đợi:

Tôi nghĩ rằng bao gồm hầu hết các chi tiết. Xem http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ nếu bạn muốn biết thêm một vài chi tiết cụ thể.


Rõ ràng các ví dụ của tôi trong đoạn script trên cho rằng bạn đang sử dụng Gmail, nhưng nó cũng có thể được sử dụng cho các máy chủ khác. Thay đổi example@gmail.comđịa chỉ email Gmail hoặc Google Apps của bạn.
TJ Luoma

Cuối cùng tôi đã có thể làm cho điều này hoạt động bằng cách sử dụng Google Roots có sẵn tại đây: pki.google.com/roots.pem . Nếu bạn gặp khó khăn với các vấn đề với tệp tin cậy và Gmail, điều này có thể bỏ chặn bạn.
tiền mã hóa

Nếu bạn gặp vấn đề với vị trí của tệp cấu hình (msmtprc), sau khi cài đặt với Homebrew trên macOS 10.13.3, msmtp đã tìm nó trong thư mục nhà của tôi: ~/.msmtprc
mã hóa

15

Cách cơ bản nhất để gửi thư là máng một phiên telnet với máy chủ smtp của nhà cung cấp / mạng của bạn. Sau khi bạn liên hệ với máy chủ và sau mỗi lệnh, máy chủ sẽ trả lời nếu nó chấp nhận lệnh với nội dung như "250 OK" hoặc nếu không có thông báo lỗi.

Tất cả các chi tiết có thể được tìm thấy trong RFC2821 - Giao thức chuyển thư đơn giản, Google cho nó. Cách cơ bản này rất tốt để kiểm tra lý do tại sao có sự cố gửi thư, nhưng tôi nghĩ nó khá phức tạp để kịch bản chứng minh đầy đủ.

Trước tiên hãy lấy giao diện dòng lệnh trên máy tính của bạn, bằng cách khởi động Terminal. Sau đó tiếp tục với các lệnh sau, từng lệnh một.

Mở phiên telnet tới cổng 25 của máy chủ smtp của nhà cung cấp / mạng của bạn

telnet name_or_ip_of_smtp_server 25

nói xin chào cộng với tên internet của nhà cung cấp / mạng của bạn, như abc.com

EHLO name_of_your_network

a from = return address là cần thiết, <và> là một phần của lệnh

MAIL FROM:<your_email_adress>

đưa ra một hoặc nhiều đích, <và> là một phần của lệnh

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

nói với máy chủ bạn muốn bắt đầu gửi dữ liệu

DATA

bây giờ máy chủ sẽ trả lời bạn có thể bắt đầu gửi thư của mình và chuyển sang chế độ dữ liệu

your data
more data
etc

Bây giờ kết thúc dữ liệu với một dấu chấm như chỉ char trên một dòng

.

máy chủ quay trở lại chế độ lệnh để bạn có thể thoát

QUIT

13

Điều này làm việc cho tôi, nó được viết với Lion trong tâm trí nhưng hoạt động cho Mountain Lion. Btw đây là sử dụng Gmail vì vậy nếu bạn không ...

Bạn không cần phải tải xuống bất cứ điều gì! (chỉ cần thiết lập một tài khoản gmail)

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

Định cấu hình Postfix cho Gmail SMTP Chỉnh sửa tệp /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

và thêm vào dưới đây bên dưới các rơ le nhận xét: -

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

Tạo sasl_password nếu chưa tồn tại

sudo vim /etc/postfix/sasl_passwd

và nhập vào như sau: -

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

Chạy các lệnh sau

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

Và bạn đã hoàn thành.
Bây giờ, bạn sẽ có thể gửi email từ trong dòng lệnh, ví dụ: để gửi nội dung của một thư mục dưới dạng cây đến một địa chỉ email

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

PS: Tôi đã làm điều này hoạt động tốt khi chạy thủ công từ Terminal hoặc trong các tập lệnh. Tuy nhiên, tại thời điểm này tôi bị mắc kẹt với vấn đề là thư không bao giờ được gửi khi launchd khởi chạy tập lệnh. Tôi đoán đó là một vấn đề với thiết lập công việc launchd.
Jonny

Tôi đã làm cho nó hoạt động. Xem apple.stackexchange.com/questions/92406/ Mạnh
Jonny

+1 Cảm ơn bạn đã thêm điều này. Thực sự đã giúp tôi ra ngoài. Tất cả những gì tôi thực sự cần là mục chuyển tiếp trong main.conf (đó là máy chủ SMTP của riêng tôi trên mạng LAN).
boot13

3
Ở trên có thể đã hết hạn. Tôi đã phải thêm "smtp_sasl_mechanism_filter = plain" theo stackoverflow.com/a/26451135/197789 để làm cho nó hoạt động. Nếu không, tôi đã nhận được một lỗi "thất bại chung".
Von


0

Bạn có thể muốn kiểm tra postfixconf cho phép và định cấu hình OS X để gửi email từ dòng lệnh (sử dụng đầu vào của bạn).

Nó dựa trên cấu hình postfix được ghi lại tốt trên web ở đây , đâyđây .


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.