2017-03-04 1 views
1

다른 웹 사이트 저장소에서이 코드를 발견했으며 python을 사용하여 전자 메일을 보내고 첨부 파일도 첨부했습니다. 파일을 전송하기 전에 base64로 파일을 인코딩합니다. '.xlsx'파일을 사용하기 전에 코드를 테스트했는데 문제가 발생하여 전송되었습니다. 하지만 이제는 프로그램이 어떤 이유로 든 보내지 않습니다. 파일은 코드와 동일한 폴더에 있습니다. 어떤 도움을 주시면 감사하겠습니다파이썬에서 파일을 첨부 파일로 보낼 파일을 찾을 수 없습니다.

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

:

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() 

내가 그것을 부르게을 실행

가 출력되는 오류입니다.

+1

'open ('05 -11-2016 - Saturday.xlsx', 'rb')'이 아니어야합니까? –

+0

내가 그랬을 때 메시지가 전송되었지만 확장이 없습니다. 그래서 그것은 확장자가없는 파일이었습니다 – ashkl

+0

btw, 힌트를 주셔서 감사합니다. 나는 방금 스크립트를 수정하고 사용하려고했습니다. :) 아마도 무언가를 도울 것입니다 :) – Ilja

답변

1

위의 줄에 filename을 정의 했으므로 사용하지 않으시겠습니까? :) 은 이제 DRY 원리의 usefullnes 배운

(당신이 확장자 open 성명에서 'XLSX'잊었) : 두 번을 입력하여 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") 

이 두 가지 모두가 잘 작동합니다.

관련 문제