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 [email protected]                                                                  
Cc: 
De: [email protected]

Testando
.

rendimentos

Assunto: Teste
Para: <[email protected]>
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: [email protected]

Testando

A linha "From: [email protected]" faz parte do corpo da mensagem, não faz parte do cabeçalho.

Chris Conway
fonte
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 [email protected]
mail -aFrom:[email protected] -s 'Testing'

O resultado, em meus clientes de e-mail, é um e-mail de [email protected], para o qual todas as respostas serão padronizadas como [email protected]

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.

cms
fonte
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 [email protected]
equivalente
42

No Centos 5.3 sou capaz de fazer:

mail -s "Subject" [email protected] -- -f [email protected] < body

O traço duplo impede que o correio analise o argumento -f e o passa para o próprio sendmail.

Beau
fonte
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 [email protected] [email protected]

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
ubuntu-fanboy
fonte
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 <[email protected]>\n
Reply-to: [email protected]\nContent-Type: text/html\n")" 
[email protected] < 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.

Musgo
fonte
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
7

Além disso, é bom usar -F optionpara 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

artickl
fonte
5

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

 echo test | mail -s "test" [email protected] -- -F'Some Name<[email protected]>' -t

Por algum motivo passar -F'Some Name'e [email protected]não funciona, mas passar -tpara sendmail funciona e é "fácil".

Alcanzar
fonte
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.

Thomas Kammeyer
fonte
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' '<[email protected]>,<[email protected]>' -- -F '<SenderName>' -f '<[email protected]>'

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 [email protected]

Espero que isto ajude.

optimus0127
fonte
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 [email protected] -f [email protected]
Ryan Barong
fonte
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 [email protected]- por exemplo, "Aeonaut [email protected]". 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" [email protected] -- -f [email protected]

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.

gbla
fonte
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 <[email protected]>" -S replyto="[email protected]" [email protected] < <(echo "Test message")
gelatina
fonte
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
Céline Aussourd
fonte
1

echo "body" | mail -S [email protected] "Hello"

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

André Backeby
fonte
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.

tolo
fonte
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
[email protected]
AuthPass=???
UseSTARTTLS=YES

Envie o correio:

sender='[email protected]'
recipient='[email protected]'
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)
Stephane
fonte
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 <[email protected]>"
recipients="[email protected]"

#######################################################################
cat message.txt | mail -s "$subject" -a "$mail_header" -t "$recipients"
JazzCat
fonte