【Python】发送邮件功能浅析

之前要做一个mysql慢查询的定时发送程序,研究了一下python 发送email的模块。python 可以smtplib 库和email 库发送邮件。

一 stmplib 的使用

初始化语法如下:

#连接到SMTP服务器

s = smtplib.SMTP('smtp.XXXX.com')

#发送邮件。msg是字符串,表示邮件内容。

s.sendmail(from_addr, to_addrs, msg)

#断开连接

s.quit()

二 email 的使用

有关MIME的一些知识

多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。

RFC2822定义的邮件格式中,邮件体只是单纯的ASCII编码的字符序列,MIME扩展邮件的格式,用以支持非ASCII编码的文本、非文本附件及包含多个部分(multi-part)的邮件体。

MIME消息由消息头、消息体组成,即邮件的邮件头、邮件体。中间以空行进行分隔。

1、邮件头:包括发件人(from)、收件人(to)、邮件主题(subject)、接收日期(date)、MIME版本、邮件内容类型等信息。每条信息称为一个域,由域名后加“:”和信息内容构成,域的首行必须顶头写。

2、邮件体:有text/plain(纯文本)和text/html(超文本)之分,由邮件头的“content type”域指出。可以同时存在,也可以只存在一种。这就是为什么有些邮件既可以用html格式查看,又可以用文本格式查看的原因。邮件体分为多个段,称为Payload。每个段也包括段头段尾,中间以空行分隔。

multipart类型有3种:

multipart/mixed 

multipart/related 

multipart/alternative。

邮件里添加附件要定义multipart/mixed段:

如果纯文本超文本共存,则要定义multipart/alternative,

如存在内嵌资源,要定义multipart/related。

3、附件(attach)。发送邮件时,可以将本机的文件一起发送。附件可以有0个或多个,只要附件的总大小,不超过邮件服务器所声明的最大容量。

class email.mime.text.MIMEText(_text[, _subtype[, _charset]])

用于生成MIME对象的主体文本:_text指定邮件内容,_subtype指定邮件类型,_charset指定编码。

class email.mime.multipart.MIMEMultipart()

用于生成包含多个部分的邮件体的MIME对象

三 简单例子介绍:

一个发送至多人的例子:

#!/usr/bin/evn python

import time

import smtplib

from email.mime.text import MIMEText

mail_body='hello, this is the mail content from python and it is sended to two emails !'

fromer='qilong.yangql@gmail.com'

##注意sender 一定要是数组,否则接受到邮件显示收件人是被";" 截断的字符串

sender=['5XXX2@qq.com','yangXXX@163.com']

msg=MIMEText(mail_body)

msg['Subject']='hello  world '

msg['From']=fromer

msg['To']=';'.join(sender)

msg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z')

s=smtplib.SMTP('smtp.XXXXX.com')

s.sendmail(fromer,sender,msg.as_string())

s.quit()

时间: 2024-08-01 21:05:19

【Python】发送邮件功能浅析的相关文章

python发送邮件功能实现代码_python

本文实例为大家分享了python发邮件精简代码,供大家参考,具体内容如下 import smtplib from email.mime.text import MIMEText from email.utils import formataddr #发送邮件功能 def send_mail(send_message_txt,*senders_list,**send_to_people): flag = True try: #编写发送的内容 send_msg = MIMEText(send_mes

Python yield 使用浅析

  这篇文章主要介绍了Python yield 使用浅析,本文给出了多个使用实例来分析yield的使用方法,需要的朋友可以参考下 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和用法,帮助读者体会 Python 里 yield 简单而强大的功能. 您可能听说过,带有 yield 的函数在 Pytho

Java实现发送邮件功能时碰到的坑_java

之前用163邮箱发邮件时明明是成功的,但是使用中国移动自己的邮箱时,无论如何在linux服务器中都发送不成功,一开始报如下错误: javax.mail.MessagingException: Unknown SMTP host: mail.chinamobilesz.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1959) ~ [mail-1.4.7.jar:1.4.7] at com.sun.mail.

Android中使用Service实现后台发送邮件功能实例_Android

本文实例讲述了Android中使用Service实现后台发送邮件功能.分享给大家供大家参考,具体如下: 程序如下: import android.app.Activity; import android.content.Intent; import android.content.res.Resources.NotFoundException; import android.os.Bundle; import android.widget.TextView; public class A05Ac

.net如何实现发送邮件功能

问题描述 .net如何实现发送邮件功能 .net如何实现发送邮件功能给出邮件发送功能的简单实例,同时发送给多个人. 解决方案 使用 System.Net.Mail发送邮件 解决方案二: 这个挺简单的用Mail具体的步骤就简单几步你可以在网上搜到简单示例的;还有群发就是你获取这些人的实例对象然后用个循环将收件人的地址改为实例对象的email属性的值就可以了: 如果回答对您有帮助请采纳 解决方案三: 用一个数组存收件人的对象即可.

word文档中发送邮件功能怎么使用?

  word文档中发送邮件功能怎么使用?下面小编就为大家介绍word发送邮件功能的使用,不会的朋友快快来学习吧! 方法/步骤 双击打开测试文档,如下图. 点击"工具"---"自定义",如下图. 点击命令标签项,如下图. 在类别里,选择文件,如下图. 选中命令的新建电子邮件,如下图. 将新建电子邮件拖动到菜单栏上,如下图. 这时,在菜单栏上就有了一个按钮,点击就可以打开一个邮件发送的界面,如下图. 以上就是word文档中发送邮件功能怎么使用方法介绍,操作不是很大,希望

qq邮箱-android 如何自己实现发送邮件功能

问题描述 android 如何自己实现发送邮件功能 不用系统的邮件功能 而是自己实现 该怎么弄? 另外现在QQ邮箱现在好像要验证授权信息才能在手机上发送邮件 这些问题该如何编程解决? 求大神指点 解决方案 不建议你在客户端发邮件,因为客户端代码是暴露的,你可以提交到服务器,服务器来发,邮箱用163企业邮箱,支持smtp协议.

message-WPF实现发送邮件功能,邮件发不出去怎么回事。求助!

问题描述 WPF实现发送邮件功能,邮件发不出去怎么回事.求助! MailMessage message = new MailMessage(); message.To.Add("123456@qq.com"); message.From = new MailAddress("654321@qq.com"); message.Subject = "SUBJECT SUBJECT"; message.SubjectEncoding = Encodin

php-怎样实现在网页上点击按钮批量发送邮件功能?

问题描述 怎样实现在网页上点击按钮批量发送邮件功能? 我想要实现的是点击按钮把邮件发给不同的人,邮件内容也不一样,要CC的人也不一样.如果用mailto的话貌似一次只能发一封.请问我该怎么做呢?收件人的信息都可以用php得到 解决方案 网页实现批量数据导入功能如何实现从网页中自动点击他方网站上的按钮? 解决方案二: 既然你的程序能发送一个邮件,那么循环执行不就可以批量发邮件了.