2017-03-04 28 views
1

このコードは別のWebサイトのリポジトリから見つけられ、pythonを使用して電子メールを送信するのにも使用され、添付ファイルもあります。ファイルを送信するためにbase64にファイルをエンコードします。私は '.xlsx'ファイルを使用する前にコードをテストしました。問題が発生して送信されました。しかし今、プログラムは何らかの理由でそれを送信しません。ファイルはコードと同じフォルダにあります。ファイルをpythonで添付ファイルとして送信するファイルが見つかりません

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.base import MIMEBase 
from email import encoders 

fromaddr = "FROM EMAIL" 
toaddr = "TO EMAIL" 

msg = MIMEMultipart() 

msg['From'] = fromaddr 
msg['To'] = toaddr 
msg['Subject'] = "SUBJECT" 

body = "MESSAGE" 

msg.attach(MIMEText(body, 'plain')) 

filename = "05-11-2016 - Saturday.xlsx" 
attachment = open("05-11-2016 - Saturday", "rb") 

part = MIMEBase('application', 'octet-stream') 
part.set_payload((attachment).read()) 
encoders.encode_base64(part) 
part.add_header('Content-Disposition', "attachment; filename= %s" % filename) 

msg.attach(part) 

server = smtplib.SMTP('smtp.gmail.com', 587) 
server.starttls() 
server.login(fromaddr, "PASSWORD") 
text = msg.as_string() 
server.sendmail(fromaddr, toaddr, text) 
server.quit() 

私はTHSそれを実行に出力されるエラーです。

line 21, in <module> 
    attachment = open("05-11-2016 - Saturday", "rb") 
FileNotFoundError: [Errno 2] No such file or directory: '05-11-2016 - Saturday' 

任意の助けをいただければ幸いです。

+1

オープンしてはいけません('05 -11-2016 - Saturday.xlsx '、' rb ') '? –

+0

私がしたとき、メッセージは送られましたが、拡張子はありません。だから、拡張子なしのファイルだった – ashkl

+0

btw、ヒントありがとう、私はちょうど修正し、あなたのスクリプトを使用しようとしました:)おそらく何かのために役立つでしょう:) – Ilja

答えて

1

あなたは上記の行にfilenameを定義しました。だから、どうして使ってみませんか?あなたは今、DRY-原則のusefullnes学んだ (拡張子を忘れてしまったopen文で「XLSX」)

:)に:それを2回入力すると http://wiki.c2.com/?DontRepeatYourself

を、あなたは、ファイル名の定義を変更することができますし、 openは別のファイルを使用しています...

+0

私もこれを試してみて、メッセージは表示されますが、xlsxファイル拡張子はありません。 – ashkl

+0

まあ、あなたが印刷したエラーは「ファイルが見つかりません」でした。ファイル名が間違っています。そして正しいファイル名でファイルが送信されますが、受信者はその名前を拡張子なしで見ますか?これはローカルファイルの検索とは関係ありませんが、sendmail-scriptの設定でなければなりません。それは正しいファイルですか、送信されます(xlsxで名前を変更して開きます)?おそらく 'part.add_header(...) 'を別の文字列に変更すると、何が起こるかがわかります...? – Ilja

+0

うん、おそらく、助けてくれてありがとう。 – ashkl

0

私の認証情報を使用してコードを実行し、条件と同じディレクトリに小さなtxtファイルを作成しました。ここでは、変更するために必要なものです:

filename = "ExplicitFileName.txt" 
attachment = open("/USE/COMPLETE/PATH/TO/FILE/ExplicitFileName.txt", "rb") 

かは、Iljaは、あなたがこのようにそれを行うことができDRY原則として指摘されているように:

filename = "ExplicitFileName.txt" 
attachment = open("/COMPLETE/PATH/TO/FILE/" + filename, "rb") 

をこれらの両方がうまく動作します。

関連する問題