男的做直播哪个网站,永久链接生成器,有没有专门做京东天猫的人才网站,做网站和网页利用python实现基本的邮件发送。
感谢以下博客的整理#xff0c;本人在学习的同时也做了一些整理
一、相关模块介绍
发送邮件主要用到了smtplib和email两个模块#xff0c;这里首先就两个模块进行一下简单的介绍#xff1a;
1、smtplib模块
smtplib.SMTP([host[, port[, loc…利用python实现基本的邮件发送。
感谢以下博客的整理本人在学习的同时也做了一些整理
一、相关模块介绍
发送邮件主要用到了smtplib和email两个模块这里首先就两个模块进行一下简单的介绍
1、smtplib模块
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
SMTP类构造函数表示与SMTP服务器之间的连接通过这个连接可以向smtp服务器发送指令执行相关操作如登陆、发送邮件。所有参数都是可选的。
hostsmtp服务器主机名
portsmtp服务的端口默认是25如果在创建SMTP对象的时候提供了这两个参数在初始化的时候会自动调用connect方法去连接服务器。
smtplib模块还提供了SMTP_SSL类和LMTP类对它们的操作与SMTP基本一致。
smtplib.SMTP提供的方法
SMTP.set_debuglevel(level)设置是否为调试模式。默认为False即非调试模式表示不输出任何调试信息。
SMTP.connect([host[, port]])连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号如smpt.yeah.net:25这样就没必要给出port参数。
SMTP.docmd(cmd[, argstring])向smtp服务器发送指令。可选参数argstring表示指令的参数。
SMTP.helo([hostname]) 使用helo指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。
SMTP.has_extn(name)判断指定名称在服务器邮件列表中是否存在。出于安全考虑smtp服务器往往屏蔽了该指令。
SMTP.verify(address) 判断指定邮件地址是否在服务器中存在。出于安全考虑smtp服务器往往屏蔽了该指令。
SMTP.login(user, password) 登陆到smtp服务器。现在几乎所有的smtp服务器都必须在验证用户信息合法之后才允许发送邮件。
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) 发送邮件。这里要注意一下第三个参数msg是字符串表示邮件。我们知道邮件一般由标题发信人收件人邮件内容附件等构成发送邮件的时候要注意msg的格式。这个格式就是smtp协议中定义的格式。
SMTP.quit()断开与smtp服务器的连接相当于发送quit指令。也有用到smtp.close()
使用smtplib库发送邮件的基本步骤
#连接到SMTP服务器参数表示SMTP主机和端口端口默认25
SMTP.connect([host[,port]]) #也可以不显式链接SMTP(host)
#登录SMTP服务器
SMTP.login(user,password)
#发送邮件。.as_string()是字符串表示邮件内容to_addrs是收件人list
SMTP.sendmail(from_addr, to_addrs, msg.as_string())
#断开连接
SMTP.close() #也有用SMTP.quit()
2、email模块
Email库用来处理邮件消息。包括MIME和基于RFC2822的消息文档。
有关MIME的一些知识
RFC2822定义的邮件格式中邮件体只是单纯的ASCII编码的字符序列MIME扩展邮件的格式用以支持非ASCII编码的文本、非文本附件及包含多个部分multi-part的邮件体。
MIME消息由消息头、消息体组成即邮件的邮件头、邮件体。中间以空行进行分隔。
1、邮件头包括发件人(from)、收件人(to)、邮件主题(subject)、接收日期(date)、MIME版本、邮件内容类型等信息。每条信息称为一个域由域名后加“:”和信息内容构成域的首行必须顶头写。
2、邮件体有text/plain(纯文本)和text/html(超文本)之分由邮件头的“content type”域指出。可以同时存在也可以只存在一种。这就是为什么有些邮件既可以用html格式查看又可以用文本格式查看的原因。邮件体分为多个段称为Payload。每个段也包括段头段尾中间以空行分隔。multipart类型有3种multipart/mixed multipart/related multipart/alternative。邮件里添加附件要定义multipart/mixed段如果纯文本超文本共存则要定义multipart/alternative如存在内嵌资源要定义multipart/related。
3、附件(attach)。发送邮件时可以将本机的文件一起发送。附件可以有0个或多个只要附件的总大小不超过邮件服务器所声明的最大容量。 4、
包括的类主要有更加详细的介绍可见
http://docs.python.org/library/email.mime.html
class email.mime.text.MIMEText(_text[, _subtype[, _charset]])
用于生成MIME对象的主体文本_text指定邮件内容_subtype指定邮件类型_charset指定编码。
class email.mime.multipart.MIMEMultipart()
用于生成包含多个部分的邮件体的MIME对象
class email.mime.base.MIMEBase(_maintype, _subtype, **_params)
这是MIME的一个基类。一般不需要在使用时创建实例。其中_maintype是内容类型如text或者image。_subtype是内容的minor type 类型如plain或者gif。 **_params是一个字典直接传递给Message.add_header()。
class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]
MIMEBase的一个子类多个MIME对象的集合_subtype默认值为mixed。boundary是MIMEMultipart的边界默认边界是可数的。
class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])
MIMEMultipart的一个子类。
class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])
MIME音频对象
class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])
MIME二进制文件对象。
class email.mime.message.MIMEMessage(_msg[, _subtype])
具体的一个message实例使用方法如下
msgmail.Message.Message() #一个实例
msg[to]XXXXXX.com #发送到哪里
msg[from]YYYYYY.com #自己的邮件地址
msg[date]2013-5-25 #时间日期
msg[subject]hello python #邮件主题
class email.mime.text.MIMEText(_text[, _subtype[, _charset]])
MIME文本对象其中_text是邮件内容_subtype邮件类型可以是text/plain普通文本邮件html/plain(html邮件), _charset编码可以是gb2312等等。
三、几种邮件的具体实现代码
1.普通文本和html邮件的发送
普通文本邮件发送的实现关键是要将MIMEText中_subtype设置为plain。首先导入smtplib和mimetext。创建smtplib.smtp实例connect邮件smtp服务器login后发送.
html信息发送和普通文本一样conten内容变为html信息并将_subtype设置为html。
具体代码如下(python 2.7)
#import getpass #如果需要交互获取密码
#pwd_input getpass.getpass(Password:)
import time
import smtplib
import email.utils
from email.mime.text import MIMEText
#Initialize mail information
#mailto_list [XXX163.com,YYYqq.com]
mail_host smtp.163.com #设置网易163服务器
mail_user ZZZ #用户名
mail_pass ********* #口令
mail_postfix 163.com #发件箱后缀
mail_from .join([mail_user,mail_postfix]) #收件箱
#Create the message
#html信息
#content Dyllian使用程序给你发了个链接
#msg MIMEText(content,_subtypehtml,_charsetutf8)
#普通文本
content Hello dyllian
msg MIMEText(content,_subtypeplain,_charsetutf8)
msg[From] email.utils.formataddr((Author,mail_from)) #str type
msg[To] email.utils.formataddr((Recipient,mailto_list)) #mail to list
msg[Subject] Test from python!
msg[date]time.strftime(%a, %d %b %Y %H:%M:%S %z)#定义发送时间不定义的可能有的邮件客户端会不显示发送时间
#msg.preamble This is a common message in MIME format.
#Send mail to list recipient
try:
server smtplib.SMTP(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(mail_from,mailto_list,msg.as_string()) #mail to list recipient
except Exception,e: #try中有异常则执行
print Mail passed unsuccessfully!\n,str(e)
else: #try中没有异常则执行
print Mail passed successfully!
finally: #try中有无异常都执行
server.close()
2.带附件的邮件发送(附件图片附件一般文件)
import os
import time
import smtplib
import email.utils
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
#Get local path
path os.path.dirname(__file__)
#Initialize mail infomation
#mailto_list [XXX163.com,YYYqq.com]
mailto_list [XXX163.com]
mail_host smtp.163.com #设置服务器
mail_user ZZZ #用户名
mail_pass ****** #口令
mail_postfix 163.com #发件箱后缀
mail_from .join([mail_user,mail_postfix]) #收件箱
#构建一个带附件的实例
msg MIMEMultipart()
#用MIMEImage附件图片
fp open(path\\ning1.jpg, rb)
msgImage MIMEImage(fp.read())
fp.close()
msgImage.add_header(Content-ID, )
msg.attach(msgImage)
#构造附件1图片
att1 MIMEText(open(path\\ning1.jpg,rb).read(),_subtypebase64,_charsetutf8)
att1[Content-Type] application/octet-stream
att1[Content-Disposition] attachment; filenameningning1.jpg #这里的filename可以随便取写什么名字邮件中显示什么名字
msg.attach(att1)
#构造附件2文件
att2 MIMEText(open(path\\ning2.txt,rb).read(),_subtypebase64,_charsetutf8)
att2[Content-Type] application/octet-stream
att2[Content-Disposition] attachment; filenametest2.txt
msg.attach(att2)
#加邮件头
msg[From] email.utils.formataddr((Author,mail_from)) #str type
msg[To] email.utils.formataddr((Recipient,mailto_list)) #mail to list
msg[Subject] Test from python!
msg[date]time.strftime(%a, %d %b %Y %H:%M:%S %z)#定义发送时间不定义的可能有的邮件客户端会不显示发送时间
#msg.preamble This is a multi-part message in MIME format.
#Send mail to list recipient
try:
server smtplib.SMTP(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(mail_from,mailto_list,msg.as_string()) #mail to list recipient
except Exception,e: #try中有异常则执行
print Mail passed unsuccessfully!\n,str(e)
else: #try中没有异常则执行
print Mail passed successfully!
finally: #try中有无异常都执行
server.close()
四遇到的问题
希望在邮件正文中显式图片信息思路是用html属性发送查了几个资料遇到了同样的问题
1.如果做以下处理结果还是以附件的形式发送图片
#构建一个带附件的实例
msg MIMEMultipart(ralated)
#用MIMEImage附件图片
fp open(path\\ning1.jpg, rb)
msgImage MIMEImage(fp.read())
fp.close()
msgImage.add_header(Content-ID, )
msg.attach(msgImage)
2.如果做以下的处理结果有编译错误
import os
import smtplib
import email.utils
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
#Get local path
path os.path.dirname(__file__)
#Initialize mail infomation
mailto_list [XXX163.com]
mail_host smtp.163.com #设置服务器
mail_user YYY #用户名
mail_pass ****** #口令
mail_postfix 163.com #发件箱后缀
mail_from .join([mail_user,mail_postfix]) #收件箱
#构建一个带附件的实例
msg MIMEMultipart(ralated)
#html附带图片正文
msgAlternative MIMEMultipart(alternative)
msg.attach(msgAlternative)
html 本邮件,正文中显示图片
htmlText MIMEText(html,_subtypehtml,_charsetutf8)
msgAlternative.attach(htmlText)
#内置图片
fp open(path\\ning1.jpg,rb)
msgImage MIMEImage(fp.read())
fp.close()
msgImage.add_header(Content-ID,)
msg.attach(msgImage)
#加邮件头
msg[From] email.utils.formataddr((Author,mail_from)) #str type
msg[To] email.utils.formataddr((Recipient,mailto_list)) #mail to list
msg[Subject] Test from python!
msg.preamble This is a multi-part message in MIME format.
#Send mail to list recipient
try:
server smtplib.SMTP(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(mail_from,mailto_list,msg.as_string()) #mail to list recipient
except Exception,e: #try中有异常则执行
print Mail passed unsuccessfully!\n,str(e)
else: #try中没有异常则执行
print Mail passed successfully!
finally: #try中有无异常都执行
server.close()
编译结果
Mail passed unsuccessfully!
(554, DT:SPM smtp11, D8CowEDp5XJrPKBR0ATQBg--.765S2 1369455724 http://mail.163.com/help/help_spam_16.htm?ip61.150.43.98hostidsmtp11time1369455724)
不知道哪里出了错哪位可能提供思路解决谢谢