python怎么发送邮件_在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/python

import smtplib

sender = 'from@fromdomain.com'

receivers = ['to@todomain.com']

message = """From: From PersonTo: To PersonSubject: 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","小五义"):

print "发送成功"

else:

print "发送失败"

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

#!/usr/bin/python

import smtplib

message = """From: From PersonTo: To PersonMIME-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

This is HTML message.This is headline."""

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 MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib

#创建一个带附件的实例

msg = MIMEMultipart()

#构造附件1

att1 = MIMEText(open('d:123.rar', 'rb').read(), 'base64', 'gb2312')

att1["Content-Type"] = 'application/octet-stream'

att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字

msg.attach(att1)

#构造附件2

att2 = MIMEText(open('d:123.txt', 'rb').read(), 'base64', '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/python

import smtplib

import base64

filename = "/tmp/test.txt"

# 读取文件内容并使用 base64 编码

fo = open(filename, "rb")

filecontent = fo.read()

encodedcontent = base64.b64encode(filecontent) # base64

sender = 'webmaster@tutorialpoint.com'

reciever = 'amrood.admin@gmail.com'

marker = "AUNIQUEMARKER"

body ="""

This is a test email to send an attachement.

"""

# 定义头部信息

part1 = """From: From PersonTo: To PersonSubject: 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:base64

Content-Disposition: attachment; filename=%s

%s

--%s--

""" %(filename, filename, encodedcontent, marker)

message = part1 + part2 + part3

try:

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, reciever, message)

print "Successfully sent email"

except Exception:

print "Error: unable to send email"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统计单词个数(划分型)

codevs 1040 统计单词个数 2001年NOIP全国联赛提高组 题目等级 : 黄金 Gold题目描述 Description给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入&#xff0c;且保证每行一定为20个)。要求将此字母串分成k份(1<k<40)&#xff0c…

基于ASP.NET的新闻管理系统(三)代码展示

5.1.1栏目部分 增加栏目&#xff08;addLanMu.aspx&#xff09;&#xff1a; <html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"> <title></title> <link rel"stylesheet" type"text/css" …

洛谷-求同构数的个数-NOIP2013提高组复赛

题目描述 Description 所谓同构数是指这样的数&#xff0c;即它出现在它的平方数的右端。例如&#xff0c;5的平方是25 &#xff08;即5525&#xff09;&#xff0c;5是25右端的数&#xff0c;那么5就是同构数。又如&#xff0c;25的平方是625&#xff08;即2525625&#xff09…

plex linux 数据目录,shareplex日常维护文档

2017/07/25##SharePlex日常维护源(SRC)&#xff1a;192.168.1.101 db01目标(TGT):192.168.1.102 db02SRC:su - oraclesp_ctrlshowqstatusshow capture detailshow read detailshow log reverseshow config --查看当前使用参数文件list config --罗列出所有的参数文件(使用和未使…

ifconfig命令找不到_02. Linux命令之查看网络连接

1. 查看网络连接数和端口使用 netstat 命令查看网络连接情况netstat -anp参数&#xff1a;-a 显示所有选项-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名&#xff0c;能显示数字的全部转化成数字。-p 显示建立相关链接的程序名关键列解释:Proto 表示协议…

grep与egrep的区别

grep与egrep的区别&#xff1b; 在linux系统环境下&#xff0c;我们通常使用grep命令来过滤出需要的行而egrep确很少使用&#xff0c;他们的区别其实很简单&#xff0c;grep默认不支持正则表达式&#xff0c;egrep默认支持正则表达式&#xff0c;egrep 等于 grep -E 命令。转载…

python学习之模块(pip),列表生成式,模块操作mysql,excel

python基础 生成式 列表生成式  格式 [表达式 for 表达式 in 迭代对象 (可加判断)] 原&#xff1a; 1 res1 [] 2 for i in range(1,5): 3   res1.append(i) 4 print(res1) 改&#xff1a; 1 res2 [i for i in range(1,5)] 2 print(res2) 字典生成式  格式 {key:value f…

linux驱动read函数 copytouser,Linux驱动编程 step-by-step (五)主要的文件操作方法实现...

主要的文件操作方法实现文件操作函数有很多的操作接口&#xff0c;驱动编程需要实现这些接口&#xff0c;在用户编程时候系统调用时候会调用到这些操作structfile_operations {...loff_t (*llseek) (structfile *, loff_t,int);ssize_t (*read) (structfile *,char__user *,siz…

web开发中的 emmet 效率提升工具

web开发中的 emmet 效率提升工具 可以用来快速生成html 代码。 并且给各种IDE、编辑器提供了插件支持&#xff0c;sublime &#xff0c;webstorm等。 如在webstorm中安装好emmet之后&#xff0c;输入以下文本&#xff0c; #page>div.content[ng-model"user"]ul>…

python二维数组操作_Python二维数组应用与操作

课课家将会在这里为大家详细的介绍一下Python二维数组的相关应用方法以及定义方式&#xff0c;相信朋友们可以从中学习到更多的知识。 Python数组的应用中在实际编程中是一个非常重要的应用技术&#xff0c;作为Python编程人员来说&#xff0c;必须要熟练的掌握这方面的所有应用…

基于光线追踪的渲染中景深(Depth of field)效果的实现

图形学离线渲染中常用的透视摄像机模型时根据小孔成像的原理建立的&#xff0c;其实现通常是从向成像平面上发射ray&#xff0c;并把trace这条ray的结果作为成像平面上对应交点的采样结果。即&#xff1a; 图片来自《Fundamentals of Computer Graphics》 现实中的镜头拍摄的图…

ubuntu 安装 pycharm

添加源&#xff1a;$ sudo add-apt-repository ppa:mystic-mirage/pycharm安装收费的专业版&#xff1a;$ sudo apt update$ sudo apt install pycharm安装免费的社区版&#xff1a;$ sudo apt update$ sudo apt install pycharm-community卸载&#xff1a;$ sudo apt remove p…

带你制作百词斩单词表读写插件

上篇博文简单的介绍了一下Chrome插件&#xff0c;今天就与大家分享一下我做的这款有实际意义的插件吧。 做这款插件主要是用百词斩站点进行单词学习时&#xff0c;遇到的一点点闹心事儿。在单词表中不能听发音。也不能练习拼写。所以才忍无可忍的做了这么一款插件。自我感觉还是…

Linux7改运行级别,Centos7.0修改系统运行级别

首先翻译下ininttab里面的内容&#xff1a;#inittab不再使用时利用系统。#添加配置这会对你的系统没有影响。#Ctrl-Alt-Delete由/usr/lib系统/系统/ctrl-alt-del.target处理#系统使用的目标而不是运行级别。默认情况下&#xff0c;有两个主要目标&#xff1a;#multi-user.targe…

python测试字符串类型的函数_python-02 数据类型 字符串str

字符串str 一、字符串定义 概念&#xff1a;字符串是有序的 不可修改的&#xff0c;元素以引号包围的序列 引号类型&#xff1a;单引号 “”双引号 “ ””三引号 三单引号 print(python) print("python") print(python) print("""python""…

