人生苦短之Python发邮件

#coding=utf-8
import smtplib
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
‘‘‘
   一些常用邮箱发件服务器及端口号
   邮箱   发件服务器    非SSL协议端口    SSL协议端口
   163   smtp.163.com      25             465/587
   qq    smtp.qq.com       25             465/587

   发送邮件的几个错误:
   1.550错误(smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘))
     535错误(smtplib.SMTPAuthenticationError: (535, b‘Error: authentication failed‘))
     邮箱一般是不开启客户端授权的,所以登录是拒绝的,需要去邮箱开启,然后会发送短信
     获取授权码作为客户端登录的密码(login方法中的密码)
   2.503错误(503 ‘Error: A secure connection is requiered(such as ssl)’之类)
     例如我们使用QQ邮箱是需要SSL登录的,所以需要smtplib.SMTP()改成smtplib.SMTP_SSL()

   @from_addr  发送邮件的地址
   @to_addr    接收邮件的地址(可以是列表)
   @mail_host  邮箱的SMTP服务器地址
   @mail_pass  邮箱开启smtp 需要的授权码
‘‘‘
from_addr = ‘[email protected]‘
to_addr = ‘[email protected]‘
mail_host = ‘smtp.qq.com‘
mail_pass = ‘itrwvjhjxupgbhhc‘

#文本形式的邮件
def send_text_mail():
    try:
        ‘‘‘
           MIMETest(content, type, 编码)  创建邮件信息主体
           msg[‘Subject‘]                 邮件主题
           msg[‘From‘]                    邮件发送方
           msg[‘To‘]                      收件方
        ‘‘‘
        msg = MIMEText(‘hello send by python‘, ‘plain‘, ‘utf-8‘)
        msg[‘From‘] = from_addr
        msg[‘To‘] = ‘,‘.join(to_addr)
        msg[‘Subject‘] = ‘主题‘

        server = smtplib.SMTP_SSL(mail_host, 465)
        server.login(from_addr, mail_pass)
        server.sendmail(from_addr, [to_addr, ], msg.as_string())
    except Exception as e:
        print e

#HTML格式的邮件
def send_html_mail():
    msg = MIMEText(‘<html><h1>你好</h1></html>‘, ‘html‘, ‘utf-8‘)
    msg[‘Subject‘] = ‘html‘

    smtp = smtplib.SMTP_SSL(mail_host, 465)
    smtp.login(from_addr, mail_pass)
    smtp.sendmail(from_addr, to_addr, msg
                  .as_string())
    smtp.quit()

#发送附件
def send_attachment_mail():
    #创建邮件对象  MIMEMultipart  指定类型为 alternative可以支持同时发送html和plain,但是
    # 不会都显示,html优先显示
    msg = MIMEMultipart(‘alternative‘)
    msg[‘From‘] = from_addr
    msg[‘To‘] = to_addr
    msg[‘Subject‘] = ‘AttachmentMail‘

    # 邮件的正文还是MIMEText
    part1 = MIMEText(‘这是个带附件的邮件‘, ‘plain‘, ‘utf-8‘)

    # 添加附件(添加一个本地的图片)
    att1 = MIMEText(open("C:\\6.jpg", ‘rb‘).read(), ‘base64‘, ‘utf-8‘)
    att1[‘Content-Type‘] = ‘application/octet-stream‘
    att1[‘Content-Disposition‘] = ‘attachment;filename="6.jpg"‘
    att1[‘Content-ID‘] = ‘<0>‘

    msg.attach(att1)
    msg.attach(part1)

    smtp = smtplib.SMTP_SSL(mail_host, 465)
    smtp.login(from_addr, mail_pass)
    smtp.sendmail(from_addr, to_addr, msg
                  .as_string())
    smtp.quit()

