β

用Python发垃圾邮件

茶瓯葱丝 146 阅读

qiniu_1376907717364.jpg

这个程序写了很久了,是刚开始学习python的时候写的,主要就是抓取页面的邮箱,然后发送。直接看代码吧,是我少有的注释比较详细的代码了,希望会有点参考价值。

#!/usr/bin/python
# -*- coding:UTF-8 -*-
#encoding=utf-8
#author:daimin(vagasnail#gmail.com)
"""
 能发送到多个邮箱
 使用多线程
 抓取指定的网页得到网页中的邮箱,然后发送(通过命令行参数获取网页地址)
"""
import sys
import smtplib
from email.Message import Message
from time import sleep
import threading
import urllib2,urllib
from BeautifulSoup import BeautifulSoup
from BeautifulSoup import BeautifulStoneSoup
import re
to_addrs = ['target@xx.com']       #目标邮箱
cc_addr = 'cc@xx.com'              #抄送
from_addr = 'from@xxx.com'         #发送邮箱
# 标题和正文
    subject = u'这不是垃圾邮件' # u表示该字符使用unicode方式编码,注意这里只是起指示作用,用于一些函数处理
    content = u'你好,测试用的'
    class MyThread(threading.Thread):
    # const
    smtpserver = 'smtp.gmail.com'
    username = 'vagasnail@gmail.com'
    password = 'dai253685'
    def __init__(self,no,msg,to_addr):
        threading.Thread.__init__(self) # 调用parent的__init__方法
        self.no = no
        self.msg = msg
        self.to_addr = to_addr
    def run(self):
        self.send_message()
    def send_message(self):
        print " start thread %d ....\n" % (self.no)
        sm = smtplib.SMTP(MyThread.smtpserver, port=587, timeout=20)
        sm.set_debuglevel(1)                   #开启debug模式
        sm.ehlo()
        sm.starttls()                          #使用安全连接
        sm.ehlo()
        sm.login(MyThread.username, MyThread.password)
        sm.sendmail(from_addr, self.to_addr, self.msg)
        sleep(5)
        sm.quit()
# 使用urllib2 获取html文档
# 使用BeautifulSoup解析html文档
def get_to_addrs(url):
    #pattern = re.compile(r'^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$')
    pattern = re.compile(r'\w+[\.\w]+@\w+\.\w+')
    global to_addrs
    req = urllib2.Request(url)
    res = urllib2.urlopen(req, timeout=10)
    html = res.read()
    res.close()
    match = pattern.findall(html)
    to_addrs.extend(match)
    #soup = BeautifulStoneSoup(html)
    '''
    ass = soup.findAll("a")
    for a in ass:
        h = a.get('href')
        if h <> None:
            h = h.strip()
            pos = h.find(tag)
            if pos <> -1:
                mail = h.replace(tag,'')
                mail = mail.strip()
                to_addrs.append(mail)
    '''
if __name__ == "__main__":
    """
因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。
很多情况下 sys.defaultencoding 是 ANSCII,如果 s 不是这个类型就会出错。
拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的。
你可以明确的s.decode(xxx).encode(xxxx)来编码解码 (解码:将编码解释为字符串,编码:将字符串编码)
    """
    reload(sys)  # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
    sys.setdefaultencoding( "utf-8" )
    if len(sys.argv) <> 2:
        print "    Please input target page's url which you want handle!"
        exit(0)
    url = sys.argv[1]
    get_to_addrs(url)
    print to_addrs
    tno = 1
    for to_addr in to_addrs:
        message = Message()
        #message.set_charset('')
        message['Subject'] = subject    #邮件标题
        message['From'] = from_addr
        message['To'] = to_addr
        message['Cc'] = cc_addr
        message.set_payload(content)    #邮件正文
        msg = message.as_string()
        #send_message(tno,msg,to_addr)
        t = MyThread(tno,msg,to_addr)
        t.start()
        tno = tno + 1
作者:茶瓯葱丝
本站内容为个人技术博客及其它软件编程信息。本站采用python开发,用markdown来进行编辑,生成静态文本放在github上。
原文地址:用Python发垃圾邮件, 感谢原作者分享。