LINUX.ORG.RU

Отправка письма из командной строки с html-разметкой в сообщении и прикреплением файла

 ,


0

1

Добрый вечер.

Стенд: Centos 7. Установлен postfix, привязан аккаунт gmail'а. Письма отправляются и доходят до адресата.

Нужно отправить емайл из командной строки, чтобы тема была текстовая, тело сообщения - с html-разметкой (находится в файле 1.html), и прикреплено два файла (2.conf и 3.conf)

Прикрепляю два файла к обычному сообщению, приходит сообщение с файлами:

date|mail -s "Моя тема" -a 2.conf -a 3.conf mail@gmail.com

Помещаю содержимое файла 1.html в ТЕМУ сообщения (хотя нужно в тело сообщения), письмо приходит красивое, но без сообщения:

 mail -s "$(echo -e "Моя тема\nContent-Type: text/html")" mail@gmail.com  <  1.html

Если просто содержимое файла 1.html через cat вывести в сообщение, то html-разметка не развернется при получении письма...

cat '1.html'|mail -s "Моя тема" -a 2.conf -a 3.conf mail@gmail.com

А вот как скрестить два работающих решения...?

Поубивать отправителей html!

  • Почему не отправлять письмо аттачем? Многие MUA распознают html-аттач как письмо.
  • Конструкция mail -s "$(echo -e "Моя тема\nContent-Type: text/html")" -a 2.conf -a 3.conf mail@gmail.com < 1.html не работает?

Вообще, лучше бы ты принёс то, что НЕ получилось, не пришлось бы делать одни телодвижения дважды.

r3lgar ★★★★★ ()
Ответ на: комментарий от dhameoelin

Формируешь полностью E-Mail. Далее sendmail -it < email.txt. Врапер sendmail у Постфикса есть. Вот есть ли эти ключи, надо посмотреть, но должны бы быть.

Поубивать отправителей html!

И да, поддерживаю. :-)

AS ★★★★★ ()
Последнее исправление: AS (всего исправлений: 1)

?

cat >/tmp/sendhtml <<EOF
#!/bin/bash
sed -re '1,/^Content-type:/ s/^(Content-type:).*/\1 text\/html/' |
sendmail "$@"
EOF
chmod a+x /tmp/sendhtml
sendmail=$_ mail -s ..... <content.html
DonkeyHot ★★★★★ ()
Ответ на: комментарий от AS

Поубивать отправителей html!

И да, поддерживаю. :-)

А 640 kB хватит всем, ага...

BTW, сам предпочитаю plain text, когда не надо хитрого форматирования. Ну и markdown читабелен вполне.

dhameoelin ★★★★★ ()
Последнее исправление: dhameoelin (всего исправлений: 1)
Ответ на: комментарий от r3lgar

При выполнении:

mail -s "$(echo -e "Моя тема\nContent-Type: text/html")" -a 2.conf -a 3.conf mail@gmail.com  <  1.html
приходит письмо в нераспознаваемой разметке:
This is a multi-part message in MIME format. --=_5aab7fa4.DnmpO8CL3lfSFJMpQ88L9AOwDQaYsV6Jaskyl0oAvN8JcQ7g Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline
=09 =09=09 =09=09 =09=09 =09=09 =09 =09=09
=09=09=09
=09=09=09=09 =09=09=09=09=09=09 =09=09=09=09=09=09 =09=09=09=09=09=09
...
=09=09=09=09
=09=09=09
=09=09
=09
--=_5aab7fa4.DnmpO8CL3lfSFJMpQ88L9AOwDQaYsV6Jaskyl0oAvN8JcQ7g Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="2.conf" = --=_5aab7fa4.DnmpO8CL3lfSFJMpQ88L9AOwDQaYsV6Jaskyl0oAvN8JcQ7g Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="3.conf" = --=_5aab7fa4.DnmpO8CL3lfSFJMpQ88L9AOwDQaYsV6Jaskyl0oAvN8JcQ7g--

