2013-05-30 4 views
0

Итак, я работаю над скриптом, который будет генерировать текстовый файл на основе базы данных MYSQL и отправить файл в виде прикрепленного файла через gmail. У меня почти все работает, но файл, который он прикрепляет, именовался правильно, отображается как пустое. Я просумлял документацию и много вопросов здесь (так я мог получить, насколько я знаю), но не могу понять, где моя конкретная ошибка. Я уверен, что это нечто очевидное, но после работы с ним в течение последних 7 часов я не вижу этого. Я не новичок в программировании, но я новичок в python и для работы с электронной почтой, так что это, вероятно, также является частью проблемы. В любом случае, вот этот файл. Любая помощь очень ценится. В стороне я хочу поблагодарить всех здесь за помощь, которую я получил в прошлом, когда я работал над Android-приложением. Я смог получить все, чтобы работать, и опубликовать его в магазине. =)Отправка текстового вложения с Python 2.7 через Gmail почти работает

(Я редактировал мои документы здесь как для входа в базу данных и электронной почты для входа, чтобы быть поддельные значения)

import MySQLdb as mdb 
import sys, time, datetime 

import smtplib 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEBase import MIMEBase 
from email.MIMEText import MIMEText 
from email import Encoders 
import os 

try: 
# prompt = ('> ') 

t = time.localtime() 

fp = file('bus_rep_%s-%s-%s--%s.%s.%s.txt' % (t[0], t[1], t[2], t[3], t[4], t[5]), 'a+') 
fp.write("Business Name\t\tEIN\t\tSub Date\tDays\tAction\n") 
con = mdb.connect('XXX.XXX.XXX.XXX', 'USERNAME', 'USERPASS', 'DBNAME'); 

# print "Enter start date: YYYY-MM-DD" 
start_date = 2000-01-01 

cur = con.cursor() 

current_date = datetime.date.today() 
# print "Current Date = %r" % current_date 
cur.execute('SELECT BusName, EIN, DWHDateSubmitted FROM Business WHERE DWHSubmitted LIKE %d AND DWHDateSubmitted IS NOT NULL' % (1)) 
# Fetch all the rows in a list of lists. 
results = cur.fetchall() 

for row in results: 
    bname = row[0] 
    ein = row[1] 
    subdate = row[2] 

#  print bname 
#  print ein 
#  print subdate 

    days_passed = current_date - subdate 
    days_passed = days_passed.days 
#  print "days_passed = %r" % days_passed 

    if days_passed > 30: 
     action = 'Contact Claims' 
    else: 
     action = ' ' 

#  print "bname = %s, EIN = %s, subdate = %s, days_passed = %d, action = %s" % (bname, ein, subdate, days_passed, action) 

    fp.write("%s\t%s\t%s\t%d\t%s\n" % (bname, ein, subdate, days_passed, action)) 
except mdb.Error, e: 
print "Error: %d: %s" % (e.args[0],e.arge[1]) 
sys.exit(1) 

con.close() 

gmail_user = "[email protected]" 
gmail_pwd = "GMAILPASS" 

def mail(to, subject, text, attach): 
msg = MIMEMultipart() 

msg['From'] = gmail_user 
msg['To'] = to 
msg['Subject'] = subject 

msg.attach(MIMEText(text)) 

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

mailServer = smtplib.SMTP("smtp.gmail.com", 587) 
mailServer.ehlo() 
mailServer.starttls() 
mailServer.ehlo() 
mailServer.login(gmail_user, gmail_pwd) 
mailServer.sendmail(gmail_user, to, msg.as_string()) 

mailServer.close() 

mail("[email protected]", 
"Daily Business Claim Submission Report", 
"Attached is the automatically generated Daily Business Claim Report.", 
"bus_rep_%s-%s-%s--%s.%s.%s.txt" % (t[0], t[1], t[2], t[3], t[4], t[5])) 

ответ

0

Я был в состоянии понять, где я перепутались. Я забыл фактически закрыть файл, как только я закончил писать. Я просто поместил fp.close() после того, как я закрою соединение с базой данных con.close(), и он не отправит письмо в файл без проблем.

Смежные вопросы