【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 smtplibSMTP是发送邮件的协议,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邮件的更多相关文章
- python3:利用SMTP协议发送QQ邮件+附件
转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...
- CI框架使用PHPmail插件发送QQ邮件:
有助请顶,不好请评.0:33 2016/3/12CI框架使用PHPmail插件发送QQ邮件:发送成功,不过修改了主机参数,还包含了一个phpmail中的一个另外的文件,详见下方:参见:http://c ...
- 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明
13:40 2015/11/20 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明 关键点:现在qq邮箱开通smtp服务后会给你一个很长的独立新密码,发邮件配置中的密码需要 ...
- Java发送QQ邮件
面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop ...
- java mail Received fatal alert: handshake_failure java 无法发送邮件问题 java 发送qq邮件(含源码)
java 无法发送邮件问题 java 发送qq邮件 报错:java mail Received fatal alert: handshake_failure (使用ssl) javax.mail.M ...
- Quartz.NET浅谈一 : 简单Job使用(定时发送QQ邮件)
Quartz.NET是一个全功能的开源作业调度系统,可用于从最小的应用程序到大型企业系统. 直接上代码吧... 一.新建一个控制台项目 略过 二.安装Nuget包 三.创建发送邮箱辅助工具类 stat ...
- 电子邮件协议及GO发送QQ邮件
目录 一.电子邮件的工作机制 1.1 SMTP 1.2 POP3 1.3 IMAP 二.邮件地址 三.MIME信息 四.使用golang发送qq邮件 一.电子邮件的工作机制 提供电子邮件服务的协议叫做 ...
- 使用python发送QQ邮件
这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText ...
- 九、Python发送QQ邮件(SMTP)
看了廖雪峰老师的教程: 一封电子邮件的旅程就是 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人 ...
随机推荐
- 跟敲MySQL数据库实用教程
MySQL数据库操作 创建数据库 create database if not exists test; 查看数据库 show databases; show databases [ like wil ...
- js中提示框闪退问题
当页面存在刷新 或 在线引用iframe框架时(引用框架也会导致刷新) 会导致页面加载时的弹出框闪退 解决方法:设置弹出框在页面或者框架完全加载一段时间后再弹出 <script type=& ...
- 高并发情况下Linux系统及kernel参数优化
众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参数方面和IO事件分配机制等.下面就从几方面来调整使Linux系统能够支持高并发环境. Iptabl ...
- Win10系列:C#应用控件基础23
Telerik UI Controls for Windows 8 Telerik UI Controls for Windows 8是一套为创建Windows UWP应用而设计的工具集,开发人员可以 ...
- <airsim文档学习> Street View Image, Pose, and 3D Cities Dataset
原文地址: https://github.com/amir32002/3D_Street_View 说明:个人学习笔记,翻译整理自github/airsim. 简介 该存储库共享包含6DOF相机姿态 ...
- PHP_CodeSniffer 安装和phpstorm配置
安装 1.mac安装 sudo pear install PHP_CodeSniffer phpstorm配置 1. 点击菜单:File->Settings 或 按快捷键 Ctrl+Alt+S ...
- 在电脑中配置SQLServer数据源
要想其他软件(R.python等)能连接SQLServer数据库,必须在这些软件所在点电脑下配置相应的数据源(ODBC).我的电脑是在Windows下的,配置步骤如下: 1.控制面板-----> ...
- 一、fopen与fclose
需要包含的头文件为stdio.h fopen 原型:FILE *fopen(const char *path, const char *mode); 返回:打开成功则返回文件流指针,失败则返回空 参数 ...
- mod_fcgid FcgidMaxRequestLen 131072 问题
mod_fcgid: HTTP request length 136136 (so far) exceeds MaxRequestLen (131072) 原来是fastcgi模式下的设置问题,需 ...
- Java学习笔记42(数据库连接池 druid连接池)
druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...