Пошлите электронное письмо, написанное в скидке с цены с помощью дурака

libplist, кажется, отвечает Вашим требованиям. Существует имя пакета Ubuntu "libplist-utils", что Вы могли сослаться в своем сценарии:

Описание-en: преобразователь списка свойств Apple Этот пакет containt инструменты для преобразования файлов списка свойств Apple от двоичного файла до XML и наоборот. Это - часть стопки libimobiledevice, обеспечивая доступ к продуктам компании Apple (iPod, iPhone, iPad...).

Домашняя страница: http://www.libimobiledevice.org/

Команда Install:

apt-get install libplist-utils

Пример использования:

plistutil -i Info.plist

21
10.01.2014, 07:32
5 ответов

После создания сообщения но прежде, чем отправить Вы имеете много в наличии опций Вам.Пресса ? просмотреть их.

Некоторые, которые могут помочь здесь:

  • F пропускать вложение через внешний процессор
    • Использовать pandoc -s -f markdown -t html преобразовать в HTML
  • ^T отредактировать вложение тип MIME
    • Изменение от text/plain кому: text/html.

Теперь макрос, который сделает все за один шаг. Добавьте это к Вашему .muttrc:

macro compose \e5 "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n"
set wait_key=no

Для использования этого макроса, после того, как Вы закончили сочинять свое сообщение, но перед отправкой нажмите Esc затем 5 для преобразования форматированного сообщения скидки с цены в HTML.

Можно естественно настроить этот макрос, как Вы считаете целесообразным. У дурака есть много привязок клавиш, уже встроил, таким образом, безотносительно сочетания клавиш Вы принимаете решение связать с, удостоверьтесь, что оно не перезаписывает что-то еще (или это - что-то, что можно жить без).


Опция set wait_key=no подавляет Дурака Press any key to continue... запросите, когда внешние команды будут выполнены. Если wait_key yes (который является значением по умолчанию), необходимо будет нажать Esc, затем 5, затем любой другой ключ для продолжения.

28
27.01.2020, 19:43
  • 1
    Это - действительно изящное решение! +1 –  sinisterstuf 23.09.2015, 12:51
  • 2
    , это хорошо, но он имеет базовый дефект. это устраняет часть простого текста электронной почты, которая заставляет его высосать для чтения в клиентах как... дурак ;) Электронные письма HTML должны иметь компонент HTML и простой текст. необработанная скидка с цены должна быть простым текстом, преобразованным должен быть HTML. –  masukomi 17.06.2016, 18:27
  • 3
    Согласитесь с @masukomi, почтовые клиенты в целом отправляют и HTML и текстовые версии электронной почты. Было бы хорошо иметь макрос, который добавляет версию HTML и оставляет оригинал как текст/плоскость. –  pepper_chico 25.08.2017, 20:30
  • 4
    В конце я имею, создают мою собственную установку для этого nosubstance.me/post/mutt-secret-sauce –  pepper_chico 20.09.2017, 20:37

Sendmail часто является не гибким enogh для отправки писем.

Я использую msmtp вместе с дураком на конкретных счетах на гибкий SMTP.

Использовать его с изменением дурака:

# ~/.muttrc  
set sendmail="/usr/bin/msmtp -a default"   

и

# ~/.msmtprc  
defaults
tls off
logfile ~/.msmtp.log  
account default   
host your.smtp.host  
port 25  
from your-user-name@your-host.com  
auth off  
user username  
password password  
1
27.01.2020, 19:43

Я смог сделать это. Я не совсем доволен своим решением, но это достаточно достойно. Ожидание кого-то еще для предоставления лучшего решения.

Процесс следует. Преобразуйте скидку с цены в HTML и присоедините его для обмена сообщениями. Поверните это вложение к inline вложение. Но теперь у меня есть два вложения, сначала находится в скидке с цены, и второй HTML. Замените содержание скидки с цены пустой строкой поэтому, только HTML отправляется.

Я добавил следующую строку к ~/.muttrc файл.

