2013-11-26 47 views
1
with mail.connect() as conn: 
for user in selectemail: 
    message1 = request.form['htmltext'] 
    sender='[email protected]' 
    subject = "hello, %s " %user[1] 
    msg = Message(recipients=[user[0]], 
        html=message1, 
        subject=subject, 
        sender=sender 
       ) 

    conn.send(msg) 

這個代碼用波斯語字體發送是工作得很好,當我在我的HTML 瓶郵件批量HTML電子郵件中的HTML

正常英文字體

使用,但是當我用波斯語字體沒有奏效。

 <h1>فونت فارسی</h1> 

我有這樣的錯誤形式瓶:

 builtins.UnicodeEncodeError 
    UnicodeEncodeError: 'ascii' codec can't encode character '\u0633' in position 659:  ordinal not in range(128) 

,這是完全錯誤的燒瓶:

File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\_compat.py", line 33, in reraise 
    raise value 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1381,   in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\_compat.py", line 33, in reraise 
    raise value 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1461,  in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "D:\contact\contactweb\flaskapp.py", line 160, in gotomailing 
    conn.send(msg) 
    File "d:\Python33\lib\site-packages\flask_mail.py", line 168, in send 
    message.as_string()) 
    File "d:\Python33\lib\smtplib.py", line 745, in sendmail 
    msg = _fix_eols(msg).encode('ascii') 
+0

你在'message1'的HTML代碼中使用farsi嗎? (如果是的話,'type(message1)'return('str','unicode'或'bytes')是什麼?(如果'str'是什麼版本的Python你在運行?) –

+0

是的,我用farsi,message1 ='

فونتفارسی

',類型(message1)是str我認爲,python = 3.3,tank for help :) – garni

+0

什麼是完整的堆棧跟蹤? –

回答

0

根本的問題是,當你在Python的傳遞strunicode 2)至smtplib.sendmail,該字符串被編碼爲bytes as ASCII。當你傳遞任何東西,除了ASCII字符,一切正常,但一旦你傳入一組非ASCII字符(如فونتفارسی),那麼你會得到編碼錯誤。

解決方法是簡單地進行編碼的消息字節自己,提供正確的編碼:

msg = Message(recipients=[user[0]], 
       html=message1.encode("utf-8"), 
       subject=subject, 
       sender=sender 
      ) 

message1.encode("utf-8")將改造的unicode strbytes表示在UTF-8編碼的那些字符流。當smtplib.sendmail檢查消息的內容時,它將看到它已經是一個字節流,並且不會嘗試再次對它進行編碼(從而修復你的問題)。

+0

許多坦克爲您的答案,我會測試它現在我有smtp服務器的問題, – garni

+0

不工作,AttributeError:'字節'對象沒有屬性'編碼',我有這個錯誤 – garni

+0

也許這是爲Windows,CUS我近乎代碼在LINUX服務器是工作,! – garni