视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详细介绍Python使用SMTP发送邮件实例
2020-11-27 14:24:16 责编:小采
文档


Python使用SMTP发送邮件.

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

参数说明:

  • host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如:w3cschool.cc,这个是可选参数。

  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。

  • local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。

  • Python SMTP对象使用sendmail方法发送邮件,语法如下:

    SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

    from_addr: 邮件发送者地址。

    to_addrs: 字符串列表,邮件发送地址。

    msg: 发送消息

    这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

    实例

    以下是一个使用Python发送邮件简单的实例:

    #!/usr/bin/pythonimport smtplib
    
    sender = 'from@fromdomain.com'receivers = ['to@todomain.com']message = """From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    Subject: SMTP e-mail test
    
    This is a test e-mail message.
    """try:
     smtpObj = smtplib.SMTP('localhost')
     smtpObj.sendmail(sender, receivers, message) 
     print "Successfully sent email"except SMTPException:
     print "Error: unable to send email"

    使用Python发送HTML格式的邮件

    Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:

    import smtplib 
    from email.mime.text import MIMEText mailto_list=["YYY@YYY.com"] mail_host="smtp.XXX.com" #设置服务器mail_user="XXX" #用户名mail_pass="XXXX" #口令 mail_postfix="XXX.com" #发件箱的后缀
     def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容
     me="hello"+"<"+mail_user+"@"+mail_postfix+">" #这里的hello可以任意设置,收到信后,将按照设置显示
     msg = MIMEText(content,_subtype='html',_charset='gb2312') #创建一个实例,这里设置为html格式邮件
     msg['Subject'] = sub #设置主题
     msg['From'] = me 
     msg['To'] = ";".join(to_list) 
     try: 
     s = smtplib.SMTP() 
     s.connect(mail_host) #连接smtp服务器
     s.login(mail_user,mail_pass) #登陆服务器
     s.sendmail(me, to_list, msg.as_string()) #发送邮件
     s.close() 
     return True 
     except Exception, e: 
     print str(e) 
     return False if __name__ == '__main__': 
     if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'>小五义</a>"): 
     print "发送成功" 
     else: 
     print "发送失败"

    或者你也可以在消息体中指定Content-type为text/html,如下实例:

    #!/usr/bin/pythonimport smtplib
    
    message = """From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    MIME-Version: 1.0
    Content-type: text/html
    Subject: SMTP HTML e-mail test
    
    This is an e-mail message to be sent in HTML format
    
    <b>This is HTML message.</b>
    <h1>This is headline.</h1>
    """try:
     smtpObj = smtplib.SMTP('localhost')
     smtpObj.sendmail(sender, receivers, message) 
     print "Successfully sent email"except SMTPException:
     print "Error: unable to send email"

    Python发送带附件的邮件

    发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

    from email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimport smtplib#创建一个带附件的实例msg = MIMEMultipart()#构造附件1att1 = MIMEText(open('d:\123.rar', 'rb').read(), 'base', 'gb2312')att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)#构造附件2att2 = MIMEText(open('d:\123.txt', 'rb').read(), 'base', 'gb2312')att2["Content-Type"] = 'application/octet-stream'att2["Content-Disposition"] = 'attachment; filename="123.txt"'msg.attach(att2)#加邮件头msg['to'] = 'YYY@YYY.com'msg['from'] = 'XXX@XXX.com'msg['subject'] = 'hello world'#发送邮件try:
     server = smtplib.SMTP()
     server.connect('smtp.XXX.com')
     server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码
     server.sendmail(msg['from'], msg['to'],msg.as_string())
     server.quit()
     print '发送成功'except Exception, e: 
     print str(e)

    以下实例指定了Content-type header 为 multipart/mixed,并发送/tmp/test.txt 文本文件:

    #!/usr/bin/pythonimport smtplibimport base
    
    filename = "/tmp/test.txt"# 读取文件内容并使用 base 编码fo = open(filename, "rb")filecontent = fo.read()encodedcontent = base.bencode(filecontent) # basesender = 'webmaster@tutorialpoint.com'reciever = 'amrood.admin@gmail.com'marker = "AUNIQUEMARKER"body ="""
    This is a test email to send an attachement.
    """# 定义头部信息part1 = """From: From Person <me@fromdomain.net>
    To: To Person <amrood.admin@gmail.com>
    Subject: Sending Attachement
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary=%s
    --%s
    """ % (marker, marker)# 定义消息动作part2 = """Content-Type: text/plain
    Content-Transfer-Encoding:8bit
    
    %s
    --%s
    """ % (body,marker)# 定义附近部分part3 = """Content-Type: multipart/mixed; name="%s"
    Content-Transfer-Encoding:base
    Content-Disposition: attachment; filename=%s
    
    %s
    --%s--
    """ %(filename, filename, encodedcontent, marker)message = part1 + part2 + part3try:
     smtpObj = smtplib.SMTP('localhost')
     smtpObj.sendmail(sender, reciever, message)
     print "Successfully sent email"except Exception:
     print "Error: unable to send email"

    【相关推荐】

    1. 分享Python实现SMTP发送邮件图文实例

    2. Python 使用SMTP发送邮件的代码小结

    3. c#调用qq邮箱smtp发送邮件修改版代码

    4. Python使用SMTP发送邮件

    5. php smtp发送邮件

    6. Python SMTP邮件模块详解

    7. python smtplib模块发送SSL/TLS安全邮件实例

    下载本文
    显示全文
    专题