zoukankan      html  css  js  c++  java
  • python之smtplib发邮件

    第一版: 认证发信,不支持附件

    #!/usr/bin/env python
    # ---------------------------------------
    # author : Geng Jie
    # email  : gengjie@outlook.com
    #
    # Create Time: 2016/3/13 15:21
    # ----------------------------------------
    import smtplib
    
    # 定义邮件服务器地址以及端口
    SMTP_HOST = 'smtp.xxx.com'
    SMTP_PORT = '25'
    # 定义发件人,密码,收件人
    MAIL_USER = 'xxx@xxx.com'
    PASSWD = 'xxxxxxx'
    MAIL_TO = 'xxxx@xxx.com'
    # 定义邮件主题,内容
    MAIL_SUB = '测试邮件'
    MAIL_CON = '''
    Hi, python:
    
    	最近好吗?好久不见.
    '''
    
    message = """From: {0}
    To: {1}
    Subject: {2}
    {3}
    """.format(MAIL_USER, MAIL_TO, MAIL_SUB, MAIL_CON)
    
    try:
    	smtpObj = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
    	smtpObj.login(MAIL_USER, PASSWD)
    	smtpObj.sendmail(MAIL_USER, MAIL_TO, message.encode('GBK'))
    	print('Successfully send email !')
    	smtpObj.quit()
    
    except smtplib.SMTPException as e:
    	print(e)
    	print('Error: unable to send mail !')
    

      

    第二版,写成模块,可调用使用

     1 import smtplib
     2 from email.mime.text import MIMEText
     3 import socket
     4 
     5 
     6 class EasySendmail:
     7     ''' e = ClassMail.EasySendmail(Port=25, auth=True)
     8     default smtp port : 25
     9     # 默认smtp的端口是25,若需要更改则设置port=xxx
    10     # 默认是认证发信,若要匿名发信则需设置auth=False
    11     '''
    12     def __init__(self, port=25, auth=True):
    13         self.port = port
    14         self.auth = auth
    15 
    16     @classmethod
    17     def setmail(cls, host, sender, passwd, mail_to, mail_sub, content):
    18         '''You must set attr:
    19         Host : mailServer exp: smtp.163.com
    20         Sender: mail from user
    21         Passwd: user passwd
    22         Mail_to: To user
    23         Mail_sub: mail subject
    24         content: message '''
    25 
    26         cls.host = host
    27         cls.sender = sender
    28         cls.passwd = passwd
    29         cls.mail_to = ';'.join(mail_to)
    30         cls.mail_sub = mail_sub
    31         cls.content = content
    32 
    33     @property
    34     def sendmail(self):
    35         '''sendmail: Start Connect server to send mail .'''
    36         self.message = """From: {0}
    37 To: {1}
    38 MIME-Version: 1.0
    39 Content-type: text/plain
    40 Subject: {2}
    41 
    42 {3}
    43 """.format(self.sender, self.mail_to, self.mail_sub, self.content)
    44 
    45         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    46         s.settimeout(10)
    47         try:
    48             s.connect((self.host, self.port))
    49             # print('Connect {0}:{1} successfuly !'.format(self.host, self.port))
    50         except Exception:
    51             print('Error: Can connect {0}:{1} !'.format(self.host, self.port))
    52         s.close()
    53 
    54         try:
    55             print(self.auth)
    56             smtpobj = smtplib.SMTP(self.host, self.port)
    57             if self.auth is True:
    58                 smtpobj.login(self.sender, self.passwd)
    59             smtpobj.sendmail(self.sender, self.mail_to, self.message.encode('GBK'))
    60             print('Successfully send email !')
    61             smtpobj.quit()
    62         except smtplib.SMTPAuthenticationError as error:
    63             print(error)
    64             print('认证失败,请核对用户名和密码.')
    65         except smtplib.SMTPException as error:
    66             print(error)
    67             print('Error: unable to send mail !')
    68         except Exception as e:
    69             print(e)

    调用方法:

     1 #!/usr/bin/env python
     2 # ---------------------------------------
     3 # author : Geng Jie
     4 # email  : gengjie@outlook.com
     5 #
     6 # Create Time: 2016/3/14 13:19
     7 # ----------------------------------------
     8 
     9 import ClassMail
    10 
    11 if __name__ == '__main__':
    12     # 初始化实例
    13     # 默认smtp的端口是25,若需要更改则设置port=xxx
    14     # 默认是认证发信,若要匿名发信则需设置auth=False
    15     e = ClassMail.EasySendmail()
    16 
    17     # 定义邮件服务器
    18     e.host = 'smtp.163.com'
    19     # 定义发件人
    20     e.sender = 'xxx@163.com'
    21     # 定义发件人密码
    22     e.passwd = '*******'
    23     # 定义收件人,多个收件人,需用,号隔开
    24     e.mail_to = ['xxxx@xxx.com']
    25 
    26     # 定义邮件主题
    27     e.mail_sub = 'EasyMail Test'
    28     # 定义邮件正文
    29     e.content = """Hi, Tony:
    30 
    31     How  are you ?
    32 """
    33     # 调用发信方法发送信件
    34     e.sendmail
  • 相关阅读:
    令人恼怒!mount windows共享目录出错
    今天修改PCB板图
    在深圳出差
    触摸屏技术原理介绍
    getrlimit和setrlimit函数
    OpenCV下的HelloWorld
    两本OpenCV的书到了
    GDB用法小结
    没搞懂自适应二进制阈值化的参数
    【JavaScript】73 逆序的三位数 (10分)
  • 原文地址:https://www.cnblogs.com/topicjie/p/5272587.html
Copyright © 2011-2022 走看看