macro compose B ":set editor=text2mime-markdown.py<enter>E:set editor=email-editor<enter>Da/tmp/html-markdown-alternative.html<enter>^Du"

Вот email-editor который заимствован из ссылки, отправленной рассматриваемый.

#!/bin/sh
if grep -q In-Reply-To $1; then
  # Jump to first line of message
  exec vim -c 'norm }j' $1
else
  # Enter insert mode on the To: line
  exec vim  $1
fi

И основной файл Python, который называют, следует. Это вдохновлено сценарием жемчуга из рассматриваемой ссылки.

#!/usr/bin/env python
import os
import sys
from formatter import *
version = "0.1"

file = sys.argv[1]
new_file = "/tmp/html-markdown-alternative.html"
with open(file, "r") as f:
    text = f.read()

lines = text.split('\n')
header = []
body = []
headerStart = True
for l in lines:
    if headerStart:
        m = re.search(r'^[\w\-]+\:', l)
        if m:
            header.append(l)
        else:
            headerStart = False
            body.append(l)
    else:
        body.append(l)

header = '\n'.join(header)
body = '\n'.join(body)

htmlBody = markdownToHtml(body);

html = []
html.append('<html>')
html.append('<head>')
html.append('<meta name=\"generator\" content=\"text2mime-markdown{}\">'.format(version))
html.append('<style>')
html.append("code { font-family: 'Andale Mono', 'Lucida Console', \
        'Bitstream Vera Sans Mono', 'Courier New', monospace; }")
html.append('pre { border-left: 20px solid #ddd; margin-left: 10px; \
        padding-left: 5px; }')
html.append('</style>')
html.append('</head>')
html.append('<body>')
html.append('{0}'.format(body))
html.append('</body>')
html.append('</html>')
html = '\n'.join(html)

with open(new_file, "w") as newF:
    newF.write(html)

with open(file, 'w') as f:
    f.write(header)

Это зависит от еще одного названного файла Python formatter.py который использует pandoc отформатировать мою почту, но если pandoc не доступно, это может использовать python-markdown2 пакет. Этот сценарий следует.

import subprocess
import re
import os 
import sys
import html2text 
import collections

# check if pandoc exists
panDoc = True
try:
    subprocess.call(["pandoc", '--version']
            , stdout=subprocess.PIPE
            , stdin=subprocess.PIPE
            )
except OSError:
    panDoc = False

if not panDoc:
    import text.html2text as html2text
    import markdown 

def decodeText(text):
    return text.decode('utf-8')

def markdownToHtml(content, convertor='pandoc'):
    global panDoc
    if panDoc:
        cmd = ["pandoc", "-f", "markdown", "-t", "html"]
        p = subprocess.Popen(cmd
                , stdin = subprocess.PIPE
                , stdout = subprocess.PIPE
                )
        p.stdin.write(content)
        content = p.communicate()[0]
        return decodeText(content)
    else:
        return markdown.markdown(decodeText(content))


def htmlToMarkdown(content, convertor='pandoc'):
    global panDoc
    if panDoc and convertor == 'pandoc':
        cmd = ["pandoc", "-t", "markdown", "-f", "html"]
        p = subprocess.Popen(cmd
                , stdin = subprocess.PIPE
                , stdout = subprocess.PIPE
                )
        p.stdin.write(content)
        content = p.communicate()[0]
        return decodeText(content)
    # Use markdown package to convert markdown to html
    else:
        h = html2text.HTML2Text()
        content = h.handle(decodeText(content))
        return content

def titleToBlogDir(title):
    if title is None:
        return ''
    if len(title.strip()) == 0:
        return ''
    blogDir = title.replace(" ","_").replace(':', '-').replace('(', '')
    blogDir = blogDir.replace('/', '').replace('\\', '').replace('`', '')
    blogDir = blogDir.replace(')', '').replace("'", '').replace('"', '')
    return blogDir

def titleToFilePath(title, blogDir):
    if len(blogDir.strip()) == 0:
        return ''
    fileName = os.path.join(blogDir, titleToBlogDir(title))
    return fileName


def htmlToHtml(html):
    return decodeText(html)

