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

为了能发邮件而不被发现,嘿嘿。我就用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. java导出word直接下载

    导出word工具类 package util; import java.io.IOException; import java.io.Writer; import java.util.Map; imp ...

  2. Gora官方范例 分类: C_OHTERS 2015-01-29 16:14 632人阅读 评论(0) 收藏

    参考官方文档:http://gora.apache.org/current/tutorial.html 项目代码见:https://code.csdn.net/jediael_lu/mygoradem ...

  3. Swift入坑系列—集合类型

    数组(Arrays) 字典(Dictionaries) 数组(Arrays) 在OC里面,NSArray和NSMutableArray这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特别信息 ...

  4. 【44.64%】【codeforces 743C】Vladik and fractions

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 在SSMS查询分析器中显示行号

    有网友问及,看到Insus.NET帮他解决问题分享的截屏时,发现代码中有显示行号.而他的没有. Step1: Go to Tools > Options Step2: In the Option ...

  6. [Angular Unit Testing] Testing Services with dependencies

    import { Http, Response, ResponseOptions } from '@angular/http'; import { TestBed } from '@angular/c ...

  7. ios开发之坐标系转换

    1:坐标系转换最核心的问题就是:比较两个坐标是否包含,或者是重叠等,最主要的问题是先将两个坐标转换到同一个坐标系下再去比较.第一步先确定矩形框在某个view坐标系下的frame(该矩形框是以该view ...

  8. 使用oschina的gitserver

    1.概要 事实上oschina的gitserver与github的几乎相同.只是既然是中国的gitserver,那么速度应该更快一些吧 2.注冊 链接https://git.oschina.net/, ...

  9. 【codeforces 602D】Lipshitz Sequence

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  10. erlang中变量作用域

    http://erlangdisplay.iteye.com/blog/315452 _开头(包括_)在erlang可以是表明,这个变量可以存任意东西,就是我们常说的全匹配,_A一般来说就是表明这个东 ...