python脚本连续发送QQ邮件

Posted cv_gordon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.attach(MIMEText(msg, plain, utf-8))
24     #mail_msg.attach(MIMEText(msg, ‘html‘, ‘utf-8‘))
25     try:
26         s = smtplib.SMTP()
27         s.connect(smtpaddr)  #连接smtp服务器
28         s.login(fromaddr,password)  #登录邮箱
29         s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件
30         print "mail sent to %s succeed!" % (toaddrs)
31         s.quit()
32     except Exception,e:
33        print "Error: unable to send email to %s!" % (toaddrs)
34        print traceback.format_exc()
35  
36 if __name__ == __main__:
37     fromaddr = "[email protected]"
38     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.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循环逐行从收件人邮箱列表中读取收件人邮箱。

 

以上是关于python脚本连续发送QQ邮件的主要内容,如果未能解决你的问题,请参考以下文章

Python发送QQ邮件

QQ邮件定时发送天气预报

python发送邮件脚本ssl 465端口

python QQ邮箱自动发送邮件

Python通过smtp服务发送电子邮件给指定用户(适用于Zabbix邮件报警)

python 发送QQ邮件的小例子