python实现邮件自动发送

本文实例为大家分享了python实现邮件自动发送的具体代码,供大家参考,具体内容如下

case 1:纯文本和HTML文件发送

# -*- coding: UTF-8 -*-

import smtplib
import traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):
  '''
  @subject:邮件主题
  @msg:邮件内容
  @toaddrs:收信人的邮箱地址
  @fromaddr:发信人的邮箱地址
  @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
  @password:发信人的邮箱密码
  '''

  mail_msg = MIMEMultipart()
  if not isinstance(subject,unicode): #过滤或者不过滤貌似没啥影响
    subject = unicode(subject, 'utf-8')
  mail_msg['Subject'] = subject
  mail_msg['From'] =fromaddr
  mail_msg['To'] = ','.join(toaddrs)
  mail_msg.attach(MIMEText(msg, 'plain', 'utf-8')) #f发送文本文件
  #mail_msg.attach(MIMEText(msg, 'html', 'utf-8')) #发送html格式邮件
  try:
    s = smtplib.SMTP()
    s.connect(smtpaddr) #连接smtp服务器
    s.login(fromaddr,password) #登录邮箱
    s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件
    s.quit()
    print "邮件发送成功!"
  except Exception,e:
    print "Error: unable to send email"
    print traceback.format_exc()

if __name__ == '__main__':
  fromaddr = "h******m@126.com"
  smtpaddr = "smtp.126.com"
  toaddrs = ["83****789@qq.com","h******m@126.com"]
  subject = "Hello,我是邮件主题"
  password = "不能告诉你"
  #msg = "Hello,我是邮件内容 !!!"
  msg="""
  <p>Python 邮件发送测试...</p>
  <p><a href="http://www.runoob.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >这是一个链接</a></p>
  """
  sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

case 2.添加附件:发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

# -*- coding: UTF-8 -*-

# 如何添加附件
import os

import smtplib
import traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
os.chdir("C:\\Users\\h****m\\Desktop\\Auto_email")

def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):
  '''
  @subject:邮件主题
  @msg:邮件内容
  @toaddrs:收信人的邮箱地址
  @fromaddr:发信人的邮箱地址
  @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
  @password:发信人的邮箱密码
  '''

  mail_msg = MIMEMultipart()
  if not isinstance(subject,unicode): #过滤或者不过滤貌似没啥影响
    subject = unicode(subject, 'utf-8')
  mail_msg['Subject'] = subject
  mail_msg['From'] =fromaddr
  mail_msg['To'] = ','.join(toaddrs)
  #mail_msg.attach(MIMEText(msg, 'plain', 'utf-8')) #f发送文本文件
  mail_msg.attach(MIMEText(msg, 'html', 'utf-8')) #发送html格式邮件

  #构造附件1
  att1=MIMEText(open("test_file1.txt",'rb').read(),'base64','utf-8') #注意:直接读取中文文件名会报错
  att1["Content-Type"] = 'application/octet-stream'
  att1["Content-Disposition"] = 'attachment; filename="test_file1.txt"'
  mail_msg.attach(att1)

  #构造附件2:添加中文附件名
  att2=MIMEText(open(u'测试文件2.docx','rb').read(),'base64','utf-8')
  att2["Content-Type"] = 'application/octet-stream'
  att2["Content-Disposition"] = 'attachment; filename="test_file2.docx"'
  mail_msg.attach(att2)

  try:
    s = smtplib.SMTP()
    s.connect(smtpaddr) #连接smtp服务器
    s.login(fromaddr,password) #登录邮箱
    s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件
    s.quit()
    print "邮件发送成功!"
  except Exception,e:
    print "Error: unable to send email"
    print traceback.format_exc()

