Altere o endereço “De:” no “correio” Unix


88

Enviando uma mensagem da linha de comando do Unix usando mail TO_ADDRresultados em um e-mail de $USER@$HOSTNAME. Existe uma maneira de alterar o endereço "De:" inserido pormail ?

Para registro, 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: 
De: foo@bar.org

Testando
.

rendimentos

Assunto: Teste
Para: <chris@example.org>
X-Mailer: mail (GNU Mailutils 1.1)
Id da mensagem: <E1KdTJj-00025z-RK @ localhost>
De: <chris @ localhost>
Data: Quarta, 10 de setembro de 2008 13:17:23 -0400

De: foo@bar.org

Testando

A linha "From: foo@bar.org" faz parte do corpo da mensagem, não faz parte do cabeçalho.


1
Que sabor de Unix é esse? e qual versão de email? Só para saber onde isso não funciona.
Vinko Vrsalovic

Hum, quase todos. Qualquer pessoa que use o mailx ou berkeley mail verá dessa forma. Se você quiser afetar o cabeçalho, escreva o cabeçalho inteiro e envie por rmail ou sendmail diretamente.
Thomas Kammeyer

Oh, mas, desculpe, eu corro GenToo.
Thomas Kammeyer

Para o registro, estou usando mailx e o exemplo que Chris dá funciona. Ou é isso que você quis dizer?
Vinko Vrsalovic

Vinko, qual versão do UN * X você está executando? Você quer dizer com "obras" que obtém os resultados dele ou que obtém o comportamento desejado que atenderia às necessidades dele? Depende em certo grau de como o envio de mensagens funciona em sua plataforma e se o cliente adiciona uma linha em branco antes de
Thomas Kammeyer

Respostas:


106

Na minha versão do mail (Debian linux 4.0), as seguintes opções funcionam para controlar os endereços de origem / resposta

  • a opção -a , para que cabeçalhos adicionais sejam aplicados, fornecendo um cabeçalho De: na linha de comando que será anexado ao cabeçalho do e-mail de saída
  • a variável de ambiente $ REPLYTO especifica um cabeçalho Responder para:

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 todas as respostas serão padronizadas como cms-replies@example.com

NB: Usuários do Mac OS: você não tem -a, mas tem $ REPLYTO

NB (2): os usuários do CentOS, muitos comentadores ter acrescentado que você precisa usar -rnão-a

NB (3): Esta resposta tem pelo menos dez anos (1), lembre-se disso quando vier do Google.


Acabei de testar novamente aqui para ter certeza, e funciona bem para mim. Nem todos os clientes de e-mail funcionam bem com o Reply-To, mas eu pensei que esse fosse um problema resolvido agora. A variável REPLYTO env é mencionada na página de manual, outros remetentes do UNIX a respeitam, emacs etc. Ainda assim, acho que você tem uma correção.
cms

Não acho que seja o cliente de e-mail ... Não vejo o cabeçalho Responder para no texto bruto da mensagem. Mas, sim, -a é suficiente.
Chris Conway

1
Não, não importa. Mas: "O manual GNU mailutils completo não está disponível em sistemas Debian devido a razões de licenciamento." -aReply-To: ... funciona.
Chris Conway

Também não vejo nenhuma menção a REPLYTO em gnu.org/software/mailutils/manual/mailutils.html
Chris Conway

4
no CentOS, a mail -aopção significa "attachemnet". Eu precisava usar -rcomomail -r from@whatever.com
equivalente

42

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 correio analise o argumento -f e o passa para o próprio sendmail.


2
não funciona. 3 endereços são adicionados ao endereço agora. o endereço para, o endereço f e o domínio local
Shortif2000

2
Você pode ajudar, isso costumava funcionar - mas, como uma atualização recente, não funciona mais, ele apenas tenta enviar um e-mail adicional para -f @ hostname
Wil

1
Não funciona no CentOS 6.3. Tente a resposta @ ubuntu-fanboy abaixo usando a sinalização -r.
skytaker

26

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) tem a opção '-r' para substituir o campo padrão '$ USER @ $ HOSTNAME'.

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 22 2010-12-23 08:33 / usr / bin / mail -> / etc / backups / mail
$ ls -l / etc / backups / mail
lrwxrwxrwx 1 root root 23 2010-12-23 08:33 / etc / alternative / mail -> / usr / bin / heirloom-mailx

5
Talvez possa ser útil saber que o mailcomando GNU mailutils pré-instalado no Ubuntu 14.04 LTS suporta a -ropção, para que você possa definir facilmente o endereço do remetente.
gerlos

Eu testei no Debian 9.11, e a opção também funciona.
Fedir RYKHTIK

14
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

o que está acima é minha solução ... quaisquer cabeçalhos extras podem ser adicionados logo após de e antes da resposta para ... apenas certifique-se de conhecer a sintaxe dos cabeçalhos antes de adicioná-los ... funcionou perfeitamente para mim.


