0

そのため、MYSQL データベースに基づいてテキスト ファイルを生成し、そのファイルを gmail 経由で添付ファイルとして電子メールで送信するスクリプトに取り組んでいます。ほとんどすべてが機能していますが、添付ファイルは正しく名前が付けられていますが、空白として表示されます。ここでドキュメントと多くの質問を調べました(これが私ができる限りの方法です)が、私の特定の間違いがどこにあるかを完全に推測することはできません. 明らかなことだと確信していますが、過去7時間これを使用した後、それを見ることができません. 私はプログラミングの初心者ではありませんがPythonとプログラムで電子メールを操作するのは初めてなので、それもおそらく問題の一部です。とにかく、これが問題のファイルです。どんな援助も大歓迎です。余談ですが、私が過去に Android アプリの開発に携わっていたときに助けてくれたすべての人に感謝したいと思います。すべてを機能させ、ストアに公開することができました。=)

(データベース ログインと電子メール ログインの両方の認証情報を偽の値に編集しました)

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 = "USER@GMAIL.com"
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@fakesite.com",
"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]))
4

1 に答える 1

0

どこがダメだったのかを把握することができました。ファイルへの書き込みが完了したら、実際にファイルを閉じるのを忘れていました。データベース con.close() への接続を閉じる場所の後に fp.close() を配置するだけで、問題なくファイルをメールで送信できます。

于 2013-05-31T15:34:49.313 に答える