2015-09-24 1 views
0

Имейте скрипт test.py, который будет генерировать от 2 до 3 файлов csv, создавая sql-запросы. Файлы CSV будут сгенерированы и сохранены по тому же пути, что и test.py. Генерация CSV-файл является правильной, но вложения электронной почты не работают Ниже мой фрагмент кода:Отправить CSV-файлы как одно вложение электронной почты

import smtplib 
import csv 
from email.mime.multipart import MIMEMultipart 
from email.message import Message 
from email.mime.text import MIMEText 

with open('record1.csv', 'wb') as f: 
    fieldnames = ['Name','No audits'] 
    writer = csv.DictWriter(f, fieldnames=fieldnames) 
    writer.writeheader() 
    for data in query: 
     writer.writerow({'Name' : data[0], 'No audits': data[1]}) 

## below code as problem 
#Mail format 
COMMASPACE = ', ' 
SERVER = "localhost" 

msg = MIMEMultipart() 
msg['Subject'] = 'Audit records' 
emailfrom = "xyz" // Giving proper outlook mail id 
emailto = ['abc'] // // Giving proper outlook mail id lists 

msg['From'] = emailfrom 
msg['To'] = COMMASPACE.join(emailto) 
msg.preamble = 'List of audit records ' 
csvfiles = ['record1.csv', 'record2.csv'] 

for csv in csvfiles: 
     print csv 
     with open(csv) as fp: 
       record = MIMEText(fp.read()) 
     msg.attach(record) 

print "INFO: " 
server = smtplib.SMTP(SERVER) 
server.sendmail(emailfrom, emailto, msg.as_string()) 
server.quit() 

скрипт работает без ошибок, но не электронная почты не передается

+0

Отправляется ли электронное письмо, если вы прокомментируете часть вложения? –

+0

Нет, если я прокомментирую часть файлов csv и попробую отправить, даже тогда ее не отправили –

+0

Ну, тогда вам следует продолжать уменьшать вашу тестовую программу до самой маленькой программы, которая все еще показывает проблему. Это не позволяет нам тратить время на красные сельди, такие как «привязанность», как указано в вашем названии. –

ответ

1

Вы пропустили регистрационную часть. И вы должны предоставить надлежащий сервер и порт в smtplib.SMTP().

Изменить последние 3 строки следующим образом. Следующий код предназначен для gmail, обновите код в соответствии с Outlook.

server = smtplib.SMTP('smtp.gmail.com', 587) 
server.ehlo() 
server.starttls() 
server.login(emailfrom, 'password') 
server.sendmail(emailfrom, emailto, msg.as_string()) 
server.quit() 

Edit:

импорта следующее:

from email import encoders 
from email.mime.base import MIMEBase 
import os 

И заменить петлю со следующим кодом.

for csv in csvfiles: 
     print csv 
     with open(csv) as fp: 
      record = MIMEBase('application', 'octet-stream') 
      record.set_payload(fp.read()) 
      encoders.encode_base64(record) 
      record.add_header('Content-Disposition', 'attachment', 
           filename=os.path.basename(csv)) 
     msg.attach(record) 
+1

. Вход не требуется отправлять вам почтовые серверы office outlook. –

+0

Im возможность отправлять почту по следующей ссылке http://effbot.org/pyfaq/how-do-i-send-mail-from-a-python-script.htm Но не приложение :( –

+0

@kittudeopa then как почта отправляется без входа в систему? Не получил ваш последний комментарий. –