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

StackOverflow https://stackoverflow.com/questions/36498

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

$mail -s <subject> <recipients>

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

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

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

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

Другие советы

$ echo "This is the email body" | mail -s "This is the subject" me@email.com

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

$ cat | mail -s "A few lines off the top of my head" me@here.com
This is where my
multiline
message would go
^D

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

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

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

echo To: you@example.com, me@example.com >> the.mail
echo From: them@example.com >> 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

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

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

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

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

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

Вот пример Powershell для сценария отправки электронной почты:

$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 = "script@mycompany.com"
$objMailMessage.To.Add("you@yourcompany.com")
$objMailMessage.Subject = "eMail subject Notification"
$objMailMessage.Body = "Hello world!"

$smtp.send($objMailMessage)

Если вы хотите вызвать почтовую программу, прочитайте эту статью:

Как открыть почтовую программу по умолчанию с Subject и Body кросс-платформенным способом?

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

#! /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 me@example.com test < message
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top