基于Python实现邮件发送

by:授客 QQ:1033553122

测试环境:

Python版本:Python 2.7

注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分享连接获取),否则会报错,类似如下

mimetypes.guess_type 'ascii' codec can't decode byte 0xb0 in position 1: ord

实现功能:

邮件发送,支持文字,音频文件,文本文件,图形文件,应用程序及其它类型文件的发送;

支持不同的邮箱;

支持一次性往多个邮箱发送;

支持一次性发送n个附件;

支持中文命名的附件发送;

效果:

mail.conf配置:

[SMTP]

login_user = laiyuhenshuai@163.com

login_pwd = xxxxx

from_addr =laiyuhenshuai@163.com

to_addrs = ['mrxxx@163.com','1033553122@qq.com']

host = smtp.163.com

port = 25

说明:不同类型的邮箱(发件人邮箱),需要修改配置文件为对应的host和端口

smtp.163.com:25

smtp.qq.com:465

实践代码:

#!/usr/bin/env python

# -*- coding:GBK -*-

__author__ ='shouke'

importConfigParser

importsmtplib

fromemail.mime.multipartimportMIMEMultipart

fromemail.mime.textimportMIMEText

fromemail.mime.imageimportMIMEImage

fromemail.mime.audioimportMIMEAudio

fromemail.mime.applicationimportMIMEApplication

importmimetypes

importos

classMyMail:

def__init__(self, mail_config_file):

config = ConfigParser.ConfigParser()

config.read(mail_config_file)

self.smtp = smtplib.SMTP()

self.login_user = config.get('SMTP','login_user')

self.login_pwd = config.get('SMTP','login_pwd')

self.from_addr = config.get('SMTP','from_addr')

self.to_addrs = config.get('SMTP','to_addrs')

self.host = config.get('SMTP','host')

self.port = config.get('SMTP','port')

#连接到服务器

defconnect(self):

self.smtp.connect(self.host,self.port)

#登陆邮件服务器

deflogin(self):

try:

self.smtp.login(self.login_user,self.login_pwd)

exceptException ase:

print('%s'% e)

#发送邮件

defsend_mail(self, mail_subject, mail_content, attachment_path_set):

#构造MIMEMultipart对象做为根容器

msg = MIMEMultipart()

msg['From'] =self.from_addr

# msg['To'] = self.to_addrsmsg['To'] = ','.join(eval_r(self.to_addrs))

msg['Subject'] = mail_subject

#添加邮件内容

content = MIMEText(mail_content,_charset='gbk')

msg.attach(content)

forattachment_pathinattachment_path_set:

ifos.path.isfile(attachment_path):#如果附件存在

type, coding = mimetypes.guess_type(attachment_path)

iftype ==None:

type ='application/octet-stream'

major_type, minor_type = type.split('/',1)

withopen(attachment_path,'rb')asfile:

ifmajor_type =='text':

attachment = MIMEText(file.read(),_subtype=minor_type)

elifmajor_type =='image':

attachment = MIMEImage(file.read(),_subtype=minor_type)

elifmajor_type =='application':

attachment = MIMEApplication(file.read(),_subtype=minor_type)

elifmajor_type =='audio':

attachment = MIMEAudio(file.read(),_subtype=minor_type)

#修改附件名称

attachment_name = os.path.basename(attachment_path)

attachment.add_header('Content-Disposition','attachment',filename= ('gbk','', attachment_name))

msg.attach(attachment)

#得到格式化后的完整文本

full_text = msg.as_string()

#发送邮件

self.smtp.sendmail(self.from_addr, eval_r(self.to_addrs), full_text)

#退出

defquit(self):

self.smtp.quit()

if__name__ =='__main__':

mymail = MyMail('./mail.conf')

mymail.connect()

mymail.login()

mail_content ='hello,亲,这是一封测试邮件,收到请回复^^ 2014'

mymail.send_mail('邮件标题--亲,收到一份邮件,请及时查收', mail_content, {'d:\\shouke.csv','d:\\2345haoya_3.1.1.9229.exe',

'd:\\shouke.ini','d:\\shouke.ini','d:\\test.mp3','d:\\test.png','d:\\report20150507204645.html',

'd:\\1 -副本.sql'})

mymail.quit()

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