Как отправить электронную почту из командной строки?

Я хотел бы быстро отправить электронную почту из командной строки. Я понимаю, что, возможно, существует несколько разных способов сделать это.

Я ищу простой способ сделать это с терминала linux (скорее всего, это оболочка bash, но что-то должно сделать) и альтернативный способ сделать это в Windows. Я хочу, чтобы иметь возможность взломать электронную почту прямо в командной строке или иметь гибкость для передачи сообщения в программу командной строки. Как бы вы это сделали? Если у вас небольшие скрипты, которые также будут хороши.

Ответы

Ответ 1

Вы можете использовать почту:

$mail -s <subject> <recipients>

Затем вы вводите свое сообщение и завершаете его строкой с периодом. Это означает, что вы закончили и отправили сообщение.

Вы также можете отправить свою электронную почту из STDIN, и она будет отправлена ​​в виде текста по электронной почте:

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

Одна небольшая заметка с этим подходом - если ваш компьютер не подключен к Интернету, а ваши настройки DNS установлены правильно, вы не сможете получать ответы на свое сообщение. Для более надежной командной строки вы можете ссылаться на свою учетную запись электронной почты POP или IMAP, посмотрите pine или mutt.

Ответ 2

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

В качестве альтернативы:

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

^ D - означает нажатие ctrl + d

Ответ 3

Если вы хотите сделать это из командной строки Windows, есть инструмент под названием blat, который можно использовать из CMD.

Это немного больше удовольствия от PowerShell. Поскольку PowerShell имеет доступ к .NET Framework, вы можете использовать классы из System.Net.Mail для отправки электронной почты. В PowerShell Community script Repository приведен пример script.

Ответ 4

Вы также можете использовать эту sendmail версию для окон. Это очень простое, стандартное поведение, подобное UNIX. Быстро. Не требует установки, просто вызовите EXE, где бы он ни находился в вашей системе.

Составляя письмо:

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

Отправка файла:

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

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

Ответ 5

IIRC вам также понадобится настроить агент передачи почты (MTA) для использования mail или большинства библиотек электронной почты. Sendmail является наиболее известным, но является реальной свинью, когда дело доходит до конфигурации. Exim, Qmail и Postfix - все популярные альтернативы, которые немного более современны.

Есть также более легкие MTA, которые могут отправлять почту только, а не получать: nullmailer, mstmp, ssmtp и т.д.

Postfix по умолчанию используется для Ubuntu. Эта статья wiki описывает, как ее настроить - обязательно разрешите переадресацию с вашего локального адреса!

Ответ 6

Вот пример Power Shell script для отправки электронной почты:

$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)

Ответ 8

Если вы находитесь на сервере Linux, но почта недоступна (что может иметь место на общих серверах), вы можете написать простой PHP/Perl/Ruby (в зависимости от того, что доступно) script, чтобы сделать то же самое, например что-то вроде этого:

#! /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);

Затем вызовите следующее:

mail [email protected] test < message