网络编程
位置:首页>> 网络编程>> Python编程>> python 发送邮件的示例代码(Python2/3都可以直接使用)

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

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

标签:python,发送,邮件

发送普通邮件

发送文本和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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com