请问如何用python将某个邮箱未读邮件全部转发到另一个邮箱?

Python013

请问如何用python将某个邮箱未读邮件全部转发到另一个邮箱?,第1张

首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。

本文主要介绍利用'smtplib','email'两个模块来实现邮件的发送,可以如下查看两个模块的函数和方法:

smtplib模块简介:

smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

  此为SMTP类构造函数,表示与SMTP服务器之间的连接,并根据这个连接向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件),且每个参数都是可选的。

其中最重要的参数:

host:smtp服务器主机名

port:smtp服务的端口,默认是25;

如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。

smtplib.SMTP还提供了如下方法:

SMTP.set_debuglevel(level):设置是否为调试模式

SMTP.connect([host[, port]]):连接到指定的smtp服务器。参数分别表示 smpt主机和端口。

SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。

SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。

SMTP.login(user, password):登陆到smtp服务器。现在几乎所有smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。(重要!)

SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options]):发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。SMTP.quit() :断开与smtp服务器的连接,相当于发送"quit"指令。(重要!)

常用的函数方法:

email模块

1.class email.message.Message

__getitem__,__setitem__实现obj[key]形式的访问。

Msg.attach(playload): 向当前Msg添加playload。

Msg.set_playload(playload):

Msg.add_header(_name, _value, **_params): 添加邮件头字段。

2.class email.mime.base.MIMEBase(_maintype, _subtype, **_params)

所有MIME类的基类,是email.message.Message类的子类。

3.class email.mime.multipart.MIMEMultipart()

在3.0版本的email模块 (Python 2.3-Python 2.5) 中,这个类位于email.MIMEMultipart.MIMEMultipart。这个类是MIMEBase的直接子类,用来生成包含多个部分的邮件体的MIME对象。

4.class email.mime.text.MIMEText(_text)

使用字符串_text来生成MIME对象的主体文本。

获得所需要使用的邮箱的host地址和port端口号,(本文使用的是163邮箱,对应的smtp服务器地址:mail.163.com,端口号25)

常用邮箱的smtp服务器地址和端口号如图:

编写程序如下:

#! /usr/bin/env python

import smtpli

from email.mime.text import MIMEText

mailto_list=['[email protected]'] #收件人(列表)

mail_host="smtp.163.com"#使用的邮箱的smtp服务器地址

mail_user="name" #用户名

mail_pass="pwd" #密码

mail_postfix="postfix" #邮箱的后缀

def send_mail(to_list,sub,content):

me="hello"+"<"+mail_user+"@"+mail_postfix+">"

msg = MIMEText(content,_subtype='plain')

msg['Subject'] = sub

msg['From'] = me

msg['To'] = "".join(to_list)#将收件人列表以‘;’分隔

try:

server = smtplib.SMTP()

server.connect(mail_host)#连接服务器

server.login(mail_user,mail_pass) #登录操作

server.sendmail(me, to_list, msg.as_string())

server.close()

return True

except Exception, e:

print str(e)

return False

for i in range(5): #发送五封,不过会被拦截的。。。

if send_mail(mailto_list,"hello","haha!"): #邮件主题和邮件内容

print "done!"

else:

print "failed!"

最后,可以运行编写的py文件,可以得到如图所是的结果,代表邮件发送成功。

这样,就能成功实现用Python发送邮件啦!

由于运维工作需要,经常需要将一些数据从数据库中导出,发送给运营和需求部门,天天去手动查询,又有点太费时间了,于是研究学习了Python的基本功能,通过Python脚本和Linux 的crontab命令实现了每天自动化的数据查询和邮件发送。

定义了以下几个代码模块实现了配置文件读取、日志记录、数据库连接访问查询、导出到xlsx和带附件的邮件发送功能。

1、demo.py 示例文件

2、config.yml 配置文件

3、common_log.py 实现日志记录

4、common_db.py 实现数据库连接和访问

5、common_xlsx.py 实现数据表格的处理

6、common_email.py 实现带附件的邮件发送

准备工作:安装第三方包,yagmail和keyring

安装完成后,打开命令提示符窗口(我用的是win)。输入python回车,输入import yagmail回车,输入yagmail.register('你的邮箱地址','邮箱密码或邮箱安全码')回车。没有报错后,就可以开始编写python脚本了。

直接上脚本:

import yagmail

smtp_server=yagmail.SMTP(user='[email protected]',host='smtp.qq.com')

#host 需要你到邮箱首页帮助中心找一下,一般都是smtp.xxxx.com

contents=['邮件正文内容,可以逗号分开多写几行,也可以用转行符号!']

smtp_server.send('[email protected]','邮件主题描述',contents)

# [email protected]收件邮箱地址,可以设置成一样的,测试一下自己能收到不。

执行上面的脚本,基本上就可以收到邮件了。不要执行多次,太频繁,容易被服务器拦截,最后可能会被封号。

另外 contents 里可以写html,也可以放附件,附件的话直接写个本机文件路径即可。