Question

Je souhaite envoyer rapidement un e-mail à partir de la ligne de commande.Je réalise qu'il existe probablement plusieurs façons différentes de procéder.

Je recherche un moyen simple de le faire à partir d'un terminal Linux (probablement un shell bash mais tout devrait faire l'affaire) et une autre manière de le faire sous Windows.Je veux pouvoir créer un e-mail directement sur la ligne de commande ou avoir la possibilité de diriger le message vers le programme de ligne de commande.Comment procéderiez-vous pour faire cela ?Si vous avez de petits scripts, ce serait également bien.

Était-ce utile?

La solution

Vous pouvez utiliser le courrier :

$mail -s <subject> <recipients>

Vous tapez ensuite votre message et le terminez par une ligne qui ne comporte qu'un point.Cela signale que vous avez terminé et envoie le message.

Vous pouvez également rediriger votre e-mail depuis STDIN et il sera envoyé sous forme de texte d'e-mail :

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

Une petite remarque concernant cette approche : à moins que votre ordinateur ne soit connecté à Internet et que vos paramètres DNS ne soient correctement définis, vous ne pourrez pas recevoir de réponses à votre message.Pour un programme de ligne de commande plus robuste que vous pouvez lier à votre compte de messagerie POP ou IMAP, consultez soit pin ou cabot.

Autres conseils

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

Alternativement :

$ 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 - signifie appuyer Ctrl+d

Vous pouvez également utiliser ceci envoyer un mail version pour Windows.Il est très simple à utiliser, avec un comportement standard de type UNIX.Rapide.Ne nécessite aucune installation, appelez simplement le fichier EXE où qu'il se trouve sur votre système.

Composer l'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

Envoi du fichier :

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

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

Si vous cherchez à faire cela à partir d'une ligne de commande Windows, il existe un outil appelé blabla qui peut être utilisé à partir d’une invite CMD.

C'est un peu plus amusant avec PowerShell.Étant donné que PowerShell a accès au .NET Framework, vous pouvez utiliser les classes de System.Net.Mail pour envoyer des e-mails.Il y a un exemple de script sur le Référentiel de scripts communautaires PowerShell.

IIRC, vous devrez également configurer un agent de transfert de courrier (MTA) à utiliser mail ou la plupart des bibliothèques de messagerie. Envoyer un mail est le plus connu mais c'est un vrai cochon en matière de configuration. Exim, Qmail et Postfix sont toutes des alternatives populaires qui sont un peu plus modernes.

Il existe également des MTA plus légers qui ne peuvent qu'envoyer du courrier, pas en recevoir :nullmailer, mstmp, ssmtp, etc.

Postfix est la valeur par défaut pour Ubuntu. Cet article wiki décrit comment le configurer - assurez-vous d'autoriser uniquement le transfert à partir de votre adresse locale !

Voici un exemple Power Shell de script pour envoyer un e-mail :

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

Si vous souhaitez appeler un programme de messagerie, consultez cet article :

Comment ouvrir le programme de messagerie par défaut avec un objet et un corps de manière multiplateforme ?

Si vous êtes sur un serveur Linux, mais que le courrier n'est pas disponible (ce qui peut être le cas sur des serveurs partagés), vous pouvez écrire un simple script PHP/Perl/Ruby (selon ce qui est disponible) pour faire la même chose, par exemple.quelque chose comme ça:

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

Invoquez ensuite comme suit :

mail me@example.com test < message
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top