您的位置:首页 > 编程语言 > Python开发

Python 发送邮件

2015-06-21 10:53 495 查看
几种邮件的具体实施代码

1、普通文本邮件

普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain。首先导入smtplib和mimetext。创建smtplib.smtp实例,connect邮件smtp服务器,login后发送。

#coding: utf-8
'''
发送txt文本邮件
'''
import smtplib
from email.mime.text import MIMEText

mailto_list = ['xxxxxx@qq.com']
mail_host = "smtp.126.com"
mail_user = "xxxx"
mail_pass = "xxxx"
mail_postfix = "126.com"

def send_mail(to_list, sub, content):
me = "hello"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, _subtype='plain', _charset='gb2312')
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

if __name__=='__main__':
if send_mail(mailto_list, "hello", "hello world!"):
print "发送成功"
else:
print "发送失败"


2、html邮件的发送

与text邮件不同之处就是将将MIMEText中_subtype设置为html

#coding: utf-8
'''
发送html文本邮件
'''
import smtplib
from email.mime.text import MIMEText

mailto_list = ['xxxxxx@qq.com']
mail_host = "smtp.126.com"         #设置服务器
mail_user = "xxxx"     #设置用户名
mail_pass = "xxxx"      #口令
mail_postfix = "126.com"           #发件邮箱后缀

def send_mail(to_list, sub, content):  #to_list: 收件人; sub: 主题; content: 邮件内容
me = "hello"+"<"+mail_user+"@"+mail_postfix+">" #此处的hello可以任意设置,收到邮件后,按照设置显示
msg = MIMEText(content, _subtype='html', _charset='gb2312')  #创建一个实例,这里设置为html格式邮件
msg['Subject'] = sub  #设置主题
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)   #连接smtp服务器
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

if __name__=='__main__':
if send_mail(mailto_list, "hello", "<a href='http://www.baidu.com'> baidu </a>"):
print "发送成功"
else:
print "发送失败"


3、带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送

# -*- coding: cp936 -*-
'''
发送带附件邮件
'''

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

#创建一个带附件的实例
msg = MIMEMultipart()

#构造附件1
att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)

#构造附件2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123.txt"'
msg.attach(att2)

#加邮件头
msg['to'] = 'YYY@YYY.com'
msg['from'] = 'XXX@XXX.com'
msg['subject'] = 'hello world'
#发送邮件
try:
server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.quit()
print '发送成功'
except Exception, e:
print str(e)


4、利用MIMEimage发送图片

# -*- coding: cp936 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

def AutoSendMail():
msg = MIMEMultipart()
msg['From'] = "XXX@XXX.com"
msg['To'] = "YYY@YYY.com"
msg['Subject'] = "hello world"

txt = MIMEText("这是中文的邮件内容哦",'plain','gb2312')
msg.attach(txt)

file1 = "C:\\hello.jpg"
image = MIMEImage(open(file1,'rb').read())
image.add_header('Content-ID','<image1>')
msg.attach(image)

server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXXX')
server.sendmail(msg['From'],msg['To'],msg.as_string())
server.quit()

if __name__ == "__main__":
AutoSendMail()


html中添加<Img src='cid:hello.jpg'>,图片不会出现附件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: