2016-04-13 2 views
1

3つのCSVファイルを持つディレクトリパスからLinuxボックスからメールを送信しています。私は私の電子メールの3つすべてを添付したいと思う。以下はスクリプトです。面白い名前/不完全な添付ファイル/間違った拡張子 - メールPython

私はしばらく頭を傷つけていて、何度も試してみましたが、それでも問題を抱えています。

  • 添付されたファイルは、テキストファイル、すなわち拡張子.txtあり、私が欲しいファイルが同じまま面白い名前ATT00001.txtATT00002.txtを持っているCSV
  • になることです。
  • 3番目のファイルはメールには添付されません。本文にはコンテンツが出力されますが、同じファイルがありますが、試してみることもあります。

私は以下の設定を試みましたが、役に立たなかった。

msg["Content-Disposition"] = "attachment; filename=" + file + ";" 

msg.add_header('Content-Disposition', 'attachment', filename=file) 
+1

デバッグ技術として、電子メールクライアント(Outlook、Thunderbird、Gmailなど)を使用してファイルを送信してみてください。次に、電子メールを受け取ったら、電子メールを調べるための「ソースの表示」を探します。あなたの電子メールクライアントがあなたのPythonプログラムとは異なる方法でメールをフォーマットした方法を見てください。 –

+0

Outlookでは、表示元のオプションが表示されません。 – garg10may

+2

'msg.attach(csv)'の前に 'csv.add_header( 'Content-Disposition'、 'attachment'、filename = file)'を実行し、 'email_body = MIMEText("こんにちは、あなたのCSVがあります! "、" plain ")' msg.attach(email_body) '? – jDo

答えて

3

1)最初のテキストオブジェクトが電子メールメッセージとして表示されます。したがって、最初に余分なテキストオブジェクトを追加してください。

2)CSVファイルは、content-type: text/plainではなく、content-type: text/csvとして送信する必要があります。

#UNTESTED 
def mailer(sender, to, path): 

    msg = MIMEMultipart() 
    msg['Subject'] = 'UMR_EOD_RECONCILLATIONS' 
    msg['From'] = sender 
    msg['To']  = to 

    msg.attach(MIMEText('Here are the reports you asked for.')) 

    for file in os.listdir(path): 
     f = open(path + file, 'rb') 
     csv = MIMEText(f.read(), 'csv') 
     f.close() 
     csv.add_header('Content-Disposition', 'attachment', filename=file) 

     msg.attach(csv) 

    mailer = smtplib.SMTP('localhost') 
    mailer.sendmail(sender,to, msg.as_string()) 
    mailer.quit() 
+0

ありがとう、それは3つの問題すべてを解決しました。 'msg.attach(csv)の後にContent-Dispositionを使用していたので、動作しませんでした。今はボディに出力がありません。 :) – garg10may

2

電子メールを送信したいときは、常にMIMEを実行するようにしてください。誰もそれに対処したくないと思う。それはJavaのように感じます。私の謝罪、私は開発者です。

その目的は、HTML、インラインイメージ、添付ファイルを使用して電子メールを簡単に送信できるようにすることです。

あなたが望むもののためのコード:

import os 
import yagmail 

def mailer(sender, to, path): 
    yag = yagmail.SMTP(sender, host="localhost", smtp_skip_login=True) 
    contents = ['Here are the reports you asked for.'] + os.listdir(path) 
    yag.send(to, 'UMR_EOD_RECONCILLATIONS', contents) 

私はそこにもっと素敵なトリックのためREADMEを読むことをお勧めしたい:)

開始するには、yagmailをインストールするpip install yagmailを使用しています。

関連する問題