python 发送邮件

一、通过python发邮件步骤:
前提是:开通了第三方授权,可以使用smtp服务
1. 创建一个smtp对象
2. 连接smp服务器,默认端口都是25
3. 登录自己邮箱账号,
4. 调用发送消息函数,参数:发件人,收件人,消息内容
5. 关闭连接smtp = smtplib.SMTP()smtp.connect('smtp.163.com', '25')smtp.login('xxx@163.com', 'passworld')smtp.sendmail('xxx@163.com', 'xxx@qq.com', msg.as_string())smtp.quit()
二、邮件消息注册:
首先创建一个消息对象:
msg = email.mime.multipart.MIMEMultipart()
msg['from'] = '18910148469@163.com'
msg['to'] = '974644081@qq.com;1414873973@qq.com;lingjing@jd.com'
msg['subject'] = 'ajing1111‘
分别指明邮件的发件人,收件, 只代表显示的问题
三、消息内容:
首先,先定义一个字符串,来表示你得消息内容:
context= ‘’’hello world’’’
txt = email.mime.text.MIMEText(_text=content, _subtype="html")
msg.attach(txt)
_subtype这个参数就决定了,你是以html解析的形式去发送,还是以text的形式去发送。
小例子:
import email.mime.multipart
import email.mime.text
import smtplib

msg = email.mime.multipart.MIMEMultipart()
msg['from'] = 'xxx@qq.com'
msg['to'] = 'xxxx@qq.com'
msg['subject'] = 'hello world'

context = '''
<h1>hello</h1>
你好,
这是一封自动发送的邮件。
'''
text = email.mime.text.MIMET(_text=context, _subtype="html")
msg.attach(text)
em = smtplib.SMTP_SSL()
em.connect("smtp.qq.com", 465)
em.login("xxxx@qq.com", 'xxxxxxxxxxxxxx')
em.sendmail(from_addr='xxxx@qq.com', to_addrs='xxxx@qq.com', msg=msg.as_string())
em.quit()
二、发邮件还有一个非常好用的模块yagmail
import yagmail
#定义发送人账号密码等信息。
args={
"user": "@163.com",
"password": "xxxx",
"host": "smtp.163.com",
"port": "465"
}

#定义接收邮件人
emailList=["xxx@qq.com","xxx@yahu.cn","xxx@qq.com", "xxx@qq.com"]
email = yagmail.SMTP(**args)
email.send(to='xxxx@qq.com',subject="原因分析",contents='''DT:SPM 是出错信息的关键词,可以在这个网页中找到出错的原因http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html,原因:550 DT:SPM 邮件正文带有很多垃圾邮件特征或发送环境缺乏规范性。需调整邮件内容或优化发送环境;原因分析邮件中带有敏感关键词,例如促销,发票等。邮件中包含超级链接,或者超级链接太多。垃圾邮件特征比较明显,例如:只有一张图片,或只有一张图片。发送相同的邮件内容太多了。处理这种情况的方法是:换其他邮箱发送,或调整邮件内容。''',cc="xxx@qq.com")

三、发送附件:
先找一个本地的文件
打开文件,读出文件字符串
通过MIMT ext()类来创建一个对象att,传入文件读出内容
增加att的头部信息,并指定文件名字
添加到msg消息中msg.attach(att)
attfile = 'test.py'
basename = os.path.basename(attfile)
fp = open(attfile, 'rb')
att = email.mime.text.MIMEText(fp.read(), 'html', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att.add_header('Content-Disposition', 'attachment',filename=('utf-8', '', basename))#three-tuple of (charset, language, value),
# encoders.encode_base64(att)
msg.attach(att)
小例子:
import smtplib
import email.mime.multipar
timport email.mime.text
import os
from email import encoders
msg = email.mime.multipart.MIMEMultipart()
msg['from'] = '18910148469@163.com'
msg['to'] = '974644081@qq.com;1414873973@qq.com; lingjing@jd.com
msg['subject'] = 'ajing1111'
content = '''
<h1>老师好</h1> 你好,
这是一封自动发送的邮件。
'''
txt = email.mime.text.MIMEText(_text=content, _subtype="html")
msg.attach(txt)
attfile = 'test.py'
basename = os.path.basename(attfile)
fp = open(attfile, 'rb')
att = email.mime.text.MIMEText(fp.read(), 'html', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att.add_header('Content-Disposition', 'attachment',filename=('utf-8', '', basename))
msg.attach(att)

smtp = smtplib.SMTP()
smtp.connect('smtp.163.com', '25')
smtp.login('18910148469@163.com', 'LingJing2315')
smtp.sendmail(from_addr='18910148469@163.com',
to_addrs=['974644081@qq.com', '1414873973@qq.com', 'lingjing@jd.com'],
msg=msg.as_string())
smtp.quit()

四、发送图片:
本地必须存在一张图片;
打开图片,并读取图片内容
创建发邮件相对应的图片对象imgattr = MIMEImage(fimg.read())
增加图片的头信息, imgattr.add_header('Content-ID', '<image1>')
指定了图片的id,图片如果想在正文中显示,必须通过html的格式显示出来:在前端代码中指定图片id
<img src = 'cid:image1'>
添加到message的信息中
小例子:
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
sender = 'from@runoob.com'
receivers = ['xxxx@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("zy", 'utf-8')
msgRoot['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
msgRoot['Subject'] = Header(subject, 'utf-8')
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))
# 指定图片为当前目录
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, msgRoot.as_string())
print "邮件发送成功"
except smtplib.SMTPException:
print "Error: 无法发送邮件"

五、直接使用别人封装好的第三方库:

# pip install yagmail
import yagmail
yag=yagmail.SMTP(user='xxxxx@163.com',password='xxxxx',host='smtp.163.com', port='465' )
yag.send(to='974644081@qq.com',subject="test",contents='this is a testing',attachments='test.py',cc='1414873973@qq.com')

User 用户民
Password 用户密码,很多情况需要使用授权码
Host smtp的地址
Port 默认使用ssl协议,默认是465端口
To 收件人
Subject 主题
Contents 消息内容
Attachments 附件
Cc 抄送人
抄送:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
import email.mime.multipart
import email.mime.text

msg = email.mime.multipart.MIMEMultipart()
msg['from'] = 'xxx@163.com'
msg['to'] = 'xxxx@qq.com'
msg['subject'] = 'test'
msg['cc'] = 'xxx@qq.com'
content = '''
<h1>test</h1>
'''
txt = email.mime.text.MIMEText(_text=content, _subtype="html")
msg.attach(txt)

smtp = smtplib.SMTP_SSL()
smtp.connect('smtp.163.com', '465')
smtp.login('xxxx@163.com', 'xxxxx')
smtp.sendmail(from_addr='1xxx@163.com', to_addrs=['xxxx@qq.com'] + ['xxxx@qq.com'], msg=msg.as_string())
smtp.quit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值