0

以下の関連するコード スニペットを見つけてください。

def send_mail_cloned():
    COMMASPACE = ', '
    sender='xxx@xyz.com'
    send_open_mail_to='xxx@xyz.com'
    # Create the container (outer) email message.
    msg = MIMEMultipart()
    msg.set_charset("utf-8")
    msg['Subject'] = 'Test'
    msg['From'] = sender
    msg['To'] = COMMASPACE.join(send_open_mail_to)

    text="""
    <html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       <title>html title</title>
       <style type="text/css" media="screen">
           table{
                 background-color: #AAD373;
                 empty-cells:hide;
           }
           td.cell{
                 background-color: white;
           }
       </style>
     </head>
     <body>"""

    text+="""<p><BR>Hi, <BR>Please find below table for Cloned JIRA's:<BR></p>
         <table style="border: blue 1px solid;">

             <tr><td class="cell">JIRA Link</td><td class="cell">PRISM URL</td><td class="cell">CR Title</td></tr>"""
for key,value in jira_cr_cloned_dict.items():
             CR_title=value[1].decode('utf-8')
             text+="""<tr><td class="cell">%s</td><td class="cell">%s</td><td class="cell">%s</td></tr>""" %(key,value[0],CR_title)
text+=”””&lt;/table></body>
     </html>”””
    HTML_BODY = MIMEText(text, 'html','utf-8')
    Encoders.encode_7or8bit(HTML_BODY)
    msg.attach(HTML_BODY)
    # Send the email via our own SMTP server.
    s = smtplib.SMTP('localhost')
    s.sendmail(sender, send_open_mail_to, msg.as_string())
    s.quit()

jira_cr_cloned_dict が設定されているコード セグメント:-

CR_title=CR_detail['Title'].encode('utf-8')
print ('CR title in PRISM: %s\n'%CR_title)
CR_list=[prism_url[1:-1],CR_title]
jira_cr_cloned_dict[jira_link]=CR_list

関数 send_mail_cloned() を実行すると、次のようなエラーが発生します。

File "/usr/lib/python2.6/email/mime/text.py", line 30, in __init__
    self.set_payload(_text, _charset)
  File "/usr/lib/python2.6/email/message.py", line 224, in set_payload
    self.set_charset(charset)
  File "/usr/lib/python2.6/email/message.py", line 266, in set_charset
    self._payload = charset.body_encode(self._payload)
  File "/usr/lib/python2.6/email/charset.py", line 387, in body_encode
    return email.base64mime.body_encode(s)
  File "/usr/lib/python2.6/email/base64mime.py", line 147, in encode
    enc = b2a_base64(s[i:i + max_unencoded])

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 54: ordinal not in range(128)

文字列をエンコード/デコードしないようにしました。ただし、その場合、印刷 %s は失敗します。

電子メールの送信中に、ここでエラーを理解するのを手伝ってもらえますか?

4

1 に答える 1

0

私の推測では、あなたの基本的な問題は次の行にあると思います:

CR_title=value[1].decode('utf-8')

値を明示的に Unicode 文字列にデコードしています。それをバイト文字列と連結することで、暗黙的に全体textを Unicode 文字列として作成します。よくMIMETextわかりませんが、Unicode 文字列を処理するように書かれておらず、バイト文字列のみを処理するように書かれていると思います。メッセージを構築するために、デフォルトでASCIIを使用するバイトへの暗黙的なエンコーディングをトリガーします。

に渡す前に、テキスト全体を UTF-8 として明示的にエンコードしてみてくださいMIMEText

HTML_BODY = MIMEText(text.encode("utf-8"), 'html','utf-8')
于 2013-03-19T00:13:19.023 に答える