2017-01-24 16 views
2

다음 Python 스크립트를 사용하여 Gmail을 통해 첨부 파일을 보냈습니다. 그러나 그것은 python 스크립트가 저장된 동일한 폴더에 저장된 첨부 파일을 보내는 데 사용될 수 있습니다. 다른 폴더에 저장된 첨부 파일을 보내려고합니다. 이 스크립트를 수정하여 어떻게 할 수 있습니까? 고맙습니다. 당신이 subdir/file1.zip 당신이 스크립트를 호출 경로를 기준으로Python 스크립트를 사용하여 첨부 파일 보내기

sendMail(["[email protected]"], 
     "Subject", 
     "Dear sir..", 
     ["subdir/file1.zip", "subdirfile.zip"]) 

반면 : 예컨대 할 수 있도록

import smtplib 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEBase import MIMEBase 
from email.MIMEText import MIMEText 
from email.Utils import COMMASPACE, formatdate 
from email import Encoders 
import os 
import datetime 


smtpUser = ' ' 
smtpPass = ' ' 

toAdd = ' ' 
fromAdd = smtpUser 

today = datetime.date.today() 

subject = 'Data File 01 %s' % today.strftime('%Y %b %d') 
header = 'To :' + toAdd + '\n' + 'From : ' + fromAdd + '\n' + 'Subject : ' + subject + '\n' 
body = 'This is a data file on %s' % today.strftime('%Y %b %d') 

attach = 'Data on %s.csv' % today.strftime('%Y-%m-%d') 

print header 


def sendMail(to, subject, text, files=[]): 
    assert type(to)==list 
    assert type(files)==list 

    msg = MIMEMultipart() 
    msg['From'] = smtpUser 
    msg['To'] = COMMASPACE.join(to) 
    msg['Date'] = formatdate(localtime=True) 
    msg['Subject'] = subject 

    msg.attach(MIMEText(text)) 

    for file in files: 
     part = MIMEBase('application', "octet-stream") 
     part.set_payload(open(file,"rb").read()) 
     Encoders.encode_base64(part) 
     part.add_header('Content-Disposition', 'attachment; filename="%s"' 
         % os.path.basename(file)) 
     msg.attach(part) 

    server = smtplib.SMTP('smtp.gmail.com:587') 
    server.ehlo_or_helo_if_needed() 
    server.starttls() 
    server.ehlo_or_helo_if_needed() 
    server.login(smtpUser,smtpPass) 
    server.sendmail(smtpUser, to, msg.as_string()) 

    print 'Done' 

    server.quit() 


sendMail([toAdd], subject, body, [attach]) 

답변

3

sendMail의 네 번째 매개 변수는 파일 이름의 목록입니다. 파일을 다른 곳으로 완전히 참조하려면 /path/to/my/file1.zip을 사용하십시오. /home/user/file1.zip

+1

질문은 스크립트의 작업 디렉토리 외부로 파일을 보내는 것에 대해 질문합니다. 답안에 절대 경로를 포함시키는 것을 고려하십시오. –

+0

서브 디렉토리로 "다른 폴더"를 가져 왔지만, 물론 다른 곳에서도 사용할 수 있습니다. 힌트를 주셔서 감사합니다. – hansaplast