3

私はこの問題の解決策を見つけようと懸命に努力しましたが、結局のところ、皆さんに質問する必要があります。HTML メールがあります (Python の smtplib を使用)。ここにコードがあります

Message = """From: abc@abc.com>
To: abc@abc.com>
MIME-Version: 1.0
Content-type: text/html
Subject: test

Hello,
Following is the message 
""" + '\n'.join(mail_body)  + """
Thank you.
"""

上記のコードでは、mail_body は、プロセスからの出力行を含むリストです。今私が欲しいのは、これらの行を (行ごとに) HTML メールで表示することです。今起こっていることは、行ごとに追加するだけです。すなわち

次のように(プロセスの)出力を保存しています:

for line in cmd.stdout.readline()
    mail_body.append()

HTML 電子メールの現在の出力は次のとおりです。

Hello,
abc
Thank you.

私が欲しいもの:

Hello,
a
b
c
Thank you.

プロセス出力を HTML メールに 1 行ずつ添付したいだけです。私の出力は何らかの方法で達成できますか?

感謝と敬意

4

2 に答える 2

3

email(stdlib から) パッケージを使用して送信する電子メール コンテンツを生成できます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from cgi import escape
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP_SSL

login, password = 'me@example.com', 'my password'

# create message
msg = MIMEMultipart('alternative')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ', '.join([login,])

# Create the body of the message (a plain-text and an HTML version).
text = "Hello,\nFollowing is the message\n%(somelist)s\n\nThank you." % dict(
    somelist='\n'.join(["- " + item for item in mail_body]))

html = """<!DOCTYPE html><title></title><p>Hello,<p>Following is the message 
<ul>%(somelist)s</ul><p>Thank you. """ % dict(
    somelist='\n'.join(["<li> " + escape(item) for item in mail_body]))

# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(MIMEText(text, 'plain', 'utf-8'))
msg.attach(MIMEText(html, 'html', 'utf-8'))    

# send it
s = SMTP_SSL('smtp.mail.example.com', timeout=10) # no cert check on Python 2

s.set_debuglevel(0)
try:
    s.login(login, password)
    s.sendmail(msg['From'], msg['To'], msg.as_string())
finally:
    s.quit()
于 2013-05-28T10:45:10.180 に答える
2

HTML では、改行は「改行」ではありませんが、このメールでは HTML タグも使用していないため、MIME メッセージでは改行は単なる改行では\nありません。<br>\r\n\n

したがって、次のように書く必要があります。

'\r\n'.join(mail_body)

MIME メッセージを処理する改行の場合、書式設定に HTML を使用する場合は、それが改行であることを知る必要があり<br>ます。それは次のようになります。

'<br>'.join(mail_body)

包括的にするには、次を試すことができます。

'\r\n<br>'.join(mail_body) 

しかし、私は今、それが何を望んでいるのかを知っています...

于 2013-05-28T10:06:55.357 に答える