爬取某新闻网站的新闻并实现自动群发邮件的功能(python3+SMTP)

今天是2019年10月24日,一个属于国内程序员们的共同节日—中国程序员节
在这里插入图片描述
在计算机技术中,1G=1024MB,程序员节也由此诞生.

今天,我就总结一些关于网络安全的干货,送给大家!

在正式开始之前,我想强调一点,那就是:

每一种新兴技术就好比是一把刀,刀本身没有错,关键看用刀的人是谁,用刀的目的是什么.

我在这里告诉大家如何实现自动化群发邮件,是想告诉大家,这件事没有这么玄乎,我们只有了解这项技术,才能更好地识别类似的诈骗信息,以此来提高大家的网络安全意识.

这两个网站分别是菜鸟教程和廖雪峰对SMTP发送邮件的代码详解:

我刚开始为了图方便,就直接把代码复制下来了,但是发现出现了以下错误:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
出现这些报错的原因在于:

SMTP协议默认端口是25

而我使用的是QQ邮箱.我在网上查了一下,使用QQ邮箱发送邮件的端口为465.这一点也是需要大家注意的.网上有很多教程,每个人的运行环境可能不同,数据库的密码也是不同的,所以直接照搬代码是行不通的,需要把代码读懂后,自己再敲一遍才行.

刚刚讲到QQ邮箱,这里我再提一句,使用之前,需要在邮箱里设置SMTP的服务器(其他邮箱的设置方法大同小异):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,现在我们开始获取中国新闻网的新闻标题,作为邮件的正文:

我们先来看看中国新闻网的界面:
在这里插入图片描述
具体抓取方法可查看我的博客:
抓取中国天气网当前时段所有城市的天气数据(python+xpath)

我这里只抓取了今日新闻大标题部分:
在这里插入图片描述
具体代码如下:

import requests
from lxml import etree

def get_news():
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}
    url = 'https://www.chinanews.com/'
    response = requests.get(url=url,headers=headers)
    selector = etree.HTML(response.content, parser=etree.HTMLParser(encoding='utf8'))
    daodu = selector.xpath('//*[@id="daodu"]/div[@class="xwzxdd-dbt"]')[0:]
    news = []
    for item in daodu:
        new = item.xpath('./h1/a/text()')[0:]
        news.extend(new[0:])
    print(news)
    return news

最后是群发邮件的方法:

def send_news():
    # 输入Email地址和口令:
    from_addr = "[email protected]"
    password = "oycokbuorrvhddji"
    # 输入收件人地址:
    to_addr = ["[email protected]","[email protected]","[email protected]"]
    # 输入SMTP服务器地址:
    smtp_server = "SMTP.qq.com"
    #输入要发送的内容:
    news_list = get_news()
    # print(news_list)
    news = "Today's news from python:"
    for i in range(0,len(news_list)):
        news = news + "\n %s"%news_list[i]
    print(news)
    message = MIMEText(news, 'plain', 'utf-8')
    server = smtplib.SMTP_SSL(smtp_server, 465) # SMTP协议默认端口是25
    server.set_debuglevel(1)
    server.login(from_addr, password)
    try:
        for item in to_addr:
            server.sendmail(from_addr, [item], message.as_string())
        print("Success: 已成功发送邮件!")
        server.quit()
    except smtplib.SMTPException:
        print ("Error: 无法发送邮件")

实现群发功能只需要加上一个for循环即可,因为代码详解在我刚刚的链接上都写有,所以我在这里就不一一解释了.(记得把端口写对就好)

if __name__ == '__main__':
    send_news()

最后我们运行一下:
在这里插入图片描述
成功发送!我们来看看效果:
在这里插入图片描述
邮件是最易被攻击的入口,因此,我在这里给大家提出如下建议:

  1. 提高个人安全意识,收发邮件时确认收发来源是否可靠,不要随意点击或者复制邮件中的网址,不要轻易下载来源不明的附件,建议对陌生人邮件一律不打开。
  2. 尽量不在非可控环境下登录电子邮件,如网吧的电脑、其他人的电脑等。
  3. 确保邮件收发和登陆终端系统的环境安全(PC、手机、PAD等),及时升级更新和进行漏洞补丁修复,安装终端安全防护软件并及时升级打开监控,确保邮件收发的环境安全。
  4. 邮箱密码必须使用强密码(例如:密码长度大于12位字符,且必须为数字、英文大小写字母、特殊字符组合),并定期更换密码;密码不得与其他服务混用。
  5. 如使用邮件客户端,确保客户端安装程序的安全性,按照邮件服务器支持的加密链接方式(如SSL)配置邮件收发,而不要使用明文协议收发邮件;对邮件客户端数据文件所在卷,建议采用卷加密(如Bitlocker)
  6. 按照组织规定规范邮件签名。
  7. 如使用浏览器收发邮件,需要使用HTTPS协议登陆信箱,而不要使用HTTP登陆。
  8. 邮箱地址不要随意传播,减少攻击者找到攻击入口的可能;必须公开邮件地址的,可以把@符号用其他符号替换,避免被爬虫爬取识别后,成为垃圾邮件和攻击邮件群发的目标。

如果你也收到了这类邮件千万不要慌张。可以到以下这个网站做一下排查:https://haveibeenpwned.com

好了,今天的内容就讲到这里,我在这里,也祝各位开发者们节日快乐!
在这里插入图片描述

发布了32 篇原创文章 · 获赞 63 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/102720933