def metadataDict(txt):
    mdict = collections.defaultdict(list)
    md = getMetadata(txt)
    for c in ["title", 'type', "layout", "status", "id", "published", "category", "tag"]:
        pat = re.compile(r'{0}\:\s*(?P<name>.+)'.format(c), re.IGNORECASE)
        m = pat.findall(txt)
        for i in m:
            mdict[c].append(i)
    return mdict

def getMetadata(txt):
   """
   Get metadata out of a txt
   """
   if not "---" in txt:
       print txt
       sys.exit(1)

   pat = re.compile(r'\-\-\-+(?P<metadata>.+?)\-\-\-+', re.DOTALL)
   m = pat.search(txt)
   if m:
       return m.group('metadata')
   else:
       sys.exit(0)

def getContent(txt):
    """ 
    Return only text of the post.
    """
    pat = re.compile(r'\-\-\-+(?P<metadata>.+?)\-\-\-+', re.DOTALL)
    return re.sub(pat, "", txt)

def readInputFile(fileName):
    """
    read file and return its format. html or markdown
    """
    assert fileName
    if not os.path.exists(fileName):
        raise IOError, "File %s does not exists" % fileName

    # Check the fmt of file.
    fmt = os.path.splitext(fileName)[1].lower()
    if fmt in ["htm", "html", "xhtml"]:
        fmt = "html"
    elif fmt in ["md", "markdown"]:
        fmt = "markdown"
    else:
        fmt = "markdown"
    txt = open(fileName, 'r').read()   
    return (fmt, txt)

def formatContent(txt, fmt):
    """
    Format the content as per fmt.
    """
    content = getContent(txt)
    if fmt == "html":
        content = htmlToHtml(content)
    elif fmt == "markdown":
        content = markdownToHtml(content)
    else:
        content = markdownToHtml(content)
    return content

Эти файлы также доступны здесь https://github.com/dilawar/mutt

0
27.01.2020, 19:43

Puedo enviar correos electrónicos en cualquier formato usando neomutt. Solo usoEmacs(org -modo ), en lugar de vim. Aunque también soy un usuario vim. Pero,Principalmente uso Emacscon el modo malvado -.

En mi .muttrche configurado el editor para que sea emacsen lugar de vim. Al escribir un nuevo correo electrónico, neomuttactiva emacs. Luego llamo al "modo org -", escribo el mensaje y lo exporto al formato que quiero.

Puedo exportar al formato PDF. Luego lo guardo y adjunto el archivo PDFen mi /tmp. Después de eso puedo enviar a quien sea.

Si quiero el formato html, lo exporto de la misma manera y automáticamente puedo ver el resultado antes de enviar el correo electrónico.

Aparte de eso, hay muchos otros formatos de exportación en el modo org -. Simplemente, elige lo que quieras. Para enviar código a otras personas, simplemente agregue el código fuente al idioma que desee. Todo se explica en el org -wiki .

1
27.01.2020, 19:43

Вы можете отправлять электронные письма -также как multipart/alternative, содержащие как text/plain, так и text/html.

Требования :пандок

В основном он создает из открытого текста сообщения уценки и html5. Создает вложения из этих частей, помечает их как встроенные вложения, устанавливает правильный тип MIME и объединяет их в составное сообщение.

Любые другие вложения должны быть добавлены после запуска этого макроса в меню создания. При необходимости в качестве последнего шага следует выполнить подписание/шифрование сообщения

.
macro compose,m \
"<enter-command>set pipe_decode<enter>\
<pipe-message>pandoc -f gfm -t plain -o /tmp/msg.txt<enter>\
<pipe-message>pandoc -s -f gfm -t html5 -o /tmp/msg.html<enter>\
<enter-command>unset pipe_decode<enter>a^U/tmp/msg.txt\n^Da^U/tmp/msg.html\n^D^T^Utext/html; charset=utf-8\n=DTT&d^U\n" \
"Convert markdown gfm to HTML and plain" 
4
27.01.2020, 19:43

Теги

Похожие вопросы