POJ2115 C Looooops(线性同余方程)

无符号k位数溢出就相当于mod 2k&#xff0c;然后设循环x次A等于B&#xff0c;就可以列出方程&#xff1a; $$ CxA \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} $$ 最后就用扩展欧几里得算法求出这个线性同余方程的最小非负整数解。 1 #include<cstdio>2 #incl…

工作测试博客

工作测试博客转载于:https://blog.51cto.com/12559670/1895000

iphone各机型参数对比_带你了解新款iPhone 12系列四款机型

2020年10月14日凌晨1&#xff1a;00&#xff0c;苹果召开新品发布会&#xff0c;发布了新款iPhone 12系列手机&#xff0c;“果粉”们期待已久的iPhone 12终于来了。iPhone 12系列手机共有四款机型&#xff0c;分别是iPhone 12 mini、iPhone 12、iPhone 12 Pro、iPhone 12 Pro …

设置开机自启动服务

一、软链接方法 利用ln -s 命令将/etc/rc.d/init.d/目录下脚本&#xff08;注意执行权限&#xff09;软连接到 rc3目录下&#xff0c;/etc/rc.d/rc3.d 目录也就是我们一般的系统运行级别。ln -s /etc/rc.d/init.d/** /etc/rc.d/rc3.d/S**这里的S代表的是开机自启动服务&#x…

mysql benchmark基准测试

git项目地址&#xff1a; https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试&#xff08;当然这个工具很强大&#xff0c;除了测试主流数据库性能&#xff0c;还能测试其它方面&#xff0c;详情自己看官网项目文档&#xff09; mac上的用法&#…