if __name__ == '__main__':
  fromaddr = "h****m@126.com"
  smtpaddr = "smtp.126.com"
  toaddrs = ["83****789@qq.com","h****m@126.com"]
  subject = "Hello,我是邮件主题"
  password = "不能告诉你"
  #msg = "Hello,我是邮件内容 !!!"
  msg="""
  <p>Python 邮件发送测试...</p>
  <p><a href="http://www.runoob.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >这是一个链接</a></p>
  """
  sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

case 3: 发送图片(容易被判别为垃圾邮件,导致:SMTPDataError: (554, 'DT:SPM 126……错误)

# -*- coding: utf-8 -*-

fromaddr = "h****m@126.com"
smtpaddr = "smtp.126.com"
toaddrs = ["83****789@qq.com","h****m@126.com"]
subject = "Hello,我是邮件主题"
password = "不能告诉你"

#test3
msg = """
<p>Python 邮件发送添加图片测试...</p>
<p><a href="http://www.runoob.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >菜鸟教程链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""

import os
import smtplib

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
os.chdir("C:\\Users\\h****m\\Desktop\\Auto_email")

msgRoot = MIMEMultipart('related')
if not isinstance(subject,unicode): #过滤或者不过滤貌似没啥影响
  subject = unicode(subject, 'utf-8')

msgRoot['Subject'] = subject
msgRoot['From'] =fromaddr
msgRoot['To'] = ','.join(toaddrs)

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)

msg = """
<p>Python 邮件发送测试...</p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(msg, 'html', 'utf-8'))

fp = open('test.PNG', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

s = smtplib.SMTP()
s.connect(smtpaddr) #连接smtp服务器
s.login(fromaddr,password) #登录邮箱
s.sendmail(fromaddr, toaddrs, msgRoot.as_string()) #发送邮件
s.quit()
print "邮件发送成功!"

#邮件发送成功!

对于case3,发送很不稳定,时而发送得出,时而报 SMTPDataError: 554错误,等有空了,看有没有方法弄个稳定的版本。case1,case2在工作中基本够用了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: utf-8 -*- import time import sys import logging import smtplib import socket import signal import ConfigParser from datetime import datetime from email

  • python邮件发送smtplib使用详解

    本文实例为大家分享了python邮件发送smtplib使用具体代码,供大家参考,具体内容如下 文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header sender = '***' receiver = '***' subject = 'python email test' smtpserver

  • Python实现的查询mysql数据库并通过邮件发送信息功能

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: #-*- coding: UTF-8 -*- #!/usr/bin/env python ''''' author:qlzhong Created on 2015-6-29 征途宕机日志统计汇总 ''' import MySQLdb import time import datetime impo

  • python实现QQ邮箱/163邮箱的邮件发送

    QQ邮箱/163邮箱的邮件发送:py文件发送邮件内容相当于一个第三方的客户端,借助于QQ/163邮箱服务器来发送的邮件. 主要配置: 导入模块--import    smtplib 邮箱SMTP服务器的主机地址,HOST--将来使用这个服务器收发邮件. 配置服务器端口,PORT --默认的邮件端口是25(QQ邮箱是:465) 指定发件人和收件人,(FROM.TO)--发件人只有一个,收件人有多个,收件人格式:'邮箱1,邮箱2,...' 邮件标题(SUBJECT) 邮件内容(CONTENT) 邮箱

  • python3.4实现邮件发送功能

    本文实例为大家分享了python实现邮件发送功能的具体代码,供大家参考,具体内容如下 import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email import encoders user = '*******@qq.com' pwd = '*******' to = ['******@139.com', '******

  • python2.7实现邮件发送功能

    要想实现一个能够发送带有文本.图片.附件的python程序,首先要熟悉两大模块: email以及smtplib 然后对于MIME(邮件扩展)要有一定认知,因为有了扩展才能发送附件以及图片这些媒体或者非文本信息 最后一个比较细节的方法就是MIMEMultipart,要理解其用法以及对应参数所实现的功能区别 发送邮件三部曲: 创建协议对象 连接邮件服务器 登陆并发送邮件 from email.header import Header from email.mime.base import MIMEB

  • python使用smtplib模块通过gmail实现邮件发送的方法

    本文实例讲述了python使用smtplib模块通过gmail实现邮件发送的方法.分享给大家供大家参考.具体实现方法如下: import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText fromaddr = 'fromaddr@gmail.com' toaddr = 'toaddr@gmail.com' text = 'test email message sent

  • python实现SMTP邮件发送功能

    一直想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件.之后是邮箱.像163.qq.新浪等邮箱默认关闭SMTP服务,需要我们手动打开,打开后通过发件人邮箱.授权密码 通过发件人的SMTP服务发送 代码如下: #!/usr/bin/env python # -*- coding: utf_8 -*- from email.mime.text import MIMEText from email

  • python模块smtplib实现纯文本邮件发送功能

    今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了.下面来谈一谈我的这段经历. 配置你的邮箱 为什么要配置邮箱呢?具体要配置什么呢? 因为我们申请的一些免费邮箱都是默认不开启smtp/pop协议的. SMTP是发邮件使用到的计算机网络中应用层协议中的一个:而POP则是收邮件时使用到的计算机网络中的应用层协议的其中一个.这都是理论性的知识了,上过计算机网络这门课的想必都知道,就不多说了. 配置就是要开启这项服务.否则我们就不能实现用Py

  • python生成每日报表数据(Excel)并邮件发送的实例

    逻辑比较简单 ,直接上代码 定时发送直接使用了win服务器的定时任务来定时执行脚本 #coding:utf-8 from __future__ import division import pymssql,sys,datetime,xlwt import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Heade

  • python实现邮件发送功能

    什么是POP3.SMTP和MAP? POP3是Post Office Protocol 3的简称,即邮局协议的第三个版本,他是规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议.它是因特网电子邮件的第一个离线协议的标准.POP3允许用户从服务器上把邮件存储到本地计算机上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接受邮件服务器,用来接受电子邮件. SMTP的全称是Simple Mail Transfer Protocol,即简单的邮件传输协议

  • python实现自动发送邮件发送多人、群发、多附件的示例

    1.最近公司实现部分数据统计.分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用python来实现该功能,不过发现网上各种文档都是未经过整理,代码写的很不友善,比如发送多人的只能发送前一个邮箱,附件写死不灵活等等,故特写一遍比较记录. 主要会遇到的几个问题: 1.smtplib.SMTPAuthenticationError: (550, b'User has no permissi

  • Python实现定时备份mysql数据库并把备份数据库邮件发送

    一.先来看备份mysql数据库的命令 mysqldump -u root --password=root --database abcDataBase > c:/abc_backup.sql 二.写Python程序 BackupsDB.py #!/usr/bin/python # -*- coding: UTF-8 -*- ''''' zhouzhongqing 备份数据库 ''' import os import time import sched import smtplib from em

  • python定时利用QQ邮件发送天气预报的实例

    大致介绍 好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下 1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.com/douments/api/s6/weather-forecast) 2.利用python的jinja2模块写一个html模板,用于展示数据 3.python的email构建邮件,smtplib发送邮件 4.最后使用crontab定时执行python脚本 涉及的具体知识可以去看文档,本文主要就是

  • python实现12306抢票及自动邮件发送提醒付款功能

    #写在前面,这个程序我已经弄出来了,但是因为黄牛泛滥以及懒人太多,整个程序的代码就不贴出来了,这里纯粹就是技术交流. 只做技术交流..... 嗯,程序结束后,自己还是得手动付款. 废话不多说,下面就直接开始技术主要部分阐述. 先讲理论部分:首先我们需要代码实现一个浏览器功能,那么模块基本上可以确定urllib.parse.urllib.request,这两个包都是和网址有关的模块,那么咱们去登录一个网址,特别是有验证码这些的网址,我们登录进去是不是就行了?答案是对的,但是我们用代码实现的话,这个

随机推荐