#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
"""
import smtplib
import socks
import json
from email.mime.text import MIMEText

import requests

# 提取socks代理API接口,获取num个代理IP
api_url = "http://dps.kdlapi.com/api/getdps/?orderid=*****&num=1&pt=2&format=json&sep=1"

# 快代理用户名密码认证(私密代理/独享代理)
username = "*****"
password = "*****"

""" 设置SMTP服务器所需信息 """
# 服务器ip
mail_host = 'smtp.163.com'  
# 服务器端口,默认25
mail_port = 25
# 邮箱用户名
mail_user = '*****@163.com'  
# 密码(部分邮箱为授权码) 
mail_pass = '*****'   
# 邮件发送方邮箱地址
sender = '*****@163.com'  
# 邮件接受方邮箱地址,list类型,这意味着你可以写多个邮件地址群发
receivers = ['*****@qq.com']

""" 设置email内容信息 """
# 邮件内容设置
message = MIMEText('邮件内容','plain','utf-8')
# 邮件主题
message['Subject'] = '邮件标题' 
# 发送方信息
message['From'] = sender 
# 接受方信息
message['To'] = receivers[0]  

# 获取API接口返回的socks代理IP,根据返回格式进行解析,json为例
proxy_ip = requests.get(api_url).text
proxy_ip = json.loads(proxy_ip)
addr=proxy_ip['data']['proxy_list'][0].split(":")[0]
port=int(proxy_ip['data']['proxy_list'][0].split(":")[1])

# 将socks代理应用到smplib服务
socks.set_default_proxy(proxy_type=socks.PROXY_TYPE_SOCKS5, 
                        addr=addr, 
                        port=port,
                        username=username,
                        password=password)
# Attempts to replace a module's socket library with a SOCKS socket.
socks.wrap_module(smtplib)

# 登录并发送邮件

# 上下文管理器写法,若邮件发送失败,会raise异常
with smtplib.SMTP() as smtpObj:
    # 连接到服务器
    smtpObj.connect(mail_host,mail_port)
    # 登录到服务器
    smtpObj.login(mail_user,mail_pass)
    # 发送
    smtpObj.sendmail(
        sender,receivers,message.as_string())

print("success")

"""
# 普通写法
try:
    smtpObj = smtplib.SMTP() 
    # 连接到服务器
    smtpObj.connect(mail_host,mail_port)
    # 登录到服务器
    smtpObj.login(mail_user,mail_pass) 
    # 发送
    smtpObj.sendmail(
        sender,receivers,message.as_string()) 
    # 退出
    smtpObj.quit() 
    print('success')
except smtplib.SMTPException as e:
    # 打印错误
    print('error',e)

"""

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