zoukankan      html  css  js  c++  java
  • 【python】脚本连续发送QQ邮件

    今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱、163邮箱、google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱。一下逐步解答相关技巧。

    首先,执行如下操作,__init__ 标志该文件夹是一个python程序包

    $mkdir automail
    $cd automail
    $gedit qqmail
    $touch __init__

    打开 qqmail ,写入如下代码。

     1 #-*- coding: utf -8 -*-
     2 import sys, os, re, urllib, urlparse
     3 import smtplib
     4 import traceback
     5 from email.mime.text import MIMEText
     6 from email.mime.multipart import MIMEMultipart
     7  
     8 def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):
     9     '''
    10     @subject:邮件主题
    11     @msg:邮件内容
    12     @toaddrs:收信人的邮箱地址
    13     @fromaddr:发信人的邮箱地址
    14     @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
    15     @password:发信人的邮箱密码
    16     '''
    17     mail_msg = MIMEMultipart()
    18     if not isinstance(subject,unicode):
    19         subject = unicode(subject, 'utf-8')
    20     mail_msg['Subject'] = subject
    21     mail_msg['From'] = fromaddr
    22     mail_msg['To'] = toaddrs              # 单个收件人
    23     #mail_msg['To'] = ",".join(toaddrs)   # 多个收件人
    24     mail_msg.attach(MIMEText(msg, 'plain', 'utf-8'))
    25     #mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))
    26     try:
    27         s = smtplib.SMTP()
    28         s.connect(smtpaddr)  #连接smtp服务器
    29         s.login(fromaddr,password)  #登录邮箱
    30         s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件
    31         print "mail sent to %s succeed!" % (toaddrs)
    32         s.quit()
    33     except Exception,e:
    34        print "Error: unable to send email to %s!" % (toaddrs)
    35        print traceback.format_exc()
    36  
    37 if __name__ == '__main__':
    38     fromaddr = "453912112@qq.com"
    39     smtpaddr = "smtp.qq.com"
    40     subject = "Robio2018"
    41     password = "svwpwgunhrbpbjha"
    42     file_object = open('letter')
    43     msg = file_object.read()
    44     file_object.close()
    45     for toaddrs in open("namelist"):
    46         prof = toaddrs
    47         sendmail(subject,msg,prof,fromaddr,smtpaddr,password)

    代码解读:

    • import email
      import smtplib

      SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件HTML邮件以及带附件的邮件。Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

    • def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

      最核心的代码就是该函数,正确填写该函数的实参、设置邮箱允许第三方操作。

    • mail_msg['To'] = toaddrs              # 单个收件人
      #mail_msg['To'] = ",".join(toaddrs)   # 多个收件人

      第22和23行,若每次只给一个收件人发邮件,则使用第22行代码;若一次性给多个收件人群发邮件,则使用第23行代码。

    • mail_msg.attach(MIMEText(msg, 'plain', 'utf-8'))

      第23行,第一个参数是邮件正文内容;第二个参数 'plain' ,因为我们发送的是纯文本的邮件;第三个参数保证多语言的兼容性。关于发送多种类型的邮件,可以参考廖雪峰老师的教程

    • file_object = open('letter')
      msg = file_object.read()
      file_object.close()

      代码42-44,打开与脚本处于同一个路径中的letter文档,读取全部内容并存储于一个大型的msg字符串中,及时关闭该文档,不然会一直占用内存。如果每次都要手动关闭比较麻烦,python有一个with 关键字可以自动关闭文档,请自行百度。

    • for toaddrs in open("namelist")

      第45行,使用一个for循环逐行从收件人邮箱列表中读取收件人邮箱。

  • 相关阅读:
    括号匹配
    超级阶梯问题
    进制问题
    rwkj 1423
    next_permutation
    rwkj 1420
    uva-10392-因数分解
    uva-10305-水题-拓扑排序
    uva-10194-排序
    uva-10152-乌龟排序
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/9259639.html
Copyright © 2011-2022 走看看