python 邮件模块_python使用电子邮件模块smtplib

Smptp类定义:smtplib.SMTP(host[,port[,local_hostname[,,timeout]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登陆,校验,发送,退出等。host参数为远程smtp主机地址,比如stmp.163.com;port为连接端口,默认为25;local_hostname的作用是在本地的FQDN(完整的域名)发送HELO/EHLO指令,timeout为连接或尝试在多数秒超时,SMTP类具有如下方法:SMTP.connect([host[,port]])方法,连接远程smtp主机方法,host为远程主机地址,port为远程主机smtp端口,默认25,也可以直接使用host:port形式表示,例如:SMTP.connect("smtp.163.com","25').

SMTP.login(user,password)方法,远程smtp主机的校验方法,参数为用户名与密码,如SMTP.login("18801457794@139.com",'123456').

SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法,实现邮件的发送功能,参数依次为发件人,收件人,邮件内容,例如:SMTP.sendmail("python@163.com",'404408853@qq.com',body),其中body内容定义如下:

"""From:python@163.com

To:404408853@qq.com

Subject:test mail

test mail body"""

SMTP.starttls([keyfile[,certfile]])方法,启用TLS(安全传输)模式,所有SMTP指令都讲加密传输,例如使用gmail的stmp服务器时需要启动此项才能正常发送邮件

SMTP.quit()方法,端口smtp服务器的连接

下面通过实例列子来了解python是怎么发送邮件[root@localhost smtplib]# cat simple1.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import smtplib

import string

HOST = "smtp.139.com" #定义smtp主机

SUBJECT = "test" #定义邮件主题

TO = "404408853@qq.com" #定义邮件收件人

FROM = "18801457794@139.com" #定义邮件发件人

text = "python test mail" #邮件的内容

BODY=string.join(( #组装sendmail方法的邮件主体内容,各段以"\r\n"进行分隔

"From:%s" %FROM,

"To:%s" %TO,

"Subject:%s"%SUBJECT,

"",

text

),"\r\n")

server = smtplib.SMTP() #创建一个SMTP对象

server.connect(HOST,"25") #通过connect方法连接smtp主机

server.starttls() #启动安全传输模式

server.login("18801457794@139.com","123456") #邮件账户登录校验

server.sendmail(FROM,TO,BODY) #邮件发送

server.quit() #断开smtp连接

执行这段代码,我们将受到一封邮件

实现HTML格式的数据报表邮件

纯文本的邮件内容已经不能满足我们多样化的需求,本示例通过引入email.mime的MIMETex类来实现支持HTML格式的邮件,支持所有HTML元素,包含表格,图片,动画,CSS样式,表单等。本示例使用HTML的表格定制完美的业务流量报表,实现代码如下:#!/usr/bin/env python

#coding:utf-8

import smtplib

from email.mime.text import MIMEText #导入MIMEText类

HOST = "smtp.139.com"

SUBJECT = u"官网流量数据报表"

TO = "404408853@qq.com"

FROM = "18801457794@139.com"

msg = MIMEText("""

*官网数据更多

1)日访问量:152433访问次数:23651 页面浏览量:45123 点击数:545122 数据流量:504Mb

2)状态码消息

  500:105 404;3264 503;214

3)访客浏览器信息

  IE:50% firefox:10% chrome:30% other:10%

4)页面信息

  /index.php 42153

  /view.php 21451

""","html","utf-8")

msg['Subject'] = SUBJECT

msg['FROM'] = FROM

msg['To'] = TO

try:

server = smtplib.SMTP()

server.connect(HOST,'25')

server.starttls()

server.login('18801457794@139.com','123456')

server.sendmail(FROM,TO,msg.as_string())

server.quit()

print "邮件发送成功"

except Exception,e:

print "失败:" + str(e)

运行代码结果如图,

示例2:实现图文格式的服务器性能报表邮件

当要求包含图片数据的邮件内容时,需要引用MIMEImage类,若邮件主体由多个MIME对象组成,则同时需要引用MIMEMultipart类来进行封装。本示例通过MIMEText与MIMEImage类的组合来实现图文格式的服务器性能报表邮件的定制,实现代码如下#!/usr/bin/env python

#coding: utf-8

import smtplib,string

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.mime.p_w_picpath import MIMEImage

HOST ="smtp.139.com" #定义smtp主机

SUBJECT = "金美美平台系统状态报表" #定义邮件主题

TO = "404408853@qq.com,302803690@qq.com" #定义邮件收件人

FROM = "18801457794@139.com" #定义邮件发件人

TO_list = TO.split(TO)

def addimg(src,imgid): #添加图片函数,参数1:图片路径,参数2:图片ID

fp = open(src,'rb') #打开文件

msgImage = MIMEImage(fp.read()) #创建MIMEImage对象,读取图片内容并作为参数

fp.close() #关闭文件

    msgImage.add_header('Content-ID',imgid) #指定图片文件的Content-ID,标签src用到

return msgImage #返回msgImage对象

msg = MIMEMultipart('related') #创建MIMEMultipart对象,采用related定义内嵌资源的邮件体

msgtext = MIMEText("""

以下是211.157.111.41系统状态图

    

    

    

    

""","html","utf-8") # 标签的src属性是通过Content-ID来引用的

msg.attach(msgtext) #MIMEMultipart对象附加MIMEText的内容

msg.attach(addimg("img/bytes_io.png","io")) #使用MIMEMultipart对象附加MIMEImage的内容

msg.attach(addimg("img/os_load.png","load"))

msg.attach(addimg("img/os_mem.png","mem"))

msg.attach(addimg("img/os_disk.png","disk"))

msg['Subject'] = SUBJECT

msg['FROM']=FROM

msg['To'] = TO

try:

server = smtplib.SMTP()

server.connect(HOST,"25")

server.starttls()

server.login('18801457794@139.com','123456')

server.sendmail(FROM,TO_list,msg.as_string())

server.quit()

print "邮件发送成功!"

except Exception,e:

print "失败:"+ str(e)

代码运行效果如图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您使用Pythonsmtplib模块发送邮件时,可能会遇到以下错误之一: - smtplib.SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials ') - smtplib.SMTPServerDisconnected: Connection unexpectedly closed - smtplib.SMTPSenderRefused: (501, b'5.5.4 Invalid Address ') - smtplib.SMTPRecipientsRefused: {'recipient@example.com': (550, '5.1.1 The email account that you tried to reach does not exist. Please try\n5.1.1 double-checking the recipient\'s email address for typos or\n5.1.1 unnecessary spaces. Learn more at\n5.1.1 https://support.google.com/mail/?p=NoSuchUser ') 这些错误通常表示您的SMTP服务器拒绝了您的请求。这可能是由于以下原因之一: 1. 您提供的用户名和密码不正确:请确保您的用户名和密码正确,并且您已经启用了SMTP服务。如果您使用的是Google Mail,您需要在Google账户的安全选项中允许低安全性应用程序访问您的帐户。 2. 您的IP地址被SMTP服务器阻止:如果您在短时间内多次尝试发送电子邮件SMTP服务器可能会阻止您的IP地址。请等待一段时间后再尝试发送电子邮件。 3. 您提供的发送者或收件人地址无效:请确保您提供的发送者和收件人地址是有效的,并且符合SMTP服务器的要求。 如果您仍然无法解决此问题,请尝试使用其他SMTP服务器或与您的SMTP服务器管理员联系以获取更多帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值