Respostas:
Existem muitas versões diferentes de mail
ao redor. Quando você vai além mail -s subject to1@address1 to2@address2 <body
(para o envio, são todas as garantias POSIX - e até -s
não existiam antigamente ), elas tendem a ter diferentes opções de linha de comando. Adicionar um cabeçalho adicional nem sempre é fácil.
Com algumas mailx
implementações, por exemplo, a partir mailutils
de Ubuntu ou Debian debsd-mailx
, é fácil, porque não há uma opção para isso.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Com o Heirloom mailx
, não há maneira conveniente. Uma possibilidade de inserir cabeçalhos arbitrários é definir editheaders=1
e usar um editor externo (que pode ser um script).
## Prepare a temporary script that will serve as an editor.
## This script will be passed to ed.
temp_script=$(mktemp)
cat <<'EOF' >>"$temp_script"
1a
Content-Type: text/html
.
$r test.html
w
q
EOF
## Call mailx, and tell it to invoke the editor script
EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" to@address <<EOF
~e
.
EOF
rm -f "$temp_script"
Com um POSIXmailx
geral , não sei como chegar aos cabeçalhos.
Se você vai usar algum mail
ou mailx
, lembre-se de que
mail
e mailx
.mail
e mailx
trata linhas começando com ~
como comandos. Se você inserir texto no texto mail
, será necessário organizar esse texto para não conter linhas começando por ~
.Se você deseja instalar o software de qualquer maneira, é melhor instalar algo mais previsível que mail
/ Mail
/ mailx
. Por exemplo, vira-lata . Com o Mutt, você pode fornecer a maioria dos cabeçalhos da entrada com a -H
opção, mas nãoContent-Type
, que precisa ser definida através de uma opção mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Ou você pode invocar sendmail
diretamente. Existem várias versões sendmail
disponíveis, mas todas suportam o sendmail -t
envio de um email da maneira mais simples, lendo a lista de destinatários do email. (Eu acho que eles não suportam todos Bcc:
.) Na maioria dos sistemas, sendmail
não está no habitual $PATH
, está em /usr/sbin
ou /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
#!/bin/sh
(
echo "To: me@example.com"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
Com o Heirloom mailx, é conveniente
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Obrigado, Cara
Testado no Fedora 17, e trabalhou
Você precisará adicionar um Content-Type
cabeçalho ao seu e-mail para que isso aconteça.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
vai funcionar
mailx
? Isso pode ter a opção. Se isso não funcionar. Se isso não funcionar, você pode considerar o uso de mutt, embora eu não saiba de imediato o que a linha de comando alterna para fazer.
Com o heirloom-mailx, você pode alterar o programa sendmail para o seu script de gancho, substituir os cabeçalhos e usar o sendmail.
O script que eu uso ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Este script altera os valores no cabeçalho do email da seguinte maneira:
Content-Type:
para text/html; charset=utf-8
Content-Transfer-Encoding:
para 8bit
(não tenho certeza se isso é realmente necessário).Para enviar email em HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Esse método é mais eficaz do que o proposto pelo @Gilles porque não cria arquivos temporários e apenas corrige o fluxo on-the-fly.
Eu usei os scripts abaixo para acontecer
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
Para mim, eu precisava especificar uma variável, como servidor SMTP, para que o comando mail funcionasse da maneira abaixo. Eu procurei em muitos posts, e encontrei abaixo a propriedade para converter o corpo em texto / html. Agora, o email que recebo está no formato HTML.
Disposição de conteúdo: inline
Versão Unix: Servidor Red Hat Enterprise Linux versão 6.6 (Santiago)
Primeiro. Crie todas as informações necessárias em um script (testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
Segundo. Canalize esse script para o comando mail
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
Ao fazer isso, obtenho informações como abaixo no e-mail:
Disposição de conteúdo: inline ID da mensagem: Agente do usuário: Heirloom mailx 12.4 29/07/08 Versão MIME: 1.0 Tipo de conteúdo: texto / sem formatação; charset = us-ascii Codificação de transferência de conteúdo: 7 bits Valor1 Valor2
Valor1 e Valor2 conforme a marcação HTML feita no testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com