manik207 ()
Ответ на: комментарий от r3lgar

то, что НЕ получилось:

cat '1.html'|mail -s "Моя тема" -a 2.conf -a 3.conf mail@gmail.com

Разметка html игнорируется, хотя файлы прикрепляются. Это описано в первом посте.

manik207 ()
Ответ на: комментарий от manik207

Как включить туда основные компоненты - тему, аттач и адресата?

Да как угодно. Нужен обычный стандартный текстовый файл. С правильным заголовком и т.п. Сохрани из почтового клиента файл в том виде, как есть, или из maildir довекота какого-нибудь возьми. Вот такое ты должен сделать и скормить sendmail-у. Для примера вот тебе текстовый вариант:

From: user1@localhost
To: user2@localhost

Hello world!

Заголовок от тела отделён пустой строкой, дополнительные поля сам додумай, глядя в пример из почтового клиента.

AS ★★★★★ ()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: ? от DonkeyHot

Спасибо за ответ!

Это из командной строки выполнять?

Выполнила команду в таком виде:

cat >/tmp/sendhtml <<EOF
#!/bin/bash
sed -re '1,/^Content-type:/ s/^(Content-type:).*/\1 text\/html/' |
sendmail "$@"
EOF
chmod a+x /tmp/sendhtml
sendmail=$_ mail -s "Тема" -a 2.conf -a 3.conf mail@gmail.com < 1.html

Sendmail прислал письмо в /var/spool/mail/root в виде кода, переадресация настроена на почтовый ящик гугла настроена только для команды mail. Час бьюсь с настройкой релея на гугл-почту, не осиливаю.. Командой mail это можно сделать?

manik207 ()
Ответ на: комментарий от manik207

В команду mail это всё как-то можно поместить?

Зачем? Я же написал: sendmail -it < email.txt И я посмотрел уже, постфиксовский sendmail это должен уметь.

AS ★★★★★ ()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Relay mail настроен для только для mail-команды. Не могу отправить на внешний емайл письмо через sendmail - не приходят письма на gmail, час бьюсь

manik207 ()
Ответ на: комментарий от AS

Итак, победила sendmail)) В документ 4.txt поместила следующее:

From: mail@gmail.com
To: mail@gmail.com

Hello world!

<html><head>... 
И далее текст сообщения с html-разметкой.

Отправила командой:

sendmail -it < 4.txt

Письмо пришло, но html-разметка не читаема, просто как текст..

mail@gmail.com
13:18 (4 мин. назад)

кому: мне 
Hello world!

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
body {
  font-family: Arial Unicode MS, Palatino, Sans-serif;
}
hr {
  color: BurlyWood;
}
#header_table, #image_table {... 

manik207 ()
Ответ на: комментарий от manik207

Письмо пришло, но html-разметка не читаема, просто как текст..

Неправильно оформил, значит. Content-Type какой вот, например, задал? Одновременно текст и html тоже нельзя. Если надо, надо уже на части делить. И так далее. Ты пример подобного сообщения посмотрел? Примеры нужны с Content-Type: text/html или multipart/<разное>. Там варианты есть. MIME-Version тоже не забудь.

AS ★★★★★ ()
Последнее исправление: AS (всего исправлений: 2)
Ответ на: комментарий от AS

Ты пример подобного сообщения посмотрел?

В гугле-почте загрузила исходник входящего сообщения, раздел с адресными данными такой:

Delivered-To: mail@gmail.com
Received: by 10.37.210.83 with SMTP id j80csp1239426ybg;
        Fri, 10 Jul 2015 06:31:57 -0700 (PDT)
X-Received: by 10.152.27.197 with SMTP id v5mr19978135lag.64.1436535116491;
        Fri, 10 Jul 2015 06:31:56 -0700 (PDT)
