Altere o endereço “De:” no “mail” Unix
Pergunta
Enviando uma mensagem da linha de comando do Unix usando mail TO_ADDR
resulta em um e-mail de $USER@$HOSTNAME
.Existe uma maneira de alterar o endereço "De:" inserido por mail
?
Para constar, estou usando GNU Mailutils 1.1/1.2 no Ubuntu (mas vi o mesmo comportamento com Fedora e RHEL).
[EDITAR]
$ mail -s Testing chris@example.org Cc: From: foo@bar.org Testing .
rendimentos
Subject: Testing To: <chris@example.org> X-Mailer: mail (GNU Mailutils 1.1) Message-Id: <E1KdTJj-00025z-RK@localhost> From: <chris@localhost> Date: Wed, 10 Sep 2008 13:17:23 -0400 From: foo@bar.org Testing
A partir de:foo@bar.org" faz parte do corpo da mensagem, não do cabeçalho.
Solução
Na minha versão do mail (Debian linux 4.0) as seguintes opções funcionam para controlar os endereços de origem/resposta
- o -a switch, para que cabeçalhos adicionais sejam aplicados, fornecendo um From:cabeçalho na linha de comando que será anexado ao cabeçalho do email de saída
- o $REPLYTO variável de ambiente especifica uma resposta para:cabeçalho
então a seguinte sequência
export REPLYTO=cms-replies@example.com
mail -aFrom:cms-sends@example.com -s 'Testing'
O resultado, em meus clientes de e-mail, é um e-mail de cms-sends@example.com, para o qual qualquer resposta será padronizada como cms-replies@example.com
Observação: Usuários de Mac OS:você não tem -a , mas você tem $REPLYTO
Observação(2): Usuários do CentOS, muitos comentaristas acrescentaram que você precisa usar -r
não -a
Observação(3): Esta resposta tem pelo menos dez anos (1). Tenha isso em mente quando vier do Google.
Outras dicas
No Centos 5.3 sou capaz de fazer:
mail -s "Subject" user@address.com -- -f from@address.com < body
O traço duplo impede que o mail analise o argumento -f e o passa para o próprio sendmail.
O comando 'mail' do GNU mailutils não permite que você faça isso (pelo menos facilmente).Mas se você instalar 'heirloom-mailx', seu comando mail (mailx) terá a opção '-r' para substituir o campo '$USER@$HOSTNAME' padrão.
echo "Hello there" | mail -s "testing" -r sender@company.com recipient@company.com
Funciona para 'mailx', mas não para 'mail'.
$ ls -l /usr/bin/mail lrwxrwxrwx 1 root root 22 2010-12-23 08:33 /usr/bin/mail -> /etc/alternatives/mail $ ls -l /etc/alternatives/mail lrwxrwxrwx 1 root root 23 2010-12-23 08:33 /etc/alternatives/mail -> /usr/bin/heirloom-mailx
mail -s "$(echo -e "This is the subject\nFrom: Paula <johny@paula.com>\n
Reply-to: 1232564@yourserver.com\nContent-Type: text/html\n")"
milas.josh@gmail.com < htmlFileMessage.txt
a solução acima é minha... qualquer cabeçalho extra pode ser adicionado logo após from e antes da resposta para... apenas certifique-se de conhecer a sintaxe dos cabeçalhos antes de adicioná-los... isso funcionou perfeitamente para mim.
Além disso, é bom usar -F option
para especificar o nome do remetente.
Algo assim:
mail -s "$SUBJECT" $MAILTO -- -F $MAILFROM -f ${MAILFROM}@somedomain.com
Ou apenas veja as opções disponíveis:http://www.courier-mta.org/sendmail.html
Também é possível definir o nome do remetente e o endereço do remetente usando algo como:
echo test | mail -s "test" example@example.com -- -F'Some Name<example2@example.com>' -t
Por algum motivo passando -F'Some Name'
e -fexample2@example.com
não funciona, mas passar no -t
enviar email funciona e é "fácil".
Aqui estão algumas opções:
Se você tiver privilégios suficientes, configure o sendmail para reescrever a tabela genérica
Escreva você mesmo o cabeçalho inteiro (ou envie-o para você mesmo, salve a mensagem inteira com todos os cabeçalhos, edite-a novamente e envie-a com rmail a partir da linha de comando
Envie diretamente com sendmail, use o sinalizador de linha de comando "-f" e não inclua a linha "De:" em sua mensagem
Não são todos exatamente iguais, mas deixarei que você analise mais detalhadamente.
No meu portátil, tenho o sendmail autenticado como cliente para um servidor de e-mail de saída e uso genéricos para fazer com que o e-mail retornado chegue a outra conta.Ele funciona como um encanto.Eu agrego mensagens recebidas com fetchmail.
Não sei se é o mesmo com outros sistemas operacionais, mas no OpenBSD, o comando mail tem esta sintaxe:
mail to-addr ... -sendmail-options ...
sendmail tem a opção -f onde você indica o endereço de e-mail para o FROM:campo.O comando a seguir funciona para mim.
mail recepient@example.com -f from@example.com
Obrigado BEAU
mail -s "Subject" user@address.com -- -f from@address.com
Acabei de encontrar isso e funciona para mim.As páginas de manual do mail 8.1 no CentOS 5 não mencionam isso.Para -f
opção, a página de manual diz:
-f Leia mensagens do arquivo nomeado pelo operando do arquivo em vez da caixa de correio do sistema.(Consulte também pasta.) Se nenhum operando de arquivo for especificado, leia as mensagens do mbox em vez da caixa de correio do sistema.
De qualquer forma, é ótimo encontrar isso, obrigado.
Eu derivei isso de todas as respostas acima.Nada funcionou para mim quando experimentei cada um deles.Eu cometi muitos erros ao combinar todas as respostas acima e concluí sobre isso.Não tenho certeza se isso funciona para você, mas funcionou para mim no Ununtu 12.04 e no RHEL 5.4.
echo "This is the body of the mail" | mail -s 'This is the subject' '<receiver-id1@email.com>,<receiver-id2@email.com>' -- -F '<SenderName>' -f '<from-id@email.com>'
Pode-se enviar a correspondência para qualquer número de pessoas adicionando qualquer número de IDs de destinatário e a correspondência é enviada por Nome do remetente de from-id@email.com
Espero que isto ajude.
No Debian 7 ainda não consegui definir corretamente o endereço do remetente usando as respostas desta pergunta (sempre seria o nome do host do servidor), mas resolvi desta forma.
Instalar herança-mailx
apt-get install heirloom-mailx
certifique-se de que seja o padrão.
update-alternatives --config mailx
Redija uma mensagem.
mail -s "Testing from & replyto" -r "sender <sender@example.com>" -S replyto="sender@example.com" recipient@example.net < <(echo "Test message")
echo "body" | mail -S from=address@foo.com "Hello"
-S permite especificar muitas opções de string, de longe a maneira mais fácil de modificar cabeçalhos e coisas assim.
No CentOS isso funcionou para mim:
echo "email body" | mail -s "Subject here" -r from_email_address email_address_to
isso funcionou para mim
echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root
No CentOS 5.5, a maneira mais fácil que encontrei de definir o padrão do domínio é modificar o arquivo hosts.Se o seu arquivo hosts contiver seu endereço WAN/IP público, simplesmente modifique o primeiro nome de host listado para ele.Por exemplo, seu arquivo hosts pode ser parecido com:
...
11.22.33.44 domínio padrão do host local seja lá o que for.com
...
Para enviá-lo de qualquer outro.com, basta modificá-lo para que qualquer outro.com seja listado primeiro, por exemplo:
...
11.22.33.44 seja lá o que for.com domínio padrão localhost
...
Não posso falar de nenhuma outra distro (ou mesmo versão do CentOS), mas no meu caso particular, o acima funciona perfeitamente.
eco "teste" | Mailx -r fake@example.com -s 'teste' e -mail@example.com
Funciona no OpenBSD.
O que me permitiu ter um endereço de resposta personalizado em um Ubuntu 16.04
com UTF-8
codificação e um anexo de arquivo:
Instale o cliente de e-mail:
sudo apt-get install heirloom-mailx
Edite a configuração SMTP:
sudo vim /etc/ssmtp/ssmtp.conf
mailhub=smtp.gmail.com:587
FromLineOverride=YES
AuthUser=???@gmail.com
AuthPass=???
UseSTARTTLS=YES
Envie o e-mail:
sender='send@domain.com'
recipient='recipient@domain.com'
zipfile="results/file.zip"
today=`date +\%d-\%m-\%Y`
mailSubject='My subject on the '$today
read -r -d '' mailBody << EOM
Find attached the zip file.
Regards,
EOM
mail -s "$mailSubject" -r "Name <$sender>" -S replyto="$sender" -a $zipfile $recipient < <(echo $mailBody)
Nenhuma das soluções acima está funcionando para mim ...
#!/bin/bash
# Message
echo "My message" > message.txt
# Mail
subject="Test"
mail_header="From: John Smith <john.smith@example.com>"
recipients="recipient@example.com"
#######################################################################
cat message.txt | mail -s "$subject" -a "$mail_header" -t "$recipients"
As respostas fornecidas antes não funcionaram para mim no CentOS5.Eu instalei o vira-lata.Tem muitas opções.Com o vira-lata você faz assim:
export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org