Pregunta

Me gustaría enviar correos electrónicos rápidamente desde la línea de comando.Me doy cuenta de que probablemente hay varias formas diferentes de hacer esto.

Estoy buscando una forma sencilla de hacer esto desde una terminal de Linux (probablemente un shell bash, pero cualquier cosa debería funcionar) y una forma alternativa de hacerlo en Windows.Quiero poder enviar un correo electrónico directamente en la línea de comando o tener la flexibilidad de canalizar el mensaje al programa de línea de comando.¿Cómo harías para hacer esto?Si tiene scripts pequeños, también estaría bien.

¿Fue útil?

Solución

Puedes usar el correo:

$mail -s <subject> <recipients>

Luego escribe su mensaje y lo finaliza con una línea que solo tiene un punto.Esto indica que ha terminado y envía el mensaje.

También puede enviar su correo electrónico desde STDIN y se enviará como texto de un correo electrónico:

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

Una pequeña nota con este enfoque: a menos que su computadora esté conectada a Internet y su configuración DNS esté configurada correctamente, no podrá recibir respuestas a su mensaje.Para obtener un programa de línea de comandos más sólido que pueda vincular a su cuenta de correo electrónico POP o IMAP, consulte cualquiera de los dos pino o chucho.

Otros consejos

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

Alternativamente:

$ 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 - significa presionar control+d

También puedes usar esto enviar correo versión para windows.Es muy sencillo de utilizar y tiene un comportamiento estándar similar al de UNIX.Rápido.No necesita ninguna instalación, simplemente llame al EXE dondequiera que esté ubicado en su sistema.

Redactando el correo electrónico:

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

Enviando el archivo:

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

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

Si desea hacer esto desde una línea de comandos de Windows, existe una herramienta llamada blat que se puede utilizar desde un indicador CMD.

Es un poco más divertido desde PowerShell.Dado que PowerShell tiene acceso a .NET Framework, puede utilizar las clases de System.Net.Mail para enviar correos electrónicos.Hay un script de ejemplo en el Repositorio de scripts de la comunidad de PowerShell.

IIRC también tendrás que configurar un agente de transferencia de correo (MTA) para usar mail o la mayoría de las bibliotecas de correo electrónico. Enviar correo es el más conocido pero es un verdadero cerdo cuando se trata de configuración. Exim, correo electrónico y Sufijo son todas alternativas populares que son un poco más modernas.

También hay MTA más livianos que solo pueden enviar correo, no recibirlo:correo nulo, mstmp, ssmtp, etc.

Postfix es el predeterminado para Ubuntu. Este artículo wiki describe cómo configurarlo: ¡asegúrese de permitir solo el reenvío desde su dirección local!

A continuación se muestra un ejemplo de Power Shell de un script para enviar correo electrónico:

$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 desea invocar un programa de correo electrónico, consulte este artículo:

¿Cómo abro el programa de correo predeterminado con Asunto y Cuerpo de forma multiplataforma?

Si está en un servidor Linux, pero el correo no está disponible (lo que puede ser el caso en servidores compartidos), puede escribir un script PHP/Perl/Ruby simple (dependiendo de lo que esté disponible) para hacer lo mismo, por ejemplo.algo como esto:

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

Luego invoca de la siguiente manera:

mail me@example.com test < message
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top