Return-Path: <dropmefiles@dropmefiles.com>
Received: from mx.inetcom.ru (mail.inetcom.ru. [194.187.205.248])
        by mx.google.com with ESMTP id n3si4287695lbg.156.2015.07.10.06.31.55
        for <mail@gmail.com>;
        Fri, 10 Jul 2015 06:31:56 -0700 (PDT)
Received-SPF: pass (google.com: domain of dropmefiles@dropmefiles.com designates 194.187.205.248 as permitted sender) client-ip=194.187.205.248;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of dropmefiles@dropmefiles.com designates 194.187.205.248 as permitted sender) smtp.mail=dropmefiles@dropmefiles.com;
       dkim=pass header.i=@dropmefiles.com
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=dropmefiles.com; s=dkim; h=Content-Transfer-Encoding:Content-Type:MIME-Version:To:From:Subject:Date:Message-ID; bh=VFzdyJwHCDRaydbCLuuSedajzHc/vThXZIPv98gW/xE=; b=K3DFNnuRbccfPBn58Y4M6lsoulk6SDKW5w03X5C7iqZyq7/yFN7d/DBxncrPuDqnqgYvHj/16SZvuSIzsdiB3hJDwDuNWp6ufKxvCc8NkH1UU38ZeLd3Tz4DYQYKotBb/65V4QYOOXJwAHQLi6nd+1hZNKCKwkA6Kdez3Ru54C3brGiT+eY+XVLKruJdZNjzbl+tQwRX9XPg7NN4p8l2VxxYB5c4RaZL609zi13dAlOmRacELzWwsBHZTGS6YYA4SCDr0azScdtlY/nbbWUhMpZi4PUywtqIl86lTB0SmxQ9LAxA00CJuezOfu10S5gYX0ybkg+j2GvHm3+PKseVpw==;
Received: from [176.99.128.20] (helo=dropmefiles.com) by mx.inetcom.ru with esmtpa (Exim 4.71) (envelope-from <dropmefiles@dropmefiles.com>) id 1ZDYPB-000DP3-6l for mail@gmail.com; Fri, 10 Jul 2015 16:31:55 +0300
Message-ID: <1436535113.559fc9492ab3c@dropmefiles.com>
Date: Fri, 10 Jul 2015 16:31:53 +0300
Subject: No-REPLY: Вам отправили файлы c DropMeFiles
From: DropMeFiles <no-reply@dropmefiles.com>
To: mail@gmail.com
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html>
    <head>
        <title>DropMeFiles</title>
        <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Du=
tf-8" />
    </head>
    <body style=3D"padding:0; margin: 0; height:auto; width:606px; font-fam=
ily: Tahoma; -webkit-font-smoothing: subpixel-antialiased;">
        <table style=3D"background: #eeecec; position:relative; width:606px=
;" cellspacing=3D"0" cellpadding=3D"0" border=3D"0">
            <tr><td style=3D"background: #abb4bb;">....

По аналогии, поправила свой txt:

From: mail@gmail.com
To: mail@gmail.com
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html>
    <head>
        <title>DropMeFiles</title>
        <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Du=
tf-8" />
    </head>
    <body style=3D"padding:0; margin: 0; height:auto; width:606px; font-fam=
ily: Tahoma; -webkit-font-smoothing: subpixel-antialiased;">...

Письмо пришло, в сообщении уже не код, а нужный текст, но работает только тег «жирный», ни цветов, ни разметки..

manik207 ()
Ответ на: комментарий от manik207

но работает только тег «жирный», ни цветов, ни разметки..

Это уже вопрос к парсеру в клиенте, либо html-коду твоему. К E-Mail дальнейшее никак не относится.

AS ★★★★★ ()

Выполнила
победила
Отправила

Что-то сразу внимания не обратил, не тот род в ответах использовал. Сорри. ;-)

AS ★★★★★ ()
Ответ на: Ничего страшного, не привыкать)) от manik207

А как прикрепить файл в этом случае?

Закодировать в base64 и добавить в виде MIME-части. Как это обычный почтовый клиент делает.

AS ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.