Pergunta

Gostaria de enviar e-mails rapidamente a partir da linha de comando.Sei que provavelmente existem várias maneiras diferentes de fazer isso.

Estou procurando uma maneira simples de fazer isso em um terminal Linux (provavelmente um shell bash, mas qualquer coisa deve servir) e uma maneira alternativa de fazer isso no Windows.Quero poder enviar um e-mail diretamente na linha de comando ou ter a flexibilidade de canalizar a mensagem para o programa de linha de comando.Como você faria isso?Se você tiver scripts pequenos, tudo bem também.

Foi útil?

Solução

Você pode usar o correio:

$mail -s <subject> <recipients>

Em seguida, você digita sua mensagem e termina com uma linha que contém apenas um ponto final.Isso sinaliza que você terminou e envia a mensagem.

Você também pode enviar seu e-mail do STDIN e ele será enviado como o texto de um e-mail:

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

Uma pequena observação sobre essa abordagem: a menos que seu computador esteja conectado à Internet e suas configurações de DNS estejam definidas corretamente, você não poderá receber respostas à sua mensagem.Para um programa de linha de comando mais robusto, você pode vincular sua conta de e-mail POP ou IMAP, confira pinho ou vira-lata.

Outras dicas

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

Você também pode usar isso enviar correio versão para windows.É muito simples de usar, com comportamento padrão do UNIX.Rápido.Não necessita de instalação, basta chamar o EXE onde quer que esteja no seu sistema.

Compondo o 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

Enviando o arquivo:

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

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

Se você deseja fazer isso a partir de uma linha de comando do Windows, existe uma ferramenta chamada grosseiro que pode ser usado em um prompt do CMD.

É um pouco mais divertido com o PowerShell.Como o PowerShell tem acesso ao .NET Framework, você pode usar as classes de System.Net.Mail para enviar email.Há um script de exemplo no Repositório de scripts da comunidade PowerShell.

IIRC, você também terá que configurar um agente de transferência de correio (MTA) para usar mail ou a maioria das bibliotecas de e-mail. Enviar correio é o mais conhecido, mas é um verdadeiro porco quando se trata de configuração. Exim, Qmail e Pós-fixo são alternativas populares um pouco mais modernas.

Existem também MTAs mais leves que só conseguem enviar e-mails, e não recebê-los:nullmailer, mstmp, ssmtp, etc.

Postfix é padrão para Ubuntu. Este artigo wiki descreve como configurá-lo - certifique-se de permitir apenas o encaminhamento do seu endereço local!

Aqui está um exemplo do Power Shell de um script para enviar 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)

Se você deseja invocar um programa de e-mail, consulte este artigo:

Como abro o programa de e-mail padrão com Assunto e Corpo em plataforma cruzada?

Se você estiver em um servidor Linux, mas o correio não estiver disponível (o que pode ser o caso em servidores compartilhados), você pode escrever um script PHP/Perl/Ruby simples (dependendo do que estiver disponível) para fazer a mesma coisa, por exemplo.algo assim:

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

Em seguida, invoque da seguinte forma:

mail me@example.com test < message
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top