python 发送邮件的示例代码(Python2/3都可以直接使用)

作者:柯广 时间:2023-05-12 08:53:56 

发送普通邮件

发送文本和html普通邮件如下:


from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
 name, addr = parseaddr(s)
 return formataddr((Header(name, 'utf-8').encode(), addr))

def get_server(username):
 """
 通过邮箱地址获得邮箱服务器
 :param username:用户名,比如:123456@qq.com
 :return: 邮箱服务器地址,可以根据自己实际业务添加,比如:smtp.qq.com
 """
 servers = {'qq' : 'smtp.qq.com'
       , '126' : 'smtp.126.com'
       , '163' : 'smtp.163.com'
       , '139' : 'smtp.139.com'}

for key,value in servers.items():
   if key in username:
     return value

def send_mail(username, password, to, sender_name, subject, content, email_type):
 """
 :param username:
 :param password:
 :param to: 接收者列表 []
 :param sender_name:
 :param subject:
 :param content:
 :param email_type:
 :return:
 """
 from_addr = username
 password = password
 to_addr = to
 smtp_server = get_server(username)

# 邮件正文是MIMEText类型
 msg = MIMEText('%s'%(content), '%s'%(email_type), 'utf-8')
 msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
 msg['To'] = _format_addr('<%s>' % to_addr)
 msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

# 普通登陆端口是25,带ssl验证时候端口是465
 # smtp_server = 'smtp.exmail.qq.com'
 # server = smtplib.SMTP_SSL(smtp_server, 465)
 server = smtplib.SMTP(smtp_server, 25)
 server.set_debuglevel(1)
 server.login(from_addr, password)
 server.sendmail(from_addr, to_addr, msg.as_string())
 server.quit()

if __name__ == '__main__':
 """发送简单文本邮件"""
 username = '******@126.com'
 password = '******'
 sender_name = '******@126.com'
 subject = 'test 邮件'
 content = '<html><h1>ikeguang 的来信</h1></html> <a href="http://www.ikeguang.com" rel="external nofollow" >ikeguang.com</a></html>'
 # email_type 取值:plain,文本类型邮件;html,html类型邮件
 email_type = 'html'
 _to = ['******@126.com', '******@qq.com']
 for to in _to:
   send_mail(username, password, to, sender_name, subject, content, email_type)
   print('send mail to %s success' % to)

发送带附件的邮件


def send_mail_multipart(username, password, to, sender_name, subject, content, email_type):
 from_addr = username
 password = password
 to_addr = to
 smtp_server = get_server(username)

msg = MIMEMultipart()
 # 邮件正文是MIMEText类型
 msg.attach(MIMEText('%s'%(content), '%s'%(email_type), 'utf-8'))
 msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
 msg['To'] = _format_addr('<%s>' % to_addr)
 msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

# 读取附件
 filename = 'D:/我的文件/Codes/PyCode/source/image/0.jpg'
 with open(filename, 'rb') as f:
   # 设置附件的MIME和文件名,这里是png类型:
   mime = MIMEBase('image', 'jpg', filename='0.jpg')
   # 加上必要的头信息:
   mime.add_header('Content-Disposition', 'attachment', filename='0.jpg')
   mime.add_header('Content-ID', '<0>')
   mime.add_header('X-Attachment-Id', '0')
   # 把附件的内容读进来:
   mime.set_payload(f.read())
   # 用Base64编码:
   encoders.encode_base64(mime)
   # 添加到MIMEMultipart:
   msg.attach(mime)

# 普通登陆端口是25,带ssl验证时候端口是465
 # smtplib.SMTP_SSL(smtp_server, 465)
 server = smtplib.SMTP(smtp_server, 25)
 server.set_debuglevel(1)
 server.login(from_addr, password)
 server.sendmail(from_addr, [to_addr], msg.as_string())
 server.quit()

来源:http://www.ikeguang.com/?p=331

标签:python,发送,邮件
0
投稿

猜你喜欢

  • HTML5硝烟弥漫

    2009-07-06 14:44:00
  • 一文带你重温一下Python的对象模型

    2022-09-15 15:52:52
  • PHP手机号码归属地查询代码(API接口/mysql)

    2023-10-26 04:35:44
  • python 对excel交互工具的使用详情

    2021-11-25 19:10:06
  • JavaScript中document.forms[0]与getElementByName区别

    2024-04-17 09:55:58
  • MYSQL SET类型字段的SQL操作知识介绍

    2024-01-20 20:00:38
  • python绘制堆叠条形图介绍

    2021-07-01 23:12:36
  • MySQL的Query Cache图文详解

    2024-01-28 01:18:42
  • Mysql数据库高级用法之视图、事务、索引、自连接、用户管理实例分析

    2024-01-15 20:17:00
  • 常用原生JS兼容性写法汇总

    2024-04-22 22:38:15
  • 微信小程序点餐系统开发常见问题汇总

    2024-04-10 10:52:00
  • 用JS找出字符串中出现次数最多的字母

    2007-11-12 13:40:00
  • Ajax标签导航效果

    2013-07-17 02:02:16
  • 如何制作一个从Access数据库中读取记录的下拉菜单?

    2010-06-29 21:23:00
  • Python文本处理之按行处理大文件的方法

    2023-01-24 11:11:34
  • MySQL获得当前日期时间函数示例详解

    2024-01-27 07:54:48
  • 详解python开发环境搭建

    2023-09-17 21:37:25
  • Windows环境下实现批量执行Sql文件

    2024-01-14 14:12:40
  • Python蛇形方阵的实现

    2023-06-27 16:33:21
  • MySQL关键字Distinct的详细介绍

    2024-01-27 11:44:47
  • asp之家 网络编程 m.aspxhome.com