或者收发邮件都得小心翼翼的,怕一不小心被有心人瞧见,又得被说说。

为了能发邮件而不被发现,嘿嘿。我就用python写了个邮件发送程序,用控制台控制,不了解的人一定以为哥还在编程工作呢。哈哈。

以下简介下怎样使用python发送邮件,包含普通文本内容,也能够带附件,或者HTML内容的邮件。能够说有了python,一切都变得很的easy。

smtplib 模块是用来发送email的标准module,另外配合email.mime内的几个module实现起来就很的简单。

  1. def sendmail(message):
  2. try:
  3. smtp = smtplib.SMTP(EMAIL_HOST)
  4. smtp.login(EMAIL_USER, EMAIL_PWD)
  5. smtp.sendmail(EMAIL_USER+"@"+EMAIL_POSTFIX, TO_EMAIL, message)
  6. smtp.quit()
  7. print 'email send success.'
  8. except Exception ,e:
  9. print e
  10. print 'email send failed.'

首先要导入smtplib模块,增加import smtplib,初始化的时候直接连上邮箱server,也就是上面的EMAIL_HOST(我使用的是163邮箱,所以定义EMAIL_HOST = 'smtp.163.com')。因为眼下的邮箱基本都须要登录才干够使用,所以要调用smtp.login()函数。输入用户和password。

  1. def sendwithoutattachment():
  2. msg = MIMEText(getcontent(), 'plain','utf-8')
  3. getheader(msg)
  4. sendmail(msg.as_string())

我将发送简单文本内容的邮件单独独立为一个函数。使用MIMEText生成,注意这里用到了utf-8。由于内容有可能是中文,所以要特别指定。假设要发送html内容,则讲plain更改为html就可以。

  1. def getheader(msg):
  2. msg['From'] = ME
  3. msg['To'] = ";".join(TO_EMAIL)
  4. msg['Subject'] = EMAIL_HEADER
  5. msg['Date'] = formatdate(localtime=True)

getheader函数是用来设置发送者,接受者,主题和发送时间的。

  1. def getcontent():
  2. path = os.getcwd()
  3. file = os.path.join(path, CONTENT_FILE_NAME)
  4. content = open(file, 'rb')
  5. data = content.read()
  6. try:
  7. data = data.decode('gbk')
  8. except :
  9. data = data.decode('gbk','ignore')
  10. content.close()
  11. return data

至于邮件正文,我是事先写到一个TXT文档中,读取出来。

这样也比較隐蔽。:)要主意中文编码。

  1. def getattachment(msg):
  2. ctype, encoding = mimetypes.guess_type(ACCESSORY_FULLPATH)
  3. if ctype is None or encoding is not None:
  4. ctype = 'application/octet-stream'
  5. maintype, subtype = ctype.split('/', 1)
  6. #Formating accessory data
  7. data = open(ACCESSORY_FULLPATH, 'rb')
  8. file_msg = MIMEBase(maintype, subtype)
  9. file_msg.set_payload(data.read( ))
  10. data.close( )
  11. encode_base64(file_msg)
  12. #file_msg["Content-Type"] = ctype # if add type then return error 10054
  13. file_msg.add_header('Content-Disposition', 'attachment', filename = ACCESSORY_NAME)
  14. msg.attach(file_msg)

附件相同独立为一个函数来创建,这里要注意的是不要指定“Content-Type”类型。否则无法发送邮件。

这个问题还没有解决。

以上基本包含了发送邮件的主要几个函数,具体smtplib模块和MIME等内允许,信息是非常多,还没有一个具体的解释,先后获得感兴趣的互联网search。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

