2008-08-31 64 views
15

Tôi muốn gửi email nhanh chóng từ dòng lệnh. Tôi nhận ra có thể có một số cách khác nhau để làm điều này.Làm cách nào để gửi email từ dòng lệnh?

Tôi đang tìm cách đơn giản để thực hiện việc này từ thiết bị đầu cuối Linux (có thể là bash shell nhưng mọi thứ nên làm) và cách khác để thực hiện việc này trên Windows. Tôi muốn để có thể whip lên một email ngay trên dòng lệnh hoặc có sự linh hoạt để ống tin nhắn vào chương trình dòng lệnh. Làm thế nào bạn sẽ đi về việc này? Nếu bạn có các kịch bản nhỏ cũng sẽ ổn.

Trả lời

8

Bạn có thể sử dụng mail:

$mail -s <subject> <recipients> 

Sau đó bạn gõ thông điệp của bạn và kết thúc nó bằng một dòng t mũ chỉ có một khoảng thời gian. Điều này báo hiệu bạn đã hoàn thành và gửi tin nhắn.

Bạn cũng có thể ống email của bạn trong từ STDIN và nó sẽ được gửi dưới dạng văn bản của một email:

$<mail-generating-program> | mail -s <subject> <recipients> 

Một lưu ý nhỏ với cách tiếp cận này - trừ khi máy tính của bạn được kết nối với mạng Internet và DNS của bạn cài đặt được đặt đúng cách, bạn sẽ không thể nhận được thư trả lời cho thư của mình. Để có chương trình dòng lệnh mạnh mẽ hơn, bạn có thể liên kết với tài khoản email POP hoặc IMAP của mình, hãy xem pine hoặc mutt.

+0

Hi. Mail không phải là lệnh windows chuẩn. Bất kỳ ý tưởng nơi \ làm thế nào tôi có thể nhận được nó? Cảm ơn! –

+1

@EugeneS Đây là một lệnh Linux chuẩn, vì vậy có thể trong Cygwin http://www.cygwin.com –

11
$ echo "This is the email body" | mail -s "This is the subject" [email protected] 

Hoặc:

$ cat | mail -s "A few lines off the top of my head" [email protected] 
This is where my 
multiline 
message would go 
^D 

^D - có nghĩa là báo chí ctrl + d

+2

sử dụng ridiculously vô dụng của mèo :) – hop

3

Nếu bạn đang tìm cách thực hiện điều này từ dòng lệnh Windows, có một công cụ gọi là blat có thể được sử dụng từ dấu nhắc CMD.

Đó là một chút thú vị hơn từ PowerShell. Vì PowerShell có quyền truy cập vào .NET Framework, bạn có thể sử dụng các lớp từ System.Net.Mail để gửi email. Có một tập lệnh mẫu trên PowerShell Community Script Repository.

2

IIRC bạn cũng sẽ phải định cấu hình tác nhân chuyển thư (MTA) để sử dụng mail hoặc hầu hết các thư viện email. Sendmail là nổi tiếng nhất nhưng là một con lợn thực sự khi nói đến cấu hình. Exim, QmailPostfix là tất cả các lựa chọn thay thế phổ biến hiện đại hơn một chút.

Ngoài ra còn có MTA nhẹ hơn mà chỉ có thể gửi mail, không nhận được nó: nullmailer, mstmp, ssmtp vv

Postfix là mặc định cho Ubuntu. This wiki article mô tả cách định cấu hình - hãy đảm bảo chỉ cho phép chuyển tiếp từ địa chỉ cục bộ của bạn!

2

Dưới đây là một ví dụ Power Shell của một kịch bản để gửi email:

$smtp = new-object Net.Mail.SmtpClient("mail.example.com") 

if($Env:SmtpUseCredentials -eq "true") { 
    $credentials = new-object Net.NetworkCredential("username","password") 
    $smtp.Credentials = $credentials 
} 
$objMailMessage = New-Object System.Net.Mail.MailMessage 
$objMailMessage.From = "[email protected]" 
$objMailMessage.To.Add("[email protected]") 
$objMailMessage.Subject = "eMail subject Notification" 
$objMailMessage.Body = "Hello world!" 

$smtp.send($objMailMessage) 
4

Bạn cũng có thể sử dụng phiên bản sendmail này cho cửa sổ. Nó rất đơn giản để sử dụng, hành vi giống như UNIX chuẩn. Nhanh. Không cần cài đặt, chỉ cần gọi EXE bất cứ nơi nào nó nằm trên hệ thống của bạn.

Soạn email:

echo To: [email protected], [email protected] >> the.mail 
echo From: [email protected] >> the.mail 
echo Subject: This is a SENDMAIL notification >> the.mail 
echo Hello World! >> the.mail 
echo This is simple enough. >> the.mail 
echo .>> the.mail 

Gửi file:

\usr\lib\sendmail.exe -t < the.mail 

type the.mail | C:\Projects\Tools\sendmail.exe -t 
1

Nếu bạn đang ở trên một máy chủ Linux, nhưng email không có sẵn (có thể là trường hợp trên các máy chủ chia sẻ) , bạn có thể viết đơn giản PHP/Perl/Ruby (tùy thuộc vào những gì có sẵn) kịch bản để làm điều tương tự, ví dụ một cái gì đó như thế này:

#! /usr/bin/php 
<?php 

if ($argc < 3) { 
    echo "Usage: " . basename($argv[0]) . " TO SUBJECT [CC]\n"; 
    exit(1); 
} 

$message = file_get_contents('php://stdin', 'r'); 
$headers = $argc >= 4 ? "Cc: $argv[3]\r\n" : null; 

$ret = mail($argv[1], $argv[2], $message, $headers); 

exit($ret ? 0 : 1); 

Sau đó gọi như sau:

mail [email protected] test < message 
Các vấn đề liên quan