Использование расширения для отправки электронной почты с удаленными данными - PullRequest
0 голосов
/ 14 мая 2019

Нужна помощь, пожалуйста!

После сканирования сайта и возвращения обработки данных по конвейерам, мне нужно отправить данные по электронной почте. Я попробовал и все прочитал, но не могу соединить точки. В конвейерах я пробовал следующее:

class EmailPipeline(object):
    def close_spider(self, spider):
        from_email = "myemail@email.com"
        to_email = "anotheremail@email.com"

        msg = MIMEMultipart()
        msg['From'] = from_email
        msg['To'] = to_email
        msg['Subject'] = 'Scrapper Results'

        intro = "Summary stats from Scrapy spider: \n\n"

        body = spider.crawler.stats.get_stats()
        body = pprint.pformat(body)
        body = intro + body
        msg.attach(MIMEText(body, 'plain'))

        server = smtplib.SMTP("mailserver", 465)
        server.startssl()
        server.login("user", "password")
        text = msg.as_string()
        server.sendmail(from_email, to_email, text)
        server.quit()

Должен ли я отправлять электронную почту из конвейера или расширения или это предпочтение? Как бы я это реализовал ??

Спасибо всем!

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Scrapy предоставляет MailSender модуль (который основан на smtplib):

from scrapy.mail import MailSender
mailer = MailSender()
mailer.send(to=["someone@example.com"], subject="Some subject", body="Some body", cc=["another@example.com"])
0 голосов
/ 14 мая 2019

Вот файл, который вы можете использовать и импортировать с помощью этой функции send_mail. Вам нужно будет изменить некоторые вещи, чтобы это работало в вашей ситуации. Вы правильно включили его через трубопровод.

import smtplib

# For guessing MIME type
import mimetypes
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# Import the email modules we'll need
import email

def send_mail(filename):
    sender = 'sender@email.com'
    reciever = 'receiver@email.com'
    marker = "AUNIQUEMARKER"
    msg = MIMEMultipart()
    msg['Subject'] = 'Subject text here'
    msg['From'] = sender
    msg['To'] = reciever
    # Read a file and encode it into base64 format
    fo = open(filename, "rb")
    att = MIMEApplication(fo.read(),_subtype="pdf")
    msg.attach(att)
    fo.close()
    try:
        smtpObj = smtplib.SMTP(host='smtp.host.com', port=587)
        smtpObj.ehlo()
        smtpObj.starttls()
        smtpObj.login(sender, 'your password')
        smtpObj.sendmail(sender, reciever, msg.as_string())
        print('SUCCESSFULLY SENT EMAIL')
        return
    except Exception as e:
        print("SEND E-MAIL FAILED WITH EXCEPTION: {}".format(e))
        return

Другая часть, чтобы найти последний измененный файл в вашем выходном каталоге

import os
import glob

download_dir = "/full/path/to/files/"

def get_newest_file():
    print("Finding latest pdf file")
    file_list = glob.glob('{}*.pdf'.format(download_dir))
    latest_file = max(file_list, key=os.path.getctime)
    if latest_file:
        print("Latest file: {}".format(latest_file))
        return latest_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...