mail编程

74 篇文章 2 订阅

mail编程

  • 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人

管理程序

  • MTA:Mail Transfer Agent——邮件传输代理
  • MDA:Mail Delivery Agent——邮件投递代理
  • MUA: Mail User Agent----邮件用户代理
  • 流程
    1. MUA->MTA, 邮件已经在服务器上了
    2. qq MTA->…->sina MTA, 邮件在新浪的服务器上
    3. sina MTA-> sina MDA, 此时邮件已经在你的邮箱里了
    4. sina MDA -> MUA(Foxmail/Outlook), 邮件下载到本地电脑
  • 编写程序
    • 发送: MUA->MTA with SMTP:SimpleMailTransferProtocal,包含MTA->MTA
    • 接受: MDA->MUA with POP3 and IMAP:PostOfficeProtocal v3 and InternetMessageAccessProtocal v4
# 导入相应的包
import smtplib
from email.mime.text import MIMEText
# MIMEText三个主要参数
# 1. 邮件内容
# 2. MIME子类型,在此案例我们用plain表示text类型
# 3. 邮件编码格式

msg = MIMEText("Hello, i am beijing tulingxueyuan ", "plain", "utf-8")

# 发送email地址,此处地址直接使用我的qq,密码一般需要临时输入,此处偷懒
from_addr = "1366798@qq.com"
# 此处密码是经过申请设置后的授权码,不是不是不是你的qq邮箱密码
from_pwd = "hjpovygcxmrshhcj"

# 收件人信息
# 此处使用qq邮箱,我给自己发送
to_addr = "1366798119@qq.com"


# 输入SMTP服务器地址
# 此处根据不同的邮件服务商有不同的值,
# 现在基本任何一家邮件服务商,如果采用第三方收发邮件,都需要开启授权选项
# 腾讯qq邮箱所的smtp地址是 smtp.qq.com

smtp_srv = "smtp.qq.com"

try:
    # 两个参数
    # 第一个是服务器地址,但一定是bytes格式,所以需要编码
    # 第二个参数是服务器的接受访问端口
    srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465) #SMTP协议默认端口25
    #登录邮箱发送
    srv.login(from_addr, from_pwd)
    # 发送邮件
    # 三个参数
    # 1. 发送地址
    # 2. 接受地址,必须是list形式
    # 3. 发送内容,作为字符串发送
    srv.sendmail(from_addr, [to_addr], msg.as_string())
    srv.quit()
except Exception as e:
    print(e)

发送邮件

  • SMTP:负责发送邮件
  1. 使用email模块构建邮件
  2. 使用smtplib模块发送邮件
  • 发送html邮件:
from email.mime.text import  MIMEText

mail_content = """
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>

        <h1> 这是一封HTML格式邮件</h1>

        </body>
        </html>
        """

msg = MIMEText(mail_content, "html", "utf-8")

# 构建发送者地址和登录信息
from_addr = "1366798119@qq.com"
from_pwd = "hjpovygcxmrshhcj"


# 构建邮件接受者信息
to_addr = "1366798119@qq.com"

smtp_srv = "smtp.qq.com"


try:
    import smtplib

    srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)

    srv.login(from_addr, from_pwd)
    srv.sendmail(from_addr, [to_addr], msg.as_string())
    srv.quit()

except Exception as e:
    print(e)
  • 发送带附件的邮件:
  • 添加邮件头
    • mail[“from”]表示发送信息,包括姓名和邮件
    • mail[“To”] 表示接受信息,包括信息和邮件地址
    • mail[“subject”]表示主题
  • 同时支持html和text格式
    • 构建一个mimemultipar格式邮件
    • 将subtype设置alternative格式
    • 添加html和text格式
    • POP3协议接受邮件
      - 本质上是MDA到MUA的一个过程
      - 从 MDA下载下来的是一个完整的邮件结构体,需要解析才能得到每个具体可读的内容
      - 步骤:
      1. 用poplib下载邮件结构体原始内容
      1. 准备相应的内容(邮件地址,密码,POP3实例)
      2. 身份认证
      3. 一般会先得到邮箱内邮件的整体列表
      4. 根据相应序号,得到某一封信的数据流
      5. 利用解析函数进行解析出相应的邮件结构体
      2. 用email解析邮件的具体内
from email.mime.text import MIMEText
from email.header import Header

msg = MIMEText("Hello wold",  "plain", "utf-8")
# 下面代码故意写错,说明,所谓的发送者的地址,只是从一个Header的第一个参数作为字符串构建的内容
# 用utf8编码是因为很可能内容包含非英文字符
header_from = Header("从艾春辉邮箱发出去的<TuLingXueYuan@qq.cn>", "utf-8")
msg['From'] = header_from

# 填写接受者信息
header_to = Header("去艾春辉的地方<wangxiaojing@sina.com>", 'utf-8')
msg['To'] = header_to

header_sub = Header("这是主题", 'utf-8')
msg['Subject'] = header_sub



# 构建发送者地址和登录信息
from_addr = "15530258872@163.com"
from_pwd = "qq168571"


# 构建邮件接受者信息
to_addr = "15530258872@163.com"

smtp_srv = "smtp.163.com"


try:
    import smtplib

    srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)

    srv.login(from_addr, from_pwd)
    srv.sendmail(from_addr, [to_addr], msg.as_string())
    srv.quit()

except Exception as e:
    print(e)
from email.mime.text import  MIMEText
from email.mime.multipart import  MIMEMultipart

# 构建一个MIMEMultipart邮件
msg = MIMEMultipart("alternative")

# 构建一个HTML邮件内容
html_content = """
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>Title</title>
            </head>
            <body>

            <h1> 这是一封HTML格式邮件</h1>

            </body>
            </html>
        """
#
msg_html = MIMEText(html_content, "html", "utf-8")
msg.attach(msg_html)


msg_text = MIMEText("just text content", "plain", "utf-8")
msg.attach(msg_text)



# 发送email地址,此处地址直接使用我的qq邮箱,密码临时输入
from_addr = "15530258872@163.com"
#from_pwd = input('163邮箱密码: ')
from_pwd = "qq168571"

# 收件人信息:
# 此处使用我注册的163邮箱
to_addr = "15530258872@163.com"

# 输入SMTP服务器地址:
# 此地址根据每隔邮件服务商有不同的值,这个是发信邮件服务商的smtp地址
# 我用的是qq邮箱发送,此处应该填写腾讯qq邮箱的smtp值,即smtp.163.com,
# 需要开启授权码,
smtp_srv = "smtp.163.com"

try:
    import smtplib
    # 加密传输
    #server = smtplib.SMTP_SSL(smtp_srv.encode(), 465) # SMTP协议默认端口是25
    # qq邮箱要求使用 TLS加密传输
    server = smtplib.SMTP(smtp_srv.encode(), 25) # SMTP协议默认端口是25
    server.starttls()
    # 设置调试级别
    # 通过设置调试等级,可以清楚的看到发送邮件的交互步骤
    server.set_debuglevel(1)
    # 登录发送邮箱
    server.login(from_addr, from_pwd)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
except Exception as e:
    print(e)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值