由官网提供的方法可以发现有两种形式可以发送邮件,

其一:配置settings,使用

[python] view plain copy 使用scrapy的mail模块发送邮件使用scrapy的mail模块发送邮件

  1. mailer = MailSender.from_settings(settings)  

的方法读取settings的配置,不过本人这样写好以后一直出现这种错误


[python] view plain copy 使用scrapy的mail模块发送邮件使用scrapy的mail模块发送邮件

  1. TypeError: 'module' object has no attribute '__getitem__'  


没有找到解决方法,所以尝试了另一种


其二:官网链接

直接在MailSender中配置需要的字段。

本人使用的是163邮箱发送邮件,请注意:授权码的获取以及邮箱的相应配置如下:

使用scrapy的mail模块发送邮件

授权码获取成功以后一定要妥善保存,原因你懂得!!



下面代码为爬虫关闭的时候,执行发送邮件的功能!(代码亲测已过)

[python] view plain copy 使用scrapy的mail模块发送邮件使用scrapy的mail模块发送邮件

  1. # -*- coding: utf-8 -*-  

  2. import scrapy  

  3. import logging  

  4.   

  5. class MaiziSpiderSpider(scrapy.Spider):  

  6.     name = "maizi_spider"  

  7.     allowed_domains = ["maiziedu.com"]  

  8.     start_urls = (  

  9.         'http://www.maiziedu.com/wiki/crawler/logging/',  

  10.     )  

  11.     logger = logging.getLogger(__name__)  

  12.   

  13.     def parse(self, response):  

  14.         self.logger.info('Parse function called on %s', response.url)  

  15.         print response.url  

  16.   

  17.     def closed(self, reason):# 爬取结束的时候发送邮件  

  18.         from scrapy.mail import MailSender  

  19.   

  20.         # mailer = MailSender.from_settings(settings)# 出错了,没找到原因  

  21.         mailer = MailSender(  

  22.             smtphost = "smtp.163.com",  # 发送邮件的服务器  

  23.             mailfrom = "***********@163.com",   # 邮件发送者  

  24.             smtpuser = "***********@163.com",   # 用户名  

  25.             smtppass = "***********",  # 发送邮箱的密码不是你注册时的密码,而是授权码!!!切记!  

  26.             smtpport = 25   # 端口号  

  27.         )  

  28.         body = u""" 

  29.         发送的邮件内容 

  30.         """  

  31.         subject = u'发送的邮件标题'  

  32.         # 如果说发送的内容太过简单的话,很可能会被当做垃圾邮件给禁止发送。  

  33.         mailer.send(to=["****@qq.com""****@qq.com"], subject = subject.encode("utf-8"), body = body.encode("utf-8"))  



发送的过程中可能会被识别为垃圾邮件,为了防止这种情况的发生,修改发送邮件的主题和发送邮件的内容即可。