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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
0
19 431
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

$ 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

смехотворно бесполезное использование кота :)

user3850 18.02.2009 14:01
Ответ принят как подходящий

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

$mail -s <subject> <recipients>

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

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

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

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

Здравствуй. Почта - это не стандартная команда Windows. Есть идеи, где \ как я могу это получить? Спасибо!

Eugene S 18.06.2013 12:56

@EugeneS Это стандартная команда Linux, поэтому она, вероятно, в Cygwin cygwin.com

Kyle Cronin 18.06.2013 17:47

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

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

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

Существуют также более легкие 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 = "[email protected]"
$objMailMessage.To.Add("[email protected]")
$objMailMessage.Subject = "eMail subject Notification"
$objMailMessage.Body = "Hello world!"

$smtp.send($objMailMessage)

Вы также можете использовать эту версию Отправить письмо для Windows. Это очень просто в использовании, стандартное поведение, подобное 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

Если вы находитесь на сервере 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 [email protected] test < message

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