python发送电子邮件的更多相关文章

  1. 使用Python发送电子邮件

    使用python发送邮件并不难,这里使用的是SMTP协议. Python标准库中内置了smtplib,使用它发送邮件只需提供邮件内容与发送者的凭证即可. 代码如下: # coding:utf-8 im ...

  2. 【python学习之五】自定义函数实现用 Python 发送电子邮件

    前言 之前论坛里有人发过关于发送邮件的帖子,设计器也有关于发送邮件的控件.我这里再次重复,希望能有帮到大家的地方. 信息准备 发送邮件前必须准备好一些基本信息,例如发件人邮箱地址.发件人邮箱密码.收件 ...

  3. 在Python中使用SMTP发送电子邮件

    Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...

  4. python#模拟发送电子邮件

    #-*- coding:utf-8 -*- #模拟发送电子邮件 from email.mime.text import MIMEText from_addr = 'aa@sss.com' passwo ...

  5. web端自动化——Python的smtplib发送电子邮件

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

  6. Django 发送电子邮件

    官方片段: 虽然Python使得通过smtplib 模块发送电子邮件相对容易,但Django提供了一些轻量级包装.提供这些包装器是为了使发送电子邮件更加快速,以便在开发过程中轻松测试电子邮件发送,并为 ...

  7. 发送电子邮件模块smtplib

    功能:smtplib模块是通过邮件服务器发送电子邮件,是smtp客户端的实现,支持邮件格式有:文本.HTML.Image.EXCEL等. 1 #!/usr/bin/env python 2 # cod ...

  8. Python发送带附件的邮件

    看别人的博客就不要在往别人的邮箱里发东西了行不行, 有点素质可以吗!!! 写出来分享还不知道珍惜!!!!! #-*-encoding:utf-8 -*- import os import smtpli ...

  9. JAVA实现发送电子邮件

    相信大家对于网站也好,手机app也好,用户注册时,需要进行邮箱验证的功能特别好奇吧,本篇我将带领大家一起实现一下这个简单而又神奇的小功能,让我们的应用也可以加入这些神奇的元素.废话不多说,下面开始我们 ...

随机推荐

  1. 定位导致物化视图无法快速刷新的原因 分类: H2_ORACLE 2013-08-08 23:04 335人阅读 评论(0) 收藏

    转载自:http://yangtingkun.itpub.net/post/468/13318 物化视图的快速刷新采用了增量的机制,在刷新时,只针对基表上发生变化的数据进行刷新.因此快速刷新是物化视图 ...

  2. windows phone8.1:页面导航详解

    小梦给大家带来windows phone 8.1应用开发实战教程,分享自己学习,开发过程中的经验和技巧. 今天给大家分享windows phone 8.1页面导航相关知识.涉及知识点如下: 页面一导航 ...

  3. html5-7 html5语义标签和视频

    html5-7  html5语义标签和视频 一.总结 一句话总结:设计网站的时候要兼顾早期浏览器的话,最新技术要缓着用,自己可以先尝试. 1.html5所有标签共有属性有哪四种? 1.id2.clas ...

  4. 如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码)

    如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码) 一.总结 1.动画效果可能是 CSS 实现的,也可能是 JS 实现的. 2.直接Chrome的F12调试即可, ...

  5. Git使用经验小结

    2012春,开始正式使用SVN,2014年9月加入一起好后,开始使用Git.  有了一些使用经验,也看了下网上关于"Git全胜SVN"的言论. 结合自己的实际情况,简要写几句: 1 ...

  6. DOM 的classList 属性

    1.添加1个或多个class add(class1, class2, ...) 2.移除class remove(class1, class2, ...) 3.判断指定的类名是否存在 contains ...

  7. js 进阶 10 js选择器大全

    js 进阶 10 js选择器大全 一.总结 一句话总结:和css选择器很像 二.JQuery选择器 原生javaScript中,只能使用getELementById().getElementByNam ...

  8. android应用开发 button显示两行文本

    自己写了个电话拨号器的程序给男朋友玩,用来专门打我的手机号,为了把界面做的好看一点,须要用到显示两行文本的button.在网上搜罗了两种方法,记录在以下.跟大家一起分享一下,希望能帮到须要的人. 方法 ...

  9. jQuery+ localStorage 实现一个简易的计时器

    原型 图片发自简书App 需求1.关闭浏览器时时间继续运行2.刷新时保持当前状态3.结束时间保存在客户端 <div class="wrapper"> <div c ...

  10. Android网络应用之Socket(一)

    socket编程是网络通信的一个基础应用.不管是手机端还是PC端都须要socket技术来建立网络通信. 在本章小编主要从下面几个方面来介绍socket的相关知识: 各自是"什么是socket ...