Frage

Ich möchte schnell E-Mails über die Befehlszeile senden.Mir ist klar, dass es wahrscheinlich verschiedene Möglichkeiten gibt, dies zu tun.

Ich suche nach einer einfachen Möglichkeit, dies von einem Linux-Terminal aus zu tun (wahrscheinlich eine Bash-Shell, aber alles sollte funktionieren) und nach einer alternativen Möglichkeit, dies unter Windows zu tun.Ich möchte in der Lage sein, eine E-Mail direkt in der Befehlszeile zu erstellen oder die Flexibilität zu haben, die Nachricht an das Befehlszeilenprogramm weiterzuleiten.Wie würden Sie dabei vorgehen?Wenn Sie kleine Skripte haben, wäre das auch in Ordnung.

War es hilfreich?

Lösung

Sie können E-Mail verwenden:

$mail -s <subject> <recipients>

Anschließend geben Sie Ihre Nachricht ein und beenden sie mit einer Zeile, die nur einen Punkt enthält.Dies signalisiert, dass Sie fertig sind und sendet die Nachricht.

Sie können Ihre E-Mail auch über STDIN einleiten und sie wird als E-Mail-Text gesendet:

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

Eine kleine Anmerkung zu diesem Ansatz: Sofern Ihr Computer nicht mit dem Internet verbunden ist und Ihre DNS-Einstellungen nicht richtig eingestellt sind, können Sie keine Antworten auf Ihre Nachricht erhalten.Ein robusteres Befehlszeilenprogramm, das Sie mit Ihrem POP- oder IMAP-E-Mail-Konto verknüpfen können, finden Sie hier Kiefer oder Köter.

Andere Tipps

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

Alternative:

$ 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 – bedeutet drücken Strg+D

Sie können dies auch verwenden sendmail Version für Windows.Es ist sehr einfach zu verwenden und weist ein UNIX-ähnliches Standardverhalten auf.Schnell.Es ist keine Installation erforderlich. Rufen Sie einfach die EXE-Datei auf, wo immer sie sich auf Ihrem System befindet.

Verfassen der E-Mail:

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

Senden der Datei:

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

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

Wenn Sie dies über eine Windows-Befehlszeile tun möchten, gibt es ein Tool namens platt das über eine CMD-Eingabeaufforderung verwendet werden kann.

Mit PowerShell macht es etwas mehr Spaß.Da PowerShell Zugriff auf das .NET Framework hat, können Sie die Klassen von System.Net.Mail zum Versenden von E-Mails verwenden.Es gibt ein Beispielskript auf der PowerShell-Community-Skript-Repository.

IIRC müssen Sie auch einen Mail Transfer Agent (MTA) zur Verwendung konfigurieren mail oder die meisten E-Mail-Bibliotheken. Sendmail ist das bekannteste, aber was die Konfiguration angeht, ist es ein echtes Schwein. Exim, Qmail Und Postfix sind alles beliebte Alternativen, die etwas moderner sind.

Es gibt auch einfachere MTAs, die E-Mails nur versenden, aber nicht empfangen können:nullmailer, mstmp, ssmtp usw.

Postfix ist Standard für Ubuntu. Dieser Wiki-Artikel beschreibt die Konfiguration – stellen Sie sicher, dass Sie die Weiterleitung nur von Ihrer lokalen Adresse aus zulassen!

Hier ist ein Power Shell-Beispiel für ein Skript zum Senden von E-Mails:

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

Wenn Sie ein E-Mail-Programm aufrufen möchten, lesen Sie diesen Artikel:

Wie öffne ich das Standard-Mailprogramm mit Betreff und Text plattformübergreifend?

Wenn Sie sich auf einem Linux-Server befinden, E-Mails jedoch nicht verfügbar sind (was auf gemeinsam genutzten Servern der Fall sein kann), können Sie ein einfaches PHP-/Perl-/Ruby-Skript (je nachdem, was verfügbar ist) schreiben, um dasselbe zu tun, z. B.etwas wie das:

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

Rufen Sie dann wie folgt auf:

mail me@example.com test < message
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top