今天习得用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循环逐行从收件人邮箱列表中读取收件人邮箱。

【python】脚本连续发送QQ邮件的更多相关文章

  1. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

  2. CI框架使用PHPmail插件发送QQ邮件:

    有助请顶,不好请评.0:33 2016/3/12CI框架使用PHPmail插件发送QQ邮件:发送成功,不过修改了主机参数,还包含了一个phpmail中的一个另外的文件,详见下方:参见:http://c ...

  3. 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明

    13:40 2015/11/20 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明 关键点:现在qq邮箱开通smtp服务后会给你一个很长的独立新密码,发邮件配置中的密码需要 ...

  4. Java发送QQ邮件

    面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop ...

  5. java mail Received fatal alert: handshake_failure java 无法发送邮件问题 java 发送qq邮件(含源码)

     java 无法发送邮件问题 java 发送qq邮件 报错:java mail Received fatal alert: handshake_failure (使用ssl) javax.mail.M ...

  6. Quartz.NET浅谈一 : 简单Job使用(定时发送QQ邮件)

    Quartz.NET是一个全功能的开源作业调度系统,可用于从最小的应用程序到大型企业系统. 直接上代码吧... 一.新建一个控制台项目 略过 二.安装Nuget包 三.创建发送邮箱辅助工具类 stat ...

  7. 电子邮件协议及GO发送QQ邮件

    目录 一.电子邮件的工作机制 1.1 SMTP 1.2 POP3 1.3 IMAP 二.邮件地址 三.MIME信息 四.使用golang发送qq邮件 一.电子邮件的工作机制 提供电子邮件服务的协议叫做 ...

  8. 使用python发送QQ邮件

    这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText ...

  9. 九、Python发送QQ邮件(SMTP)

    看了廖雪峰老师的教程: 一封电子邮件的旅程就是 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人 ...

随机推荐

  1. 机器学习 之KNN近邻法

    目录 1.KNN近邻法 1.KNN近邻法 KNN模型由三个基本要素决定: 距离度量:其中欧式距离一般误差最小,\(x_{i} 和 x_{j}\)为两个样本点:\[L_{2}(x_{i}, x_{j}) ...

  2. oracle导出大数据

    Sqluldr是什么:是一个oracle数据导出小工具. Sqluldr作用介绍:Sqluldr可以快速导出oracle数据库中的数据.该小工具可以将数据库中的数据,导出多种不同的格式(如.txt.. ...

  3. python报错函数传参数传多了

    写python的时候报错: Exception : Traceback (most recent call last): File , in __bootstrap_inner self.run() ...

  4. 【Sql】经典sql语句

    参考网页:https://www.cnblogs.com/qixuejia/p/3637735.html 1./**查询课程1比课程2,成绩高的学生学号1.分析这些元素都在一个表里,但是上下两条记录, ...

  5. java使用valueOf的方法反转字符串输出

    public class FanZhuan { public static void main(String[] args) { String s = "987654321088123abo ...

  6. mySQL explain解释

    1).id列 数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A:simpl ...

  7. maven win 安装 与 IntelliJ IDEA 配置Maven【2018-11-14最新最有姿势攻略】

    [博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] http ...

  8. Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知

    1.activity_main.xml 描述: 定义了一个TextView和三个按钮 <?xml version="1.0" encoding="utf-8&quo ...

  9. More is better

    题目描述: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the ...

  10. ssh+key

    一.ssh概述 在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输.确保了传递的数据安全. lrzsz安装包传输本地与Linux SSH客户端(ssh命令)还包含一 ...