2017-05-15 11 views
0

私のPythonスクリプトはリストのリストを取り、内部リストの要素を "、"で結合して電子メール本体のテキストを作成し、これらのそれぞれに改行を付け加えます:Python電子メールは最初の行だけで改行を失います

for row in rows: 
    emailBody += ",".join(row) + "\n" 

(。私はCSVモジュールを使用して似たような操作を行うことができることを知って、私はそれなしで行うことを目指している - 少なくとも今のところは)

そして、後でそれを使用して電子メールを送信します。

import smtplib 
from email.mime.text import MIMEText 

smtpServer = serverDNS 
msg = MIMEText(emailBody, "plain") 
msg['from'] = fromAddress 
msg['to'] = ", ".join(recipients) 
msg['subject'] = subject 
smtp = smtplib.SMTP(smtpServer) 
smtp.sendmail(msg['from'], recipients, msg.as_string()) 
smtp.quit() 

これはうまくいきますが、最初の行の改行が無視され、最初の2行が1行に終わるという点が異なります。他の行の改行はうまくいっています。

手動で最初の行の最後の項目に改行を手動で追加すると、最初の2行の間に空白行があるように電子メールには最初の行の後に改行が2つあります。

ここでは何が起こっていますか?これを期待どおりに動作させるにはどうすればよいですか?

最初の行(最初のリスト)は、ハードコードされた文字列で構成されています。だから、それは非常に単純なリストです。他のすべての行は動的に生成されますが、最後にはすべて単純な文字列値です(そうしないと、 'join'は不平を言うでしょう)。

単純にprint emailBodyの場合は、問題なく印刷されます。それは最初の行の改行が失われる電子メールに変換するときだけです。

"\n"の代わりに"\r\n"を使ってみました。同じ結果。

+0

なぜあなたはその動作を取得しているのかわかりませんが、電子メールは通常\ n \ nだけでなく、改行のために通常\ r \ nを使います。 – Evert

+0

"\ r \ n"と同じ結果を得たことを含めるのを忘れました。投稿を更新します。 –

答えて

0

これは、「機能」(私はバグと呼んでいます)ですが、私のPythonコードには問題ありません。残念ながら、私は仕事でOutlookに悩まされています。しかし私は仕事の住所と私の個人的な住所の両方にメールを送ると私のプライベートメールには問題なく表示されますが、私の仕事のメールには間違いがあることがわかりました!

次に、Outlookでは、「このメッセージの余分な改行は削除されました」という電子メールの上部に小さな灰色のテキスト行があることに気付きました。この行をクリックすると改行が復元され、電子メールが正しく表示されます!

Outlookがこれを行う理由は何ですか?なぜこれがいくつかの行ではなく他の行では何をするのか、どのように私のPythonがOutlookに「修正」されない電子メールを送信するようにコードすることができるのか?

Outlookの修正:

残念ながら、私はこれらのメールを受け取ることができるすべての人々のためにこれを行うことはできません。しかし、私はOutlookで「プレーンテキストメッセージで余分な改行を削除する」という設定を見つけました。そのため、これをオフにしています。これは少なくともOutlookクライアントの問題を解決しました。

Outlookが「修正」しようとしないように書式を設定する方法がわからない場合は、これらの電子メールの他のすべての受信者にこれを伝える必要があります。

関連する問題