私の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"
を使ってみました。同じ結果。
なぜあなたはその動作を取得しているのかわかりませんが、電子メールは通常\ n \ nだけでなく、改行のために通常\ r \ nを使います。 – Evert
"\ r \ n"と同じ結果を得たことを含めるのを忘れました。投稿を更新します。 –