Eu criei um script que é executado todas as noites no meu servidor Linux que usa mysqldump
para fazer backup de cada um dos meus bancos de dados MySQL em arquivos .sql e os empacota como um arquivo .tar compactado. O próximo passo que desejo realizar é enviar esse arquivo tar por email para um servidor de email remoto por segurança. Consegui enviar um email ao script bruto no corpo, canalizando o arquivo de texto de backup mailx
para:
$ cat mysqldbbackup.sql | mailx [email protected]
cat
ecoa o texto do arquivo de backup que é canalizado para o mailx
programa com o endereço de email do destinatário passado como argumento.
Enquanto isso realiza o que eu preciso, acho que poderia ser um passo melhor. Existe alguma maneira, usando scripts de shell ou de outra forma, enviar o arquivo .tar compactado para uma mensagem de email de saída como anexo ? Isso exigiria lidar com mensagens de email muito longas que contêm dados de cabeçalho e geralmente têm problemas de quebra de linha, etc.
fonte
mysqldump
e anexar a saída a um email (commutt
). I pode mesmo ter tido um passo que comprimido a saída para um zip / tar.gz bem ...Respostas:
Nenhum dos vira-latas funcionou para mim. Ele achava que o endereço de e-mail fazia parte do attachemnt. Tive que fazer:
fonte
Ou, falha na vira-lata:
fonte
text/html
por qualquer tipo MIME que faça sentido para o seu anexo. (Para este exemplo concreto, eu achoapplication/gzip
.)Dependendo da sua versão do Linux, pode ser chamado de correio. Para citar @ David acima:
ou também:
fonte
-a, --append=HEADER: VALUE append given header to the message being sent
mutt
comando, nãomail
. Além disso, como outros já apontaram, o mutt agora parece exigir um--
argumento antes do endereço. E eu vejo que @exhuma e eu realmente concordar com o que a-a
opçãomail
faz - Fiquei confuso por um minuto;)-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
De uma olhada
man mailx
, o programa mailx não tem uma opção para anexar um arquivo. Você pode usar outro programa como o mutt.Opções de linha de comando para mutt podem ser mostradas com
mutt -h
.fonte
--
.Eu uso o SendEmail, que foi criado para este cenário. É empacotado para o Ubuntu, então eu presumo que esteja disponível
http://caspian.dotconf.net/menu/Software/SendEmail/
fonte
sendemail
esendEmail
em/usr/bin/
.SendEmail
sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Eu uso mpack.
Infelizmente o mpack não reconhece '-' como um pseudônimo para stdin. Mas o trabalho a seguir e pode ser facilmente envolvido em um alias (shell) ou em um script:
fonte
mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
fonte
mailx
não está adequadamente padronizado. Qualquer resposta que o recomende deve apontar esta advertência. Existem pelo menos três variantes incompatíveis em uso comum.Certa vez, escrevi esta função para o ksh no Solaris (usa Perl para codificação base64):
fonte
base64
comando em vez do perl para codificaçãoVocê pode usar o mutt para enviar o email com anexo
fonte
-a
opção após o destinatário:mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txt
ou usar a--
opção antes do destinatário, conforme mostrado na resposta do rynop.Envie um email de corpo sem formatação com um anexo de texto sem formatação com mailx:
Abaixo está o mesmo comando acima, sem as novas linhas
Verifique se você tem um arquivo
/home/el/attachfile.txt
definido com este conteúdo:Se você não tiver o uuencode, leia isto: /unix/16277/how-do-i-get-uuencode-to-work
No Linux, envie email do corpo em HTML com um anexo em PDF com o sendmail:
Verifique se você tem o ksh instalado:
yum info ksh
Verifique se o sendmail está instalado e configurado.
Verifique se o uuencode está instalado e disponível: /unix/16277/how-do-i-get-uuencode-to-work
Crie um novo arquivo chamado
test.sh
e coloque-o em seu diretório pessoal:/home/el
Coloque o seguinte código em
test.sh
:Altere as variáveis de exportação na parte superior
test.sh
para refletir seu endereço e nomes de arquivos.Faça o download de um documento PDF de teste e coloque-o em
/home/el
pdf-test.pdfCrie um arquivo chamado /home/el/email_body.htm e coloque esta linha:
Verifique se o arquivo pdf possui 755 permissões suficientes.
Execute o script
./test.sh
Verifique sua caixa de entrada de e-mail, o texto deve estar no formato HTML e o arquivo pdf interpretado automaticamente como um arquivo binário. Tome cuidado para não usar esta função mais do que digamos 15 vezes por dia, mesmo se você enviar os e-mails para si mesmo, os filtros de spam do Gmail podem colocar na lista negra um domínio que vomite e-mails sem oferecer a opção de deixá-los passar. E você descobrirá que isso não funciona mais, ou apenas deixa passar o anexo, ou o email não chega. Se você precisar fazer muitos testes, espalhe-os por dias ou será rotulado como spammer e essa função não funcionará mais.
fonte
(echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
uuencode
não é adequadamente um anexo. Ele simplesmente incorpora um blob de texto legível para o computador no meio de algum outro texto. Costumava funcionar bem quando não havia mecanismo melhor, mas isso foi há mais de 20 anos.Há várias respostas aqui sugerindo,
mail
oumailx
seja, isso é mais um pano de fundo para ajudá-lo a interpretá-las no contexto.Notas históricas
As origens do Unix
mail
remontam às brumas da história inicial do Bell Labs Unix ™ (1969?), E provavelmente não podemos esperar entrar em sua genealogia completa aqui. Basta dizer que existem muitos programas que herdam código ou reimplementam (ou herdam código de uma reimplementação de)mail
e que não existe uma base de código única que possa ser inequivocamente identificada como "o"mail
.No entanto, um dos candidatos a essa posição é certamente "Berkeley Mail", que foi originalmente chamado
Mail
com M maiúsculo em 2BSD (1978); mas em 3BSD (1979), também substituiu omail
comando em minúsculas , levando a uma nova confusão. SVR3 (1986) incluiu um derivado que foi chamadomailx
. Ox
foi, presumivelmente, para torná-lo único e distinto; mas isso também já foi copiado, reimplementado e mutilado para que não exista uma versão individual definitiva.Naquela época, o padrão de fato para o envio de binários pelo correio eletrônico era
uuencode
. Ainda existe, mas tem vários problemas de usabilidade; se possível, você deve enviar anexos MIME, a menos que se esforce especificamente para poder se comunicar com o final dos anos 80.O MIME foi introduzido no início dos anos 90 para resolver vários problemas com o email, incluindo suporte para vários tipos de conteúdo, além de texto sem formatação, em um único conjunto de caracteres que realmente é adequado apenas para um subconjunto de inglês (e, segundo nos dizem, havaiano) ) Isso introduziu o suporte a mensagens multipartes, internacionalização, tipos de conteúdo sofisticado etc., e rapidamente ganhou força ao longo dos anos 90.
(As notas da herança
mail
/mailx
história foram mais úteis ao compor isso e certamente valem a pena ser lidas se você gosta desse tipo de coisa.)Ofertas atuais
A partir de 2018, o Debian possui três pacotes que incluem um comando
mail
oumailx
. (Você pode procurarProvides: mailx
.)(Eu não estou destacando o Debian como uma recomendação; é o que eu uso, por isso estou familiarizado com ele; e fornece um meio de distinguir as várias alternativas sem ambiguidade, consultando os respectivos nomes de pacotes. É obviamente também a distro de qual Ubuntu obtém esses pacotes.)
bsd-mailx
é relativamente simplesmailx
e parece não suportar o envio de anexos MIME. Consulte a página do manual e observe que este é o que você esperaria encontrar em um sistema * BSD, incluindo o MacOS, por padrão.heirloom-mailx
agora está sendo chamados-nail
e faz o apoio enviando anexos MIME com-a
. Veja sua página de manual e, de maneira mais geral, o projeto Heirloommailutils
aka GNU mailutils inclui ummail
/mailx
invólucro de compatibilidade que faz suportar o envio de anexos MIME com-A
Com essas preocupações, se você precisar que seu código seja portátil e possa depender de um pacote um pouco complexo, a maneira mais simples de enviar anexos MIME de forma portável é usar
mutt
.fonte
Outra alternativa - Swaks (canivete suíço para SMTP).
fonte
metamail tem a ferramenta metasend
fonte
eu usei
e isso funcionou bem para mim ....
fonte
Normalmente, uso apenas o comando mail no RHEL. Eu tentei o mailx e é bastante eficiente.
fonte
o caminho mais curto para mim é
Então, para o seu exemplo, será
a parte boa é que consigo me lembrar com Ctrl + r para enviar outro arquivo ...
fonte
Da máquina de origem
Na máquina de destino. Salve o corpo do email recebido como db.sql.gz.b64 ; então..
fonte
Apenas para adicionar meus 2 centavos, eu escreveria meu próprio script PHP:
http://php.net/manual/en/function.mail.php
Existem várias maneiras de fazer o anexo nos exemplos dessa página.
fonte
sh
é ainda mais onipresente. Existem perguntas duplicadas com respostas com bons exemplos; aqui é minha.mailx
-a
agora tem uma opção para anexos.fonte
mailx
do. Eu acredito que existem duas implementações. Por um lado,-a
é para anexos, por outro, por cabeçalhos.Não é um método para enviar email, mas você pode usar um servidor Git online (por exemplo, Bitbucket ou um serviço semelhante) para isso.
Dessa forma, você pode usar
git push
comandos e todas as versões serão armazenadas de forma compactada e organizada.fonte
É assim que estou fazendo com um arquivo de log grande no CentOS:
fonte
WHOAMI
eHOSTNAME
duas vezes?Se o arquivo for texto, você poderá enviá-lo mais facilmente no corpo, como:
fonte
usando o comando mailx
usando sendmail
fonte
uuencode
favor do MIME.eval
e misteriosas em torno de toda a engenhoca são completamente desnecessárias aqui.Mailutils faz deste um pedaço de bolo
-A file
anexa um arquivo-M
ativa o MIME, para que você possa ter um corpo de anexo e texto sem formatação.Se ainda não estiver instalado, execute
fonte
Dependendo das opções de comando do correio (verifique com
man mail
) e da versão que você pode fazerecho yourBody|mail -s yoursubject -A /your/attachment/file [email protected]
fonte
-A
opção é específica damailutils
versão GNU domail
como foi salientado na minha resposta, bem como de @ rumpelSe o mutt não estiver funcionando ou não estiver instalado, tente o seguinte:
fonte