#发送带图片的文本邮件
def send_imagetext_mail():
    msg = MIMEMultipart()
    msg[‘From‘] = from_addr
    msg[‘To‘] = to_addr
    msg[‘Subject‘] = ‘ImagMail‘

    #创建展示图片的html
    msg_html = MIMEText(‘<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!‘,
                        ‘html‘, ‘utf-8‘)
    msg.attach(msg_html)

    #添加图片模块
    fp = open(‘C:\\6.jpg‘, ‘rb‘)
    msg_image = MIMEImage(fp.read())
    fp.close()
    msg_image.add_header(‘Content-ID‘, ‘<image1>‘)
    msg.attach(msg_image)

    smtp = smtplib.SMTP_SSL(mail_host, 465)
    smtp.login(from_addr, mail_pass)
    smtp.sendmail(from_addr, to_addr, msg
                  .as_string())
    smtp.quit()

send_imagetext_mail()

‘‘‘
Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

    邮件信息的层级关系,详细见https://docs.python.org/2/library/email.mime.html
‘‘‘
时间: 2024-11-10 07:18:22

人生苦短之Python发邮件的相关文章

python 发邮件乱码

来自:http://outofmemory.cn/code-snippet/1464/python-send-youjian-resolve-suoyou-luanma-question 使用python发邮件很简单,但是遇到乱码问题很烦恼. 乱码问题有几种:有发件人名称乱码,有标题乱码,也有正文乱码的问题. 要解决发件人名称乱码问题,必须使用Header,如下代码: from email.header import Header from = ("%s<[email protected]

48. Python 发邮件(1)

python发送邮件 1.通过python发邮件步骤: 前提:开通了第三方授权,可以使用smtp服务 1.创建smtp对象 2.连接smtp服务器,默认端口号都是25 3.登陆自己的邮箱账号 4.调用发送消息函数,参数:发件人.收件人.消息内容 5.关闭连接 2.邮件消息注册: 首先创建一个消息对象: msg = email.mime.multipart.MIMEMultipart()                     #通过这个类创建消息 msg['from'] = '[email pr

Python 发邮件例子

Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Author : BenLam # @Link : https://www.cnblogs.com/BenLam/ import smtplib from email.mime.text import MIMEText from email.header import Header from email.mi

python发邮件出现乱码

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码. encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码. 另外对于一些包含特殊字符的编码,直接解码可能会报错,可以使用对于的参数来设置.如:s.decode("utf-8", "igno

python发邮件

import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方 SMTP 服务 mail_host="smtp.qq.com" #设置服务器 mail_user="xxxxxx" #用户名 mail_pass="plcfthkdtpoxcabh" #口令QQ需要授权码 sender = '[email protected]' rec

49. Python 发邮件(2)

继续修改上面一节的发邮件代码 发送附件: (1)先找一个本地的文件 (2)打开文件,读出文件字符串 (3)通过MIMT ext()类来创建一个对象att,传入文件读出内容 (4)增加att的头部信息,并指定文件名字 (5)添加到msg消息中msg.attach(att) 样例: attfile = 'test.py' basename = os.path.basename(attfile) fp = open(attfile, 'rb') att = email.mime.text.MIMETe

python 发邮件脚本

相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:    1.smtplib模块 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆.发送邮件).所有参数都是可选的. host:smtp服务器主机名 port:smtp服务的端口,默认是25:如果在创建SMT

python 发邮件小程序一枚

#!/usr/bin/env python # Import smtplib for the actual sending function import sys import getopt import smtplib sender = '[email protected]'     #这里输入发件人邮箱地址 # If there are more than one receiver, you need to ganerate a list.  receiver = ['[email prot

Python发邮件实例,并用Tkinter实现UI

一个偶然的机会我接触到Python语言,个人感觉Python是强大的工具语言.就下决心好好研究一下.废话少说,讲述下这个Demo的实现过程及源码.多谢指正! 第一步:最主要的工具包就是:smtplib.下面是基本的操作的核心代码: <span style="font-size:14px;"># -*- coding: utf-8 -*- # Import the email modules we'll need import smtplib from email.mime.