2017-03-24 4 views
1

この投稿に記載されている方法を使用してpandas DataFrameを含むyagmailメールを送信しようとしています:Python Email in HTML format mimelib yandmailがpandasの前に改行を追加するDataFrameがhtmlを生成

しかし、私が試したことが何であれ、DataFrameを印刷する前に、長い文字列改行を追加します。

私のコードは、(私は私のインストールのための電子メールアドレスを変更)です:

#--- Addition to original post --- 
import pandas as pd 
df = pd.DataFrame([[900, 20.0], [500, 21.0]], columns =['Quantity', 'Price']) 
#--- Addition to original post --- 

import time 
import yagmail 
yag = yagmail.SMTP(username, password) 

text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttps://www.python.org" 
html = df.to_html() 

yag.send('[email protected]', "This a reminder call " + time.strftime("%c"), [text,html]) 

た電子メールの本文は以下のとおりです。

>Hi! 
>How are you? 
>Here is the link you wanted: 
>https://www.python.org 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Quantity Price 
>0 900  20.0 
>1 500  21.0 

私もエンコード、DOCTYPEタグを追加しようとしましたutf-8として、ユニコードからストリングに変換しますが、私は成功しませんでした。

これはバグですか、誰でも解決策を教えてくれますか?

編集#1: HTML変数は、以下が含まれていることに注意してください:

<table border="1" class="dataframe"> 
    <thead> 
    <tr style="text-align: right;"> 
     <th></th> 
     <th>Quantity</th> 
     <th>Price</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <th>0</th> 
     <td>900</td> 
     <td>20.0</td> 
    </tr> 
    <tr> 
     <th>1</th> 
     <td>500</td> 
     <td>21.0</td> 
    </tr> 
    </tbody> 
</table> 

編集#2: を私はhtmlとDOCTYPEタグを追加しようとする上で詳述すると、私はで次のように追加してみましたhtmlの始めと終わり。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
     <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
    <title>Title</title> 
</head> 
<body> 
... 
</body> 
</html> 

私は、これは有効なHTML hereし、得られた電子メールの本文には類似していた検証。

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

























    Quantity Price 
0 900  20.0 
1 500  21.0 
+0

'[text、html]'を '[html、text]'に変更したときの出力は何ですか?私が尋ねる理由は、dfが問題なのか、それともyagmailなのかをチェックすることです。残念ながら、私は多くの試行錯誤を先に見ています! – MattR

+0

@MattR提案していただきありがとうございます。最後の行を 'yag.send('[email protected] '、"これはリマインダコール "+ time.strftime("%c ")、[html])'のコードに置き換えました。結果の電子メール本文には一連の改行が含まれていて、最後にhtmlテーブル – CurryPy

+0

がありました.Yagmailの著者はここに....間違いなくバグです。私は5つの '
'タグが追加されているのがわかります。私は無知だ。 – PascalVKooten

答えて

0

コメントが長すぎます:スペースを手動で送信して削除する前に、出力の変数を作成することができます。たとえば、過去に作成した私の電子メールプログラムの1つでは、easyguiを使用し、ユーザーがメッセージを作成するためにtextboxを使用しました。その後、そのメッセージを送信します。私は小さな例:

import easygui as e 
text_mes= e.textbox("Add to the Email", "Create Your Email", html) 
yag.send('[email protected]', "This a reminder call " + time.strftime("%c"), [text,text_mes]) 

このようにすると、空白を取り除くためのコードを作成する方法が見つかるまで手動で行を削除できます。

+0

これを手伝ってくれてありがとう、ありがとう。私はhtml変数を表示するために投稿を修正しました。それはきれいであるようです。したがって、削除するものはありません。 html変数はUnicodeなので、yagmailの前に文字列に変換しようとしましたが、.encode( 'utf-8')も追加しましたが、すべてのバリエーションは同じ結果になります。私はまた、境界タグとクラス識別子をテーブルタグから削除しようとしました。 – CurryPy

関連する問題