美文网首页
[小工具]发送SMTP邮件

[小工具]发送SMTP邮件

作者: reneeChoi | 来源:发表于2018-05-18 00:40 被阅读45次

    前言

    最近突然冒出的一个想法所以有了这篇文章:使用python脚本检测机器是否异常,继而判断异常后自动发送邮件到邮箱。而在此之前,我基本上都是等机器出现异常情况,导致程序出现问题才去解决。所以这个是很有必要学习如何自动发送邮件。

    相关定义

    • SMTP:全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。
      SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
      SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
    • POP3:是Post Office Protocol 3的简称,即“邮局协议版本3”是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。
      这些邮件客户端软件包括OutlookExpress,Outlook,NetscapeMessenger或Communicator,Eudora,Pegasus,NuPOP,Z-Mail,FoxMail,TheBat,Kmail,和Unixmail。
      支持离线邮件处理,客户端从服务器下载所有邮件到本地。
    • IMAP:全称是Internet Mail Access Protocol,即交互式邮件存取协议,“与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。

    发送SMTP的几种方式

    1. Jenkins
    2. python
    3. Java
      ...

    SMTP Server的类型

    1.一些已存在的邮件: 126.com, 163.com, outlook.com等
    2.使用window系统自带工具搭建SMTP
    3.使用hmailServer搭建(需要有备案好的域名)

    实现步骤

    本文以python3.6+163邮箱为例,实现发送SMTP邮件

    # 第三方 SMTP 服务
    mail_host = "smtp.163.com"  # 设置服务器
    mail_user = "***@163.com"  # 用户名
    mail_pass = "***"  # 授权码
    
    sender = '***@163.com'
    receiver = '**@qq.com'  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    
    message = MIMEText("python email test content", "plain", "utf-8")
    message['From'] = sender
    message['To'] = receiver
    
    subject = 'Python SMTP Email 163'
    message['Subject'] = Header(subject, 'utf-8')
    
    try:
        smtpObj = smtplib.SMTP()
        smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
        smtpObj.ehlo()  # 向Gamil发送SMTP 'ehlo' 命令
        smtpObj.starttls() #启动TLS
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receiver, message.as_string())
        smtpObj.quit()
        print("Send Successfully")
    except smtplib.SMTPException as e:
        print(e)
    

    注意:

    1. 检查发送邮件的机子能否ping通 smtp.163.com, 如果不能ping通可能是被屏蔽了或者是网络有问题。
    2. 我们的163邮箱需要开启客户端授权码,上面的mail_pass是授权码,而不是邮箱的密码。如果不知道如何开启,请戳这里
    3. 邮件主题不要存在test等字眼,否则会被当成违规内容而发送不成功。

    小结

    因为公司的电脑会将163,126等smtp server屏蔽掉,最后只能用公司自己的邮箱服务器,而且公司如果将上面的代码参数替换成公司的邮箱服务器会报错,主要是因为验证方式不支持,所以最后放弃了python发送邮件的方式,最后采用了Jenkins发送邮箱,关于Jenkins发送邮件,请参考这里

    相关文章

      网友评论

          本文标题:[小工具]发送SMTP邮件

          本文链接:https://www.haomeiwen.com/subject/bacwdftx.html