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

为了能发邮件而不被发现,嘿嘿。我就用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. 【t010】最近距离

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 聚类方法要求将空间中的点集,按照一点的方式进行归类,要求每一类中的点集相互之间的距离足够的"近 ...

  2. 【t053】整数去位

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对 ...

  3. 在RedHa上安装MRTG监控网卡流量

    http://os.51cto.com/art/201103/252149.htm 2011-03-30 15:05 张微波 phpchina 字号:T | T 在RedHa上安装MRTG监控网卡流量 ...

  4. Swift基础1.1——基本的语法—变量和常量

    前些日子.第一届Swift开发人员大会开了之后.身边非常多搞OC的朋友就按捺不住了. 都认为是时候学一下Swift了,毕竟Swift已是趋势. 也是应他们再三要求,让我整理一下Swift的学习心得.今 ...

  5. 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(4)for == while ?

    一.for和while等价替换 int i = 1; for (i; i<=100; i++){ sum = sum + 1; } int i = 1; while(i<=100){ su ...

  6. 断言(Assert)与异常(Exception)

    ## 断言和异常 断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置. 异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性. ## 断言的使用 在防御式编程中经常会用断 ...

  7. 第三十一天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(四)

    6月19日,小雨."黄梅时节家家雨.青草池塘处处蛙.有约不来过夜半,闲敲棋子落灯花." 面向对象无限包容的个性,给对SQL和数据库一窍不通的澳大利亚人Gavin King创造了极大 ...

  8. C 语言常见 API(fprintf、fputs、fprintf)

    1. fprintf:输出到文件描述符对应的文件 stderr:错误输出也是一种特殊的文件描述符 #define FatalError(str) fprintf(stderr, "%s\n& ...

  9. 小强的HTML5移动开发之路(38)——jqMobi插件ActionSheet

    现在在手机客户端上Action Sheet非常常见,比如微信中的分享按钮菜单,下面我们使用jqMobi实现一个Action Sheet,如下: 首先右击上面的按钮选择审查元素(我用的是Chrome浏览 ...

  10. Java设计模式菜鸟系列(二十二)中介者模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109 中介者模式(Mediator):主要用来减少类与类之间的耦合的,由于假设类与 ...