Python实现推广营销邮件自动发送系统

发布于 / Python / Comments Off on Python实现推广营销邮件自动发送系统

*文中的全部代码为在Python2.7下开发,在3.x的环境下尚未测试。

Python使用自带的email库的SMTP功能发邮件:

from email.mime.text import MIMEText
import smtplib
from email.header import Header
def _format_addr(s):
    name, addr = parseaddr(s)    return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))
        
#smtp设置
from_addr = xxxx    #账号
password = xxxx     #密码
smtp_server = xxxx  #SMTP服务器
to_addr = xxxx@xxx.com  #发给谁

#邮件内容
msg = MIMEText('内容', 'plain', 'utf-8') #文本内容
#msg = MIMEText('<html><body><h1>Test</h1>' +
    '<p>测试</p>' +
    '</body></html>', 'html', 'utf-8') #html内容
msg['From'] = _format_addr(u'发件人昵称 <%s>' % from_addr)
msg['To'] = _format_addr(u'收件人昵称 <%s>' % to_addr)
msg['Subject'] = Header(u'邮件标题', 'utf-8').encode()

#连接服务器,发送邮件
server = smtplib.SMTP(smtp_server, 25) #默认端口25
#server = smtplib.SMTP_SSL(smtp_server,465) #这个是通过SSL方式连接
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

运行代码,OK,一封邮件发送成功~

发送推广邮件,首先要有大量的邮箱小号,不然你会看到这个:

blob.png

这里假设我通过P♂Y交易买了一些邮箱小号,我们把这些小号格式化成这样的格式:

xxx1@xxx.com password1
xxx2@xxx.com password2
... ...

存到mailbox变量里:

mailbox = '''xxx1@xxx.com password1
xxx2@xxx.com password2
... ...'''

写个函数,让函数解析mailbox,每次随机返回一个邮箱账号,存到列表里:

def FuckMail():    #解析邮箱
  global mailbox
  mailbox = mailbox.split('\n')
  for i in range(len(mailbox)):
    mailbox[i] = mailbox[i].split(' ')

def GetMail():    #获取一个邮箱,返回list[邮箱账户, 密码]
  global mailbox
  index = randint(0, len(mailbox) - 1)
  return mailbox[index]

运行几次GetMail(),我们获取到了不同的随机邮箱账号。

好了,下面就是发信的部分。我之前定向采集好了引流的目标邮箱,以list的形式存到了to_addr里。

to_addr = ['xxx@qq.com', 'xxx@qq.com', ....]

ad变量存放我们的广告内容

ad = '''Test Ad Mail.'''

接着写个发件函数:

def Send():
  global smtp_server, ad
  msg = MIMEText(ad, 'html', 'utf-8')
  msg['Subject'] = Header('标题', 'utf-8')
  step = 10    #每次发送10个
  for i in range(0, len(to_addr), step):
    SendList = to_addr[i:i+step]
    print("sending: %d to %d" % (i, i + step))
    try:
      print('Sending Email: ', SendList)
      mail = GetMail()
      from_addr = mail[0]
      password = mail[1]
      server = smtplib.SMTP_SSL(smtp_server,465)
      server.set_debuglevel(1)
      server.login(from_addr, password)
      server.sendmail(from_addr, SendList, msg.as_string())
      server.quit()
    except:
      print('ERROR!')
      sleep(3600)    #一般是邮箱被封了,休息一小时重试
      pass
    sleep(10)

运行它,一个完美的发邮件程序写好了。

划重点!划重点!划重点!:

以上程序如果用163邮箱当小号的时候,你会看到这个:

blob.png

这个函数没有写msg['From']和msg['To'],因此这个msg不是标准形式的发件header。在QQ邮箱测试时没问题的,但是163邮箱会提示垃圾邮件,禁止发送。手动添加上这两个即可。


总结一下,整个营销发件程序为:

#encoding:utf-8
from email.mime.text import MIMEText
import smtplib
import requests as r
import json
from random import shuffle, randint
from time import sleep
from email.header import Header

#小号列表
mailbox = '''xxx@qq.com password
xxx2@qq.com password
xxx3@qq.com password'''

#smtp服务器
smtp_server = 'smtp.qq.com'

#收件人
to_addr = []

#广告词(邮件内容)
ad = '<html><body><p>致正在忙碌的考研、考证党们~</p><br><img src="http://cdn.mmuaa.com/ad.jpg" /><br><p>作为一个新时代的大学生,我们要为自己奋斗,为自己努力。为了找到一个好的工作,找个好的生活环境,冲一冲吧~</p></body></html>'


def GetTarget():
  global to_addr
  '''次数省略目标邮箱的采集程序'''
  
def Send():
  global smtp_server, ad
  msg = MIMEText(ad, 'html', 'utf-8')
  msg['Subject'] = Header('致正在奋斗中的大学党', 'utf-8')
  step = 10
  for i in range(0, len(to_addr), step):
    SendList = to_addr[i:i+step]
    print("sending: %d to %d" % (i, i + step))
    try:
      print('Sending Email: ', SendList)
      mail = GetMail()
      from_addr = mail[0]
      password = mail[1]
      server = smtplib.SMTP_SSL(smtp_server,465) #SSL方式连接
      server.set_debuglevel(1)
      server.login(from_addr, password)
      server.sendmail(from_addr, SendList, msg.as_string())
      server.quit()
    except:
      print('ERROR!')
      sleep(3600)
      pass
    sleep(10)

def FuckMail():
  global mailbox
  mailbox = mailbox.split('\n')
  for i in range(len(mailbox)):
    mailbox[i] = mailbox[i].split(' ')

def GetMail():
  global mailbox
  index = randint(0, len(mailbox) - 1)
  return mailbox[index]
  
FuckMail()
GetTarget()
Send()

转载原创文章请注明,转载自: 斐斐のBlog » Python实现推广营销邮件自动发送系统
评论已关闭