1
Isso está funcionando para mim com seu exemplo ... Quando eu mudo o assunto do endereço de e-mail, etc, todos os cabeçalhos são exibidos?
bsmoo


5

Também é possível definir o nome de e o endereço de remetente usando algo como:

 echo test | mail -s "test" example@example.com -- -F'Some Name<example2@example.com>' -t

Por algum motivo passar -F'Some Name'e -fexample2@example.comnão funciona, mas passar -tpara sendmail funciona e é "fácil".


4

Aqui estão algumas opções:

  • Se você tiver privilégios suficientes, configure o sendmail para fazer reescritas com a tabela de genéricos

  • Escreva todo o cabeçalho (ou envie-o por e-mail, salve a mensagem inteira com todos os cabeçalhos, edite-o novamente e envie-o com rmail a partir da linha de comando

  • Envie diretamente com sendmail, use a sinalização de linha de comando "-f" e não inclua a linha "De:" em sua mensagem

Eles não são exatamente iguais, mas vou deixar para você investigar mais a fundo.

No meu portátil, tenho o sendmail autenticado como um cliente para um servidor de e-mail de saída e uso genéricos para fazer com que o e-mail de retorno chegue em outra conta. Ele funciona como um encanto. Eu agrego e-mails recebidos com fetchmail.


4

Eu deduzi isso de todas as respostas acima. Nada funcionou para mim quando tentei cada um deles. Eu fiz muitas trilhas e erros combinando 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 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 o e-mail para qualquer número de pessoas, adicionando qualquer número de IDs do destinatário e o e-mail é enviado por SenderName de from-id@email.com

Espero que isto ajude.


isto não funciona vor / usr / bin / mail, talvez seu comando seja para sendmail.
basZero

3

Não sei se é o mesmo com outro SO, 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 campo DE :. O seguinte comando funciona para mim.

mail recepient@example.com -f from@example.com

Funciona para mim! (Também openBSD - Macbook pro.)
Aeonaut

1
Atualizar - o destinatário do e-mail ainda vê meu nome de conta local antes from@example.com- por exemplo, "Aeonaut from@example.com". Alguma ideia de como mudar isso?
Aeonaut

3
Nao funciona para mim. (os x leão da montanha) "mail: Não é possível dar -f e pessoas para enviar."
Jonny

3

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 para mail 8.1 no CentOS 5 não mencionam isso. Por -fopção, a página do manual diz:

-f Lê 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 da mbox em vez da caixa de correio do sistema.

De qualquer forma, isso é ótimo de encontrar, obrigado.


1
-fé claro que não é uma opção mailem seu exemplo, pois é precedido por --. Essa opção é entregue ao seu MTA
Anthon

3

No Debian 7 eu 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 dessa forma.

Instale heirloom-mailx

apt-get install heirloom-mailx

certifique-se de que é o padrão.

update-alternatives --config mailx

Escreva uma mensagem.

mail -s "Testing from & replyto" -r "sender <sender@example.com>" -S replyto="sender@example.com" recipient@example.net < <(echo "Test message")

O que este update-alternativescomando está fazendo? Isso me dá três opções e estou confuso.
Stephane

1

No CentOS isso funcionou para mim:

echo "email body" | mail -s "Subject here" -r from_email_address email_address_to

1

echo "body" | mail -S from=address@foo.com "Hello"

-S permite especificar várias opções de string, de longe a maneira mais fácil de modificar cabeçalhos e tal.


1

echo "test" | mailx -r fake@example.com -s 'test' email@example.com

Funciona no OpenBSD.


0

isso funcionou para mim

echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root

0

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 contém sua WAN / endereço IP público, simplesmente modifique o primeiro nome de host listado para ele. Por exemplo, seu arquivo hosts pode ser semelhante a:

...
11.22.33.44 localhost default-domain qualquer-else.com
...

Para enviá-lo de qualquer-else.com, basta modificá-lo para que qualquer-else.com seja listado primeiro, por exemplo:

...
11.22.33.44 qualquer que seja-else.com localhost domínio-padrão
...

Não posso falar por nenhuma outra distro (ou mesmo versão do CentOS), mas no meu caso particular, o acima funciona perfeitamente.


0

O que me permitiu ter um endereço de resposta personalizado em um Ubuntu 16.04 comUTF-8 codificação e um anexo de arquivo:

Instale o cliente de e-mail:

sudo apt-get install heirloom-mailx

Edite a configuração do SMTP:

sudo vim /etc/ssmtp/ssmtp.conf
mailhub=smtp.gmail.com:587
FromLineOverride=YES
AuthUser=???@gmail.com
AuthPass=???
UseSTARTTLS=YES

Envie o correio:

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)

0

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"

-1

As respostas fornecidas antes não funcionaram para mim no CentOS5. Eu instalei o mutt. Tem muitas opções. Com o mutt, você faz desta forma:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.