Python 发送邮件

一、前言

  项目需求很简单,就是用python发送告警邮件功能。本文使用163邮箱演示发送邮件,基于python email和 smtplib 包实现。这篇博客总结下学习过程和遇到的问题,以待以后再用到相同需求时,能快速解决。

二、代码:

扔一段可行的代码,先跑通再说:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import smtplib
from email.mime.text import MIMEText


class Client:
    def __init__(self):
        # 邮件信息
        self.server = 'smtp.163.com'
        self.sender = 'send_test@163.com'
        self.receiver = ['receive_test@163.com']
        self.password = '123456789'

    def send_mail(self, msg):
        # 设置邮件内容
        message = MIMEText(msg.decode('utf-8').encode('gb2312'), 'plain', 'gb2312')
        message['Subject'] = 'email_test_subject'
        message['From'] = self.sender
        message['To'] = ','.join(self.receiver)
        # 发送邮件
        try:
            smtp = smtplib.SMTP(self.server)
            smtp.set_debuglevel(1)
            smtp.login(self.sender, self.password)
            smtp.sendmail(self.sender, self.receiver, message.as_string())
            smtp.quit()
            print "send mail succeed"
        except Exception, ex:
            print "send mail error : \n", ex

# 测试
if __name__ == '__main__':
    msg = 'hello! 你好,我是一封邮件!'
    client = Client()
    client.send_mail(msg)

运行结果

截取部分的运行结果,就表示发送成功了~~
这里写图片描述
收到的邮件如下:
这里写图片描述

参数说明:

  self.sender = ‘send_test@163.com’ 发件邮箱
  self.receiver = [‘receive_test@163.com’] 收件邮箱
  self.server = ‘smtp.163.com’ STMP服务器地址
  self.password = ‘123456789’ STMP服务密码

  其中STMP是发送邮件协议。STMP服务密码必须先事在发件邮箱中(本文是 send_test@163.com)开通STMP服务后并设置密码才能得到,详情可参照下一小节。

三、问题和解答

踩的最大的坑就是不知道以下代码中的参数怎么填:

smtp = smtplib.SMTP(self.server)
smtp.login(self.sender, self.password)

如果stmp服务器地址写错,有如下错误:

[Errno 61] Connection refused

如果发件箱stmp服务没开,或者密码写错,有如下错误:

smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')

解决以上两个错误,参考如下步骤:
  首先,要在代码中设置 self.server = smtp.163.com。
  其次,要开启163邮箱的STMP服务,点此阅读
  最后,设置smtp.login(self.sender, self.password) 参数,见上文示例代码。

四、小结和参考:

  到此为止,我的需求已经基本实现了,如果读者对于Python发送邮件功能还有进一步需求,如发送附件、图片、HTML类型邮件等功能,可参阅本文文献。
1. http://stackoverflow.com/questions/6270782/how-to-send-an-email-with-python
2. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000
3. http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/2343463.html
4. http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值