2008-08-31 24 views
15

Me gustaría enviar rápidamente un correo electrónico desde la línea de comandos. Me doy cuenta de que probablemente hay varias maneras diferentes de hacer esto.¿Cómo envío correos electrónicos desde la línea de comandos?

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

Respuesta

8

de usar el correo:

$mail -s <subject> <recipients> 

A continuación, escriba su mensaje y terminar con una línea t tiene solo un punto Esto indica que ha terminado y envía el mensaje.

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

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

Una pequeña nota con este enfoque - a menos que su ordenador está conectado a Internet y su DNS la configuración está configurada correctamente, no podrá recibir respuestas a su mensaje. Para un programa de línea de comandos más robusto puede vincular a su cuenta de correo electrónico POP o IMAP, consulte pine o mutt.

+0

Hola. El correo no es un comando estándar de Windows. ¿Alguna idea de dónde \ cómo puedo obtenerla? ¡Gracias! –

+1

@EugeneS Es un comando estándar de Linux, por lo que probablemente esté en Cygwin http://www.cygwin.com –

11
$ echo "This is the email body" | mail -s "This is the subject" [email protected] 

alternativa:

$ cat | mail -s "A few lines off the top of my head" [email protected] 
This is where my 
multiline 
message would go 
^D 

^D - significa prensa ctrl + d

+2

uso ridículamente inútil de gato :) – hop

3

Si está buscando hacerlo desde una línea de comandos de Windows, hay una herramienta llamada blat que se puede utilizar desde un indicador de CMD.

Es un poco más divertido de PowerShell. Dado que PowerShell tiene acceso a .NET Framework, puede usar las clases de System.Net.Mail para enviar correos electrónicos. Hay un script de ejemplo en el PowerShell Community Script Repository.

2

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

También son más ligeros MTA que sólo son capaces de enviar correo, no recibirlo: nullmailer, mstmp, ssmtp, etc.

Postfix es por defecto de Ubuntu. This wiki article describe cómo configurarlo; ¡asegúrese de permitir solo el reenvío desde su dirección local!

2

Aquí está un ejemplo Power Shell de una secuencia de comandos 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 = "[email protected]" 
$objMailMessage.To.Add("[email protected]") 
$objMailMessage.Subject = "eMail subject Notification" 
$objMailMessage.Body = "Hello world!" 

$smtp.send($objMailMessage) 
4

También puede utilice esta versión sendmail para Windows. Es muy simple de usar, un comportamiento estándar tipo UNIX. Rápido. No necesita ninguna instalación, solo llame al EXE donde se encuentre en su sistema.

componer el correo electrónico:

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 

El envío del archivo:

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

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

Si usted está en un servidor Linux, pero el correo no está disponible (que puede ser el caso en servidores compartidos) , puede escribir un script simple PHP/Perl/Ruby (dependiendo de lo que esté disponible) para hacer lo mismo, por ej. 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); 

continuación, se invoca de la siguiente manera:

mail [email protected] test < message 
Cuestiones relacionadas