【TOOLS】Python 3利用SMTP进行邮件Email自主发送

640?wx_fmt=jpeg


作者 | Che_Hongshu

来源 |  AI蜗牛车(ID:AI_For_Car)


一、前言


利用Python进行邮件的发送,这个功能自我感觉主要应用于检测或者报告之类,我两次运用这个功能。


  • 第一次用在主要发送实时的数据给一个邮箱

  • 第二次用是检测挂在服务器端一直在跑的Python程序是否出现异常情况。


我这里采用163邮箱(sender)给qq邮箱(receiver)发送文本类邮件


如何在服务器端托管执行Python3工程请看我另一篇文章:【TOOLS】在云服务器上托管执行自己的python3工程程序


二、提取163邮箱的客户端授权密码


首先登陆163邮箱的网页版本。


640?wx_fmt=png

客户端授权密码


最后点击开启,自己设置密码即可。


之后这个密码不要忘记了,代码中要用到。


三、代码


show you my code


 
 

 1  from smtplib import SMTP
 2  from email.mime.text import MIMEText
 3  from email.header import Header
 4  """
 5    function: 利用模型进行推理
 6    Parameters:
 7       SMTP_host:  string类型,SMTP 服务器主机ip地址。 这里为 "smtp.163.com" 
 8       from_addr:  string类型,发送方,也就是作用为发送邮件的邮箱地址 
 9       password:  string类型,邮箱的授权码,而不是邮箱的登陆密码,可从邮箱获得,就是上面二所讲获取的授权码。
10       to_addrs:  list里面嵌套string类型,接收邮件的邮箱地址,可以有多个接收邮件的邮箱地址。
11       subject:   string类型,主题
12       content:   string类型,内容
13    Returns:
14    CSDN:
15        http://chehongshu.blog.csdn.net
16    """

17  def send_email(SMTP_host, from_addr, password, to_addrs, subject, content):
18
19    email_client = SMTP(SMTP_host) #初始化 SMTP类,SMTP服务使用的端口号默认为25,这里默认情况,也可自己设置port参数
20    email_client.login(from_addr, password) #登陆服务器
21
22    # 以下在下面的结果图片中再具体标出说明
23    msg = MIMEText(content, 'plain''utf-8'#可以理解为发送这个邮箱内容的类,这句话主要是设置这个邮件内容
24    msg['Subject'] = Header(subject, 'utf-8'# 设置邮箱主题,也就是标题
25    msg['From'] = from_addr  # 这个是最后显示的邮件的from
26    msg['To'] = "".join(to_addrs)     # 这个是最后显示的邮件的to
27    email_client.sendmail(from_addr, to_addrs, msg.as_string()) #发送信息,将msg转换为string
28
29    email_client.quit()# 退出服务器
30
31  if __name__ == "__main__":
32
33    hoster = "smtp.163.com"
34    sender_email = "XXXXXXXXX@163.com"
35    Authorization_code= "XXXXXXXXXXX"
36    receiver_email = ["XXXXXXXX@qq.com"]# 这里如果需要发送多个邮箱,形式为["xxxqq.com","xxx163.com","xxx126.com"]
37    subject = "我发送邮件了"
38    text = "今天天气真好"
39
40    send_email(hoster, sender_email, Authorization_code, receiver_email, subject, text)


四、结果


可能出现这个问题


smtplib.SMTPDataError: (554, b'DT:SPM 163 smtp12,

640?wx_fmt=png

error


解决方案,把测试和test类似的语句换掉,比如我的demo code中的比较正常的语言即可。


接收邮箱显示。


640?wx_fmt=png

结果显示


有subject和content对应。

对于在阿里云服务器上运行本文章有几处需要改动的地方。
首先因为阿里云服务器里面有很多端口都被限制,所以以下的代码在本地可以成功,但在云服务器上并出现问题
通过我的不断实验,最终成功的为port=587
并且我发送的邮件改为qq邮箱,接受为网易163邮箱,服务器host也改为"smtp.qq.com"
qq邮箱操作如下


qq邮箱操作如下


获取qq邮箱授权码


640?wx_fmt=png

账户昵称


点击开启,给qq官方发送一个短信即可获得,别忘了复制保存。


640?wx_fmt=png

开启服务


修改后的代码有改动,请自己对照使用,亲测好用


 
 
 
 

 1  from smtplib import SMTP
 2  from email.mime.text import MIMEText
 3  from email.header import Header
 4
 5  def send_email(SMTP_host, from_addr, password, to_addrs, subject, content):
 6    """
 7    port = 587
 8    在登陆邮箱前加上email_client.starttls()这句话
 9    """

10    email_client = SMTP(SMTP_host, 587
11    email_client.starttls()
12    email_client.login(from_addr, password)
13
14    msg = MIMEText(content, 'plain''utf-8')
15    msg['Subject'] = Header(subject, 'utf-8')#subject
16    msg['From'] = from_addr
17    msg['to'] = ''.join(to_addrs)
18    email_client.sendmail(from_addr, to_addrs, msg.as_string())
19
20    email_client.quit()
21
22  if __name__ == "__main__":
23    """
24    sender和receiver对调   
25    """

26    receiver = ["xxx@163.com"]
27    send_email("smtp.qq.com","xxx@qq.com","shouquanma",receiver ,"程序出问题了","ps")


结果


640?wx_fmt=png

结果


(*本文仅代表作者观点,转载请联系原作者)


CTA核心技术及应用峰会

5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。


识别海报二维码查看更多重磅嘉宾,并抢购优惠票价。添加小助手微信15101014297,备注「CTA」,了解详情。


640?wx_fmt=jpeg

扫描二维码